Skip to content

get_joint_walls

Runs at once Any mode Open to every client

Return the freedrive joint walls in force, with their stable ranges. In freedrive (IDLE mode, on an enabled, homed arm with gravity compensation on) every joint has a wall near each end of its range, which pushes back like a spring with damping as you turn the joint into it. A wall is set by how it behaves, its natural frequency and damping ratio, the same on every joint; the robot turns that into stiffness and damping with the joint's inertia at each pose. A joint pushed through its wall gets its freedrive reaction.

It asks the robot for the walls in force, the values they resolve to and the ranges that stay stable. It moves nothing.

Syntax

robot.get_joint_walls()

Arguments

None.

Returns

dict

{"walls": [...], "policy": {...}, "robot_xml": name}. walls holds one dict per joint: - joint (1 to 6), enabled (whether the joint has a wall), at ("soft" or "hard": at the soft or the hard limit), lo_deg and hi_deg (where its two walls are, deg). - In force: frequency_hz, damping_ratio, filter_ms (the speed filter behind the damping, ms), scaling ("adaptive" or "fixed"), max_torque_nm, breakthrough_deg, freedrive ("warn" or "stop"). - Stable ranges: frequency_max_hz (for this filter), damping_ratio_window (at this frequency and filter), breakthrough_max_deg (None when no endstop limits it). - At the joint's lightest pose: stiffness_nm_per_deg, damping_nm_s_per_deg, stiffness_max_nm_per_deg, damping_window_nm_s_per_deg and inertia_kg_m2; stiffness_scale_max (how many times stiffer at its heaviest pose), scale_here (at the arm's pose now), drive_torque_nm (the most the joint's drive can give, Nm). - spec (the settings as given, None meaning auto), unsaved (True when they differ from the robot XML), note (why a setting is not used, or ""). policy is the part of config/system.xml <haptic_walls> the walls use: enabled, joint_walls, stiffness (N/m), damping (N s/m), velocity_tau (s), joint_max_torque (Nm), joint_breakthrough (deg). robot_xml names the robot XML file the walls are saved to.

Examples

wall = robot.get_joint_walls()["walls"][4]  # J5
wall["frequency_hz"], wall["damping_ratio"]
Usage restrictions never refused

This command runs at once; it is not queued. The robot accepts it in any mode and state, from every client.

It never answers with an error code.

In Python, the call raises:

  • RobotTimeout: The robot did not answer within 5 s.
  • RobotConnectionError: The client is not connected.

If the connection drops while the call waits for the robot's answer, it raises CommandRejected with the code CONNECTION_LOST (DISCONNECTED after disconnect()); while it waits for the robot's status, RobotConnectionError.

Like every immediate command, it also answers BAD_ARGS when a raw client sends a value the robot cannot read at all, and INTERNAL when it fails inside the robot.

Protocol

A client that does not use robotclient sends this over the TCP command protocol (port 29000) for the example above:

{"id": "c1", "cmd": "get_joint_walls", "args": []}

See also