matlab-fit-tire-model
Fit a tire model (Magic Formula 6.2/5.2/5.1, Dugoff, or Fiala) to measured tire force and moment data using the Vehicle Dynamics Blockset Extended Tire Features API (tireData.import, tireModel.new, tireModel.fit, tireModel.export)
Install / Use
npx skills add matlab/matlab-agentic-toolkit --skill matlab-fit-tire-modelInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of matlab-fit-tire-model
matlab-fit-tire-model scores 85/100 on our quality scale, 459th of 600 Data & Analytics skills we index.
Its SKILL.md is 21 KB long, well organised into 22 sections with 3 code examples: a thorough specification that gives an agent plenty to work with.
With 1,098 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated about 2 months ago, so matlab-fit-tire-model is actively maintained.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
matlab-fit-tire-model compared with similar skills
All 4 of these similar skills score higher than matlab-fit-tire-model; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| matlab-fit-tire-model (this skill)by matlab | 85 | 1.1k | 54d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 110.4k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 79.2k | 1d ago | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 100.1k | today | MCP Server |
| crawl4aiby unclecode | 100 | 87.1k | 4d ago | MCP Server |
Frequently asked questions
- How do I install matlab-fit-tire-model?
- Run
npx skills add matlab/matlab-agentic-toolkit --skill matlab-fit-tire-model. The install tabs above show the steps for each supported agent. - Which AI agents does matlab-fit-tire-model work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is matlab-fit-tire-model safe to use?
- It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is matlab-fit-tire-model still maintained?
- The repository was last updated about 2 months ago, so matlab-fit-tire-model is actively maintained.
Skill content
View source on GitHubname: matlab-fit-tire-model
description: >
Fit a tire model (Magic Formula 6.2/5.2/5.1, Dugoff, or Fiala) to measured tire
force and moment data using the Vehicle Dynamics Blockset Extended Tire Features
API (tireData.import, tireModel.new, tireModel.fit, tireModel.export). Use when
fitting, parameterizing, or calibrating a tire model from tire measurement data
(TYDEX, Calspan, MTS, or text/CSV from any test source), creating a .tir file, or
building a Magic Formula tire model from test data. Also use for the individual
steps: importing TYDEX, Calspan, MTS, or CSV tire data (file extensions .tdx for
TYDEX; .data, .tim, .rsp for MTS; any other extension read as text) into a
tireData object,
exporting a tire model to .tir, inspecting, smoothing, cropping, or plotting tire
measurement data or a model's response, or converting a fitted model to another type.
license: https://www.mathworks.com/content/dam/mathworks/license/pmrl/license.md
metadata:
author: MathWorks
version: "1.0"
Fit a Tire Model from Tire Measurement Data
Fit a tire model from tire measurement data using the Vehicle Dynamics Blockset Extended Tire Features API. The API supplies the fitter, so the work is three judgments it does not enforce: query the valid fit types and their order rather than hardcoding them, route data to each fit type by channel content, and report which fit types were left at defaults.
When to Use
- You have tire measurement data (in TYDEX, Calspan, MTS, or text/CSV form, from any test
source) and want a fitted tire model or a
.tirfile. This full fitting workflow is the primary use. - You want a single step of that workflow against tire measurement data or a tire model:
import to a
tireDataobject; export a model to.tir; inspect, summarize, crop, or smooth measurement data; plot measurement data or a model's response; convert a fitted model to another type. See Partial invocation below. - Target model type is Magic Formula 6.2 (the worked example), MF5.2, MF5.1, Dugoff, or Fiala.
When NOT to Use
- Designing an FIR or IIR signal filter: use
matlab-design-digital-filter. This skill'sfilter()is channel smoothing during fitting, not filter design. - Cleaning generic (non-tire) signals, or building signal datastores and labels for ML: use
matlab-prepare-signal-data. Smoothing, cropping, or downsampling atireDataobject stays here. - Specifying or planning a plant or tire-subsystem architecture for closed-loop simulation: use
specifying-plant-models(Simulink Agentic Toolkit). - Adding, wiring, or restructuring blocks in a model: use
building-simulink-models(Simulink Agentic Toolkit). This skill only writes fitted parameters into an existing tire block viaset. - Simulating a model containing the tire block: use
simulating-simulink-models(Simulink Agentic Toolkit). Inspecting a fit you just ran is in scope. - Grabbing a reference or production tire to simulate against (
tireModel.builtin); it is ruled out as a fitting seed. - Deriving or hand-coding Magic Formula coefficients yourself; the API supplies the fitter.
- The Step 0 prerequisite gate fails (Extended Tire Features support package or Optimization
Toolbox missing): the user runs
matlab-install-productsormatlab-list-products, not you.
Workflow
The full fit is a step-ordered sequence. Steps 0 through 9 run in order. Load
references/fit-type-data-requirements.md when you
reach Step 2 (routing) or Step 5 (fitting): it holds the per-fit-type data-requirements
table, the channel-content routing table, and the Dimensions geometry-property details.
0. Recognize the path and check prerequisites
Gate on class availability, not detect_matlab_toolboxes (misses support packages) or
matlabshared.supportpkg.getInstalled. Confirm the methods
are present so a same-named custom class cannot pass:
if exist('tireModel','class') ~= 8 || ...
~all(ismember(["new" "fit" "export"], ...
string({meta.class.fromName('tireModel').MethodList.Name})))
error("Extended Tire Features support package not found. Install it from Add-Ons.");
end
If either gate fails, report it, stop, and tell the user to install the missing product; never
install it yourself. Do not hand-roll Magic Formula. fit requires Optimization
Toolbox (new does not). Check install and license separately. Nothing overrides an empty
ver("optim"): which('fmincon') resolves either way, and a license check passes for a
licensed-but-absent product.
if isempty(ver("optim"))
error("Optimization Toolbox not installed.");
elseif ~license('test','optimization_toolbox')
error("Optimization Toolbox unlicensed.");
end
1. Import to a tireData array
obj = tireData.import(filepath, ...) takes a string scalar or array and returns a
tireData array, one element per file. Recognized formats (TYDEX, MTS, Calspan) auto-convert
every channel to canonical SI units and import as ISO coordinates, which is what Magic Formula
expects. So after a recognized-format import, angles are in radians, not degrees, and no
coordinate fiddling or manual slip-angle negation is needed. Import options are
extension-gated (TYDEX honors only DatetimeFormat/Locale; MTS adds VariableAlias;
text/CSV passes all options through).
On the text/CSV path, or when hand-authoring a tireData property from another source, you
supply the units and coordinates: provide radians, N, Nm, and Pa, or designate the file's
units with VariableUnits, VariableUnitsLine, or HeaderUnits, and pass CoordinateSystem=
(or convert after import with coordinateTransform(obj, "ISO")).
2. Inspect content and classify each channel (routing foundation, C2)
The routing decision is made here and carried to Step 5. For each imported object, classify
alpha, kappa, Fz (and gamma/V where relevant) as constant, swept, or stepped, using
public methods only. summaryTable gives one per-object statistic per channel: DataStat="range"
for the swept-versus-held call (large span = swept, small = held), DataStat="mean" for each
channel's level. Read the two together: the mean is a meaningful level only for a channel the
range shows is held; for a swept channel the mean is just the sweep's center. Narrow
VariableNames= to Filename, the channels you route on, and any response channel whose
presence you test; it defaults to every tireData property, so an unnarrowed table is over
eighty columns wide with filepaths and comments in it.
routeVars = ["Filename" "alpha" "kappa" "Fz" "gamma" "V"];
spans = summaryTable(td, VariableNames=routeVars, DataStat="range");
means = summaryTable(td, VariableNames=routeVars, DataStat="mean");
split(obj, channel) returns one element per discrete level: more than one means bundled
fixed-level cases; exactly one emits the expected warning Unable to identify splits in data
("one level," not an error). Splitting is optional: fit accepts a multi-condition object
directly, so split only when you need per-sweep processing (filter smoothing, mean hold),
never merely to fit. Never assume a channel's role: Fz swept is a load sweep (RL/Re), Fz
stepped is bundled load cases, Fz constant is a single-load test. Determine it per object. The
pure-versus-combined split is on mean alpha, not alpha range (a naive alpha-range threshold
misclassifies). Angles are radians (Step 1).
3. Choose or honor the model type (query the list, C1 philosophy)
Valid types come from vdyntire.tiremodels.modelTypes(). The set is version-dependent, so
query it and never embed a hardcoded list; new also accepts "MF" as an alias for MF62.
Honor the user's stated type: validate it against modelTypes() and use it, do not silently
substitute. The type drives the whole schedule (Fiala and Dugoff have no Nominal, no
combined, and no Re/relaxation/contact-patch fits), so never replay the MF62 schedule on
another type. If the user names no type, stop before Step 4: list the types from modelTypes()
and end your turn asking which to use. If the user named the intended simulation, you may say
which types suit it, but still ask. A file format or an intended use does not name a type;
every supported type exports to .tir. If the user names
an unsupported model (for example FTire, MF-Swift, CDTire, or another third-party
designation), use your own tire-model knowledge to propose the nearest supported alternative
under three guardrails: the final choice must be a member of modelTypes() (validate the
proposal live), name the gap honestly and never silently swap, and stop to confirm, as above.
For a fundamentally different model class (transient, thermal, high-frequency), it is fine to
answer that this workflow cannot produce that model.
4. Query the valid fit types and order (C1), never hardcode
Normal path: vdyntire.tiremodels.fitTypes(ModelType=<type>) returns the fittable types in a
valid schedule order, as a column string array, so loop by index. Iterate them in returned order
and fit each type the data supports;
Nominal-upstream falls out naturally because fitTypes lists it first for Magic Formula and
omits it for Fiala/Dugoff. fitTypeDependency is the
secondary, diagnostic tool: [deps, params] = tm.fitTypeDependency(<type>) returns the
transitive closure of upstream prerequisites, ordered dependencies-first, excluding the type
itself. Use it only to validate or repair a user-forced custom order, and to reason about what
becomes unfittable when a prerequisite is skipped for lack of data. Take dependencies from it
rather than from a documentation table. Do not try/catch-probe a type list;
fitTypeDependency errors on a type the model lacks, so enumerate
with fitTypes instead.
5. Route by content (C2); route it yourself, fit will not
The Tire Manager app auto-assigns data to fit types with an internal inspector; the
command-line fit API does not. fit checks only channel presence and warns on wrong-condition
data, then concatenates everything and fits. So handing every file to every fit type biases the
fits with wrong-condition data and emits only warnings. Route by selecting the objects whose
Step-2 classification matches each fit type's row in
references/fit-type-data-requirements.md, then pass that object or array to fit. Never route
by filename or subfolder. Nominal, Limits, and Dimensions consume ALL data, not a swept
subset. crop trims unusable rows within an object; filter, mean, and downsample are
per-object processing (smoothing, holding, decimation), never row selection.
6. Seed the model (new or import; builtin ruled out)
Fit from scratch with tireModel.new(<type>): physically reasonable nonzero defaults, ready to
fit. Fit a variant or re-fit an existing tire with tireModel.import(<parent>) (a .tir or
.mat path, an extensionless TIR file, or a parameter struct): it starts the optimizer near the
answer, so fit only the types the variant changed. When seeding via import, the model type comes
from the file, so query fitTypes against the imported model's actual type and surface any
disagreement with the requested type. The C3 baseline also changes: untouched parameters retain the
imported parent's coefficients rather than new defaults, and Step 9 must name which.
tireModel.builtin is not a seed (fit errors on a builtin model); it is only for grabbing a named
reference tire to simulate against.
Prefer fitting Nominal, Limits, and Dimensions over hand-setting model coefficients: never
hand-set FNOMIN, dimensions, or limits as model properties. Legitimate manual setting is on the
tireData object (for example a dimension property the headers omit), never on the model
coefficients a fit should set. Dimensions fits from the tireData geometry properties, which
TYDEX import populates from the file
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
110.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
79.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
100.1k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
crawl4ai
87.1kOfficial Crawl4AI Cloud: a hosted web scraping, extraction, and search API for AI agents. Free API key, 1,000 credits a month, no card. Fully open source: this repo is the Apache-2.0 crawler that powers it, and you can self-host it.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
