Skip to content

CHANGELOG

1. Version 5.0.9

Release date: 2025.04.17

1.1 Control Services

1.1.1 New Features

  • Largely optimize the performance of control server, now the CPU usage is reduced to less than half of the original.
  • Largely optimize launch time of control server, now the launch time is about 8 seconds with x86_64 host and 15 seconds on X5 RDK.
  • New feature: maximum torque protection during arm operation
  • This feature is intended to prevent the robot from severely damaging surrounding environment and is NOT a guarantee of absolute safety. It is strongly discouraged to solely rely on this feature to conduct any human-related interactions.
  • This feature also prevents motor from entering overload or over-temperature state.
  • The maximum torque can be set by the Python SDK:
    # For motor #1 - #3, the param name start with "od_motor_<INTERFACE>_<INDEX>"
    robot.set_params({"od_motor_can1_2.over_effort_thres": 10.0})
    # For motor #4 - #6, the param name start with "dm_motor_<INTERFACE>_<INDEX>"
    robot.set_params({"dm_motor_can1_5.over_effort_thres": 5.0})
    
  • The default threshold for motor #1 - #3 is 5.0 and for motor #4 - #6 is 2.0.
  • New feature: offline replaying
  • Paths recorded in the record-replay app can not be downloaded to AIRBOT Play and be played without external control services.
    • Double press base board button in Idle mode (constant cyan light effect)
    • During downloading, the light effect is rainbow
    • When downloading completes, the light effect returns to cyan
  • To replay the path once (in offline mode), long press the base board button when USB cable is unplugged (constant white light effect)
    • During replaying, the light effect is rainbow
    • When replaying completes, the light effect returns to constant white
  • To replay the path indefinitely (in offline mode), double press the base board button when USB cable is unplugged (constant white light effect)
    • During replaying, the light effect is rainbow
    • To interrupt the replaying, press once on the base board button, AIRBOT Play will wait for the current path to finish and then returns to home position and then stops
  • New feature: waypoint control mode:
  • Two new control modes are added: PLANNING_WAYPOINTS_PATH and PLANNING_WAYPOINTS
    • PLANNING_WAYPOINTS_PATH: Perform linear interpolation between waypoints in cartesian space, then execute the path without stopping.
    • PLANNING_WAYPOINTS: Perform local planning between adjacent waypoints, join the planned paths then execute the path. Deceleration may occur near waypoints.
  • Two new Python SDK methods are added: move_with_cart_waypoints and move_with_joint_waypoints
    • move_with_cart_waypoints: move the robot arm along a series of cartesian waypoints.
    • move_with_joint_waypoints: move the robot arm along a series of joint space waypoints.
    • please refer to Python SDK reference for detailed usage.
  • Two SDK examples are added: move_with_cart_waypoints and move_with_joint_waypoints for demonstration of newly added SDK methods.
    • python3 -m airbot_examples.move_with_cart_waypoints
    • python3 -m airbot_examples.move_with_joint_waypoints

1.1.2 Bug Fixes

  • Replace RNE (Recursive Newton-Euler) with deterministic analytical inverse kinematics solution. This solves the wrist flipping issue in previous versions.
  • Add check during launch to ensure that for each robot only one control service is currently running
  • Add check during launch to ensure that the same CAN bus is not occupied by multiple processes
  • Fix the issue of false alarming zero point reference loss when power is unplugged but USB cable is not unplugged
  • Fix the jitter issue when performing offline replay
  • Fix the light effect:
  • The light effect changes from constant green to constant white when powered on but no USB cable is plugged in
  • Fix the issue of incorrect zero point reference reset of E2 when powered on.
  • The E2 zero point reference is now calibrate at the factory (using the new production tool) and is not affected by the power on state.
  • Fix the precision issue of the URDF model. Lower the possibility of false positive collision detection.

1.2 Python SDK

1.2.1 New Features

1.2.2 Bug Fixes

  • task_kbd_ctrl: Align the home position of the arm with the home position when cleaning up.

2. Version 5.0.8

Release date: 2025.04.10

2.1 Python SDK

2.1.1 New Features

  • Add airbot_py.arm.SpeedProfile class to set speed profile for arm. Now the speed of the arm can be altered by robot.set_speed_profile(SpeedProfile.DEFAULT). Currently supported speed profiles are:
    • SpeedProfile.SLOW
    • SpeedProfile.DEFAULT
    • SpeedProfile.FAST: May move too fast. Use at your own risk!
  • Add get_params and set_params method to read / write parameters for internal nodes. Useful paramters:
    • servo_node.moveit_servo.scale.linear: linear speed scale in servo control modes
    • servo_node.moveit_servo.scale.rotational: rotational speed scale in servo control modes
    • servo_node.moveit_servo.scale.joint: joint speed scale in servo control modes
    • sdk_server.max_velocity_scaling_factor: velocity scale in planning control modes
    • sdk_server.max_acceleration_scaling_factor: acceleration scale in planning control modes
  • Add get_product_info method to obtain internal product information (product type, serial number, etc.)
  • Add exception handler to print details of exceptions in a human-readable format.
  • Add logging config for examples
  • Add end effector control in keyboard control example (using [ and ] to control)
  • Add speed profile switch in keyboard control example (using ENTER to switch)
  • Add joint-space and cartesian-space switch in keyboard control example (using SPACE to switch)
  • Add joint-space control in keyboard control example (using 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, = to control)
  • Add speed profile arguments in examples -S [fast, default, slow]
  • Add product infomation print in get examples (get_joint_pos and get_end_pose)
  • Add position syncing before following in the task_follow example

2.1.2 Bug Fixes

  • Fix None returned by get_joint_eff
  • Use enum class RobotMode to replace plain integer to represent robot mode. Output of robot.get_control_mode() is now RobotMode instead of integer.
  • Use enum class State to replace plain integer to represent robot state. Output of robot.get_state() is now State instead of integer.
  • Unify the interfaces of end effector, now list[float] is passed and returned for get_eef_pos, set_eef_pos and servo_eef_pos.
  • Add support for Python 3.8 (to support Ubuntu 20.04)
  • Fix the incorrect always-true return value of load_app and unload_app methods.
  • Fix the exception raised by servo_eef_pos and move_eff_pos

2.2 Control Service

2.2.1 Bug Fixes

  • Slow down the speed of the arm on exit when returning to the starting point
  • Add torque limit to end effector controller to prevent motor entering overload or over-temperature state.
  • Fix the bugs when trying to load record_replay_app
  • Disable internal singularity check in moveit2, to avoid stuck when in servo control modes.
  • Fix possible timeout when sending planning request in PLANNING_POS mode

2.3 Shipping

2.3.1 New Features

Based on the 5.0.8 version of airbot-configure,

  • airbot_fsm is available now to launch control server in a docker container:
    airbot_fsm -i <INTERFACE> -P <PORT>
    
  • airbot_iap is available now to upgrade the firmware of the boards.

    Firmware upgrade must not run simultaneously with control server!

    airbot_iap -f <FILEPATH> -d <INTERFACE> --mask <INDEX> -t <TARGET>
    

2.3.2 Bug Fixes

  • Use 199 as the default ROS Domain ID to avoid conflict with other ROS 2 nodes.