6-DOF anthropomorphic arm for testing orientation-constrained IK.
Structure:
- base_link
- shoulder_yaw (revolute, Z-axis)
- shoulder_link1
- shoulder_pitch (revolute, Y-axis)
- shoulder_link2
- shoulder_roll (revolute, X-axis)
- upper_arm (0.25m)
- elbow_pitch (revolute, Y-axis)
- forearm (0.2m)
- wrist_pitch (revolute, Y-axis)
- wrist_link
- wrist_roll (revolute, X-axis)
- hand
- tip_joint (fixed, 0.1m)
- tip
- tip_joint (fixed, 0.1m)
- hand
- wrist_roll (revolute, X-axis)
- wrist_link
- wrist_pitch (revolute, Y-axis)
- forearm (0.2m)
- elbow_pitch (revolute, Y-axis)
- upper_arm (0.25m)
- shoulder_roll (revolute, X-axis)
- shoulder_link2
- shoulder_pitch (revolute, Y-axis)
- shoulder_link1
- shoulder_yaw (revolute, Z-axis)
Total: 6 revolute joints providing full 6-DOF control
- Shoulder: yaw (Z), pitch (Y), roll (X) - spherical wrist
- Elbow: pitch (Y) - single axis bend
- Wrist: pitch (Y), roll (X) - allows tool orientation
This arm can achieve arbitrary position and orientation within its workspace. Total reach: ~0.55m from shoulder
Summary
Functions
Returns a child specification for starting this robot under a supervisor.
Returns the optimised robot representation.
Starts the robot's supervision tree.
Functions
@spec child_spec(Keyword.t()) :: Supervisor.child_spec()
Returns a child specification for starting this robot under a supervisor.
@spec robot() :: BB.Robot.t()
Returns the optimised robot representation.
This struct is built at compile-time from the DSL definition and contains:
- All physical values converted to SI base units (floats)
- Flat maps for O(1) lookup of links, joints, sensors, and actuators
- Pre-computed topology metadata for efficient traversal
Examples
robot = Elixir.BB.IK.TestRobots.SixDofArm.robot()
link = BB.Robot.get_link(robot, :base_link)
joint = BB.Robot.get_joint(robot, :shoulder)
@spec start_link(Keyword.t()) :: Supervisor.on_start()
Starts the robot's supervision tree.
Options
All options are passed through to sensor and actuator child processes.