Minimum-duration jerk-limited trajectory
Minimum-duration jerk-limited trajectory. Parameterized bounded JSON adapter; numerical operation, no hardware execution.
ruckig-minimum-duration-trajectory | Record version: 1.0.0
Record JSON | Markdown recipe | Complete search index
Fetch and prepare
curl -fsSL https://hub.superfastrobotics.com/skills/ruckig-minimum-duration-trajectory/skill.json
curl -fsSL https://hub.superfastrobotics.com/skills/ruckig-minimum-duration-trajectory/README.md
python /PATH_TO_SKILL/scripts/rsh.py inspect ruckig-minimum-duration-trajectory --json
python /PATH_TO_SKILL/scripts/rsh.py prepare ruckig-minimum-duration-trajectory --project ./experiment --expected-source-commit a8db97a4e9c55e5160a3855f739fa3b270df8e4c --expected-record-version 1.0.0 --plan --json
Inspect the requirements, then remove --plan to prepare a project. Preparation verifies the archive SHA256 and preserves exact source pins. --install-deps explicitly installs dependencies. Run the returned simulation command separately.
Environment
- Runtime
- ruckig 0.19.4
- Robot
- independent-axes
- Controller
- json-contract-v1
- Observation
- explicit-json-input
- OS / architecture
- windows / x86_64
- Python
- >=3.10,<3.11
Compatibility status: hub_verified
- Runtime
- ruckig 0.19.4
- Robot
- independent-axes
- Controller
- json-contract-v1
- Observation
- explicit-json-input
- OS / architecture
- linux / x86_64
- Python
- >=3.10,<3.11
Compatibility status: hub_verified
All inputs and outputs follow interface v1. Simulation adapters query exact synthetic simulator state; no perception or physical sensor compatibility.
Requirements
- x86_64 CPU; no GPU or robot required
No display. Matplotlib Agg for numerical imports; PyBullet DIRECT for simulation.
Packages: ruckig==0.19.4
Runtime dependency versions are pinned for the supported Python 3.10 x86_64 CPU environments and checked against execution receipts. Platform-specific wheel hashes are not represented as a universal artifact lock; prepare captures pip freeze.
External API keys: none.
Invocation
Executable interface
{
"version": "1",
"kind": "trajectory_generator",
"abstraction_level": 0,
"execution_domain": "computation",
"language": "python",
"input_transport": "json_file_or_inline",
"output_transport": "json_stdout",
"conventions": {
"linear_unit": "m",
"angular_unit": "rad",
"time_unit": "s",
"coordinate_frame": "independent_axes_in_input_array_order",
"joint_order": "input_array_order",
"quaternion_order": "not_used"
},
"input_schema": {
"type": "object",
"required": [
"current_position",
"current_velocity",
"current_acceleration",
"target_position",
"target_velocity",
"target_acceleration",
"max_velocity",
"max_acceleration",
"max_jerk",
"dt",
"coordinate_type",
"minimum_duration"
],
"additionalProperties": false,
"properties": {
"current_position": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m_or_rad",
"x-frame": "independent_axes_in_input_array_order",
"description": "current_position; units=coordinate_type:m_or_rad; frame=independent_axes_in_input_array_order"
},
"current_velocity": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s_or_rad/s",
"x-frame": "independent_axes_in_input_array_order",
"description": "current_velocity; units=coordinate_type:m/s_or_rad/s; frame=independent_axes_in_input_array_order"
},
"current_acceleration": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s^2_or_rad/s^2",
"x-frame": "independent_axes_in_input_array_order",
"description": "current_acceleration; units=coordinate_type:m/s^2_or_rad/s^2; frame=independent_axes_in_input_array_order"
},
"target_position": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m_or_rad",
"x-frame": "independent_axes_in_input_array_order",
"description": "target_position; units=coordinate_type:m_or_rad; frame=independent_axes_in_input_array_order"
},
"target_velocity": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s_or_rad/s",
"x-frame": "independent_axes_in_input_array_order",
"description": "target_velocity; units=coordinate_type:m/s_or_rad/s; frame=independent_axes_in_input_array_order"
},
"target_acceleration": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s^2_or_rad/s^2",
"x-frame": "independent_axes_in_input_array_order",
"description": "target_acceleration; units=coordinate_type:m/s^2_or_rad/s^2; frame=independent_axes_in_input_array_order"
},
"max_velocity": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s_or_rad/s",
"x-frame": "independent_axes_in_input_array_order",
"description": "max_velocity; units=coordinate_type:m/s_or_rad/s; frame=independent_axes_in_input_array_order"
},
"max_acceleration": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s^2_or_rad/s^2",
"x-frame": "independent_axes_in_input_array_order",
"description": "max_acceleration; units=coordinate_type:m/s^2_or_rad/s^2; frame=independent_axes_in_input_array_order"
},
"max_jerk": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
},
"x-unit": "coordinate_type:m/s^3_or_rad/s^3",
"x-frame": "independent_axes_in_input_array_order",
"description": "max_jerk; units=coordinate_type:m/s^3_or_rad/s^3; frame=independent_axes_in_input_array_order"
},
"dt": {
"type": "number",
"minimum": 0.01,
"maximum": 0.05,
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "dt; units=s; frame=independent_axes_in_input_array_order"
},
"coordinate_type": {
"type": "string",
"enum": [
"revolute_rad",
"linear_m"
],
"x-unit": "dimensionless",
"x-frame": "independent_axes_in_input_array_order",
"description": "coordinate_type; units=dimensionless; frame=independent_axes_in_input_array_order"
},
"minimum_duration": {
"type": "number",
"minimum": 0.1,
"maximum": 10,
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "minimum_duration; units=s; frame=independent_axes_in_input_array_order"
}
}
},
"output_schema": {
"type": "object",
"required": [
"time_s",
"position",
"velocity",
"acceleration",
"coordinate_type",
"duration_s"
],
"additionalProperties": false,
"properties": {
"time_s": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "number",
"minimum": 0,
"maximum": 150
},
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "time_s; units=s; frame=independent_axes_in_input_array_order"
},
"position": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10000,
"maximum": 10000
}
},
"x-unit": "coordinate_type:m_or_rad",
"x-frame": "independent_axes_in_input_array_order",
"description": "position; units=coordinate_type:m_or_rad; frame=independent_axes_in_input_array_order"
},
"velocity": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -1000,
"maximum": 1000
}
},
"x-unit": "coordinate_type:m/s_or_rad/s",
"x-frame": "independent_axes_in_input_array_order",
"description": "velocity; units=coordinate_type:m/s_or_rad/s; frame=independent_axes_in_input_array_order"
},
"acceleration": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -1000,
"maximum": 1000
}
},
"x-unit": "coordinate_type:m/s^2_or_rad/s^2",
"x-frame": "independent_axes_in_input_array_order",
"description": "acceleration; units=coordinate_type:m/s^2_or_rad/s^2; frame=independent_axes_in_input_array_order"
},
"coordinate_type": {
"type": "string",
"enum": [
"revolute_rad",
"linear_m"
],
"x-unit": "dimensionless",
"x-frame": "independent_axes_in_input_array_order",
"description": "coordinate_type; units=dimensionless; frame=independent_axes_in_input_array_order"
},
"duration_s": {
"type": "number",
"minimum": 0,
"maximum": 150,
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "duration_s; units=s; frame=independent_axes_in_input_array_order"
}
}
},
"preconditions": [
"Ruckig Community 0.19.4; no cloud client, IK, collision or physical control.",
"All axes share coordinate_type; m or rad and corresponding derivatives per second.",
"Velocity/stop modes do not guarantee target position. Maximum 3000 online cycles or 30 s offline trajectory."
],
"postconditions": [
"All declared checks must pass and all outputs must be finite.",
"Success applies only to this operation and model, not higher-level task completion."
],
"failure_codes": [
"invalid_input_or_environment",
"execution_failed",
"task_failed"
],
"composition": {
"depends_on": [],
"automatic_frame_conversion": false,
"automatic_hardware_execution": false
},
"output_selector": "outputs",
"origin_reference_ids": [
"ruckig-examples-07-minimum-duration-py"
],
"origin_relationship": "adapted_from; inspect declared model and inputs, not original robot compatibility"
}
Entrypoint: python run.py
{
"argv": [
"{python}",
"{recipe_dir}/run.py",
"--source-dir",
"{source_dir}",
"--example"
],
"inputs": {
"current_position": [
0,
0,
0.5
],
"current_velocity": [
0,
0,
0
],
"current_acceleration": [
0,
0,
0
],
"target_position": [
1,
-0.5,
0.25
],
"target_velocity": [
0,
0,
0
],
"target_acceleration": [
0,
0,
0
],
"max_velocity": [
1,
1,
1
],
"max_acceleration": [
2,
2,
2
],
"max_jerk": [
4,
4,
4
],
"dt": 0.01,
"coordinate_type": "revolute_rad",
"minimum_duration": 3.0
},
"outputs": {
"format": "single JSON object on stdout",
"payload_selector": "outputs",
"schema": {
"type": "object",
"required": [
"time_s",
"position",
"velocity",
"acceleration",
"coordinate_type",
"duration_s"
],
"additionalProperties": false,
"properties": {
"time_s": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "number",
"minimum": 0,
"maximum": 150
},
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "time_s; units=s; frame=independent_axes_in_input_array_order"
},
"position": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -10000,
"maximum": 10000
}
},
"x-unit": "coordinate_type:m_or_rad",
"x-frame": "independent_axes_in_input_array_order",
"description": "position; units=coordinate_type:m_or_rad; frame=independent_axes_in_input_array_order"
},
"velocity": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -1000,
"maximum": 1000
}
},
"x-unit": "coordinate_type:m/s_or_rad/s",
"x-frame": "independent_axes_in_input_array_order",
"description": "velocity; units=coordinate_type:m/s_or_rad/s; frame=independent_axes_in_input_array_order"
},
"acceleration": {
"type": "array",
"minItems": 2,
"maxItems": 3000,
"items": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "number",
"minimum": -1000,
"maximum": 1000
}
},
"x-unit": "coordinate_type:m/s^2_or_rad/s^2",
"x-frame": "independent_axes_in_input_array_order",
"description": "acceleration; units=coordinate_type:m/s^2_or_rad/s^2; frame=independent_axes_in_input_array_order"
},
"coordinate_type": {
"type": "string",
"enum": [
"revolute_rad",
"linear_m"
],
"x-unit": "dimensionless",
"x-frame": "independent_axes_in_input_array_order",
"description": "coordinate_type; units=dimensionless; frame=independent_axes_in_input_array_order"
},
"duration_s": {
"type": "number",
"minimum": 0,
"maximum": 150,
"x-unit": "s",
"x-frame": "independent_axes_in_input_array_order",
"description": "duration_s; units=s; frame=independent_axes_in_input_array_order"
}
}
}
}
}
Success: Exit 0, status=task_complete, success=true, finite outputs satisfying interface.output_schema and all declared numerical/model checks. This is not a physical robot or general task-success claim.
Timeout: 30 seconds. Caller must terminate the separate adapter process after 30 seconds; adapters bound iterations/scene steps and close simulation clients.
Failure modes
- Invalid or oversized JSON
- Source checksum mismatch
- Unavailable pinned dependency
- No valid path or postcondition failure
- Execution exceeding the declared bounded algorithm budget
Source and license
- Repository
- https://github.com/pantor/ruckig
- Authors
- Lars Berscheid and Ruckig contributors
- Commit
a8db97a4e9c55e5160a3855f739fa3b270df8e4c- Archive SHA256
2a935bfbe02f9236ecd138aee13b52fef2a43e67853179b727d394508ef98b08- License
- MIT
- Hub commit
39b06d7a6016edcea27e348e49ffd86f29ec1811
Evidence
Runtime: task_complete / task_complete
Three frozen positive cases passed against this exact adapter; see per-case receipts. This does not estimate general accuracy.
Reviewer: Hub maintainer runtime harness | 2026-10-19
- python tools/verify_executable_recipes.py --source-cache SOURCE_CACHE --output OUTPUT --backend ruckig
Submitter reports and hub verification remain separate. Source review does not establish task success.