CHANGELOG
1. Version 5.1.6
Release date: 2025.06.16
1.1 New Features
- [Data Collection] (!186): Enable fully open length control of G2 using E2/PE2 through remapping. If using old end effector or need special configuration, please modify parameters in
config_full.yaml
. - [Data Collection]: Update data recording methods using MCAP file format.
- [Data Collection]: Use a simple bootstrap script to configure the system parameters for data collection. The usage of data collection can be found in the data collection documentation
- [Model Reproduction]: Add model reproduction support for PI0 and ACT. Refer to the PI0 model reproduction documentation and ACT model reproduction documentation for more details.
1.2 Bug Fixes
- [SDK] (!304): Fix firmware version display error at order and old dm motor.
- [Control Service] (!306): Fix the issue that arm with old G2 use error gravity compensation parameters.
2. Version 5.1.5
Release date: 2025.06.13
2.1 New Features
- [SDK] (!228): Add firmware version info in
get_product_info
method.
2.2 Bug Fixes
- [Control Service] (!285): Fix the value of d6 of play with E2B from 0.1488 to 0.1488995. Fix the issue that some reasonable pose cannot be accepted due to validation error.
- [Control Service] (!291): Fix the issue that the inverse kinematics solution may fail at some poses when first launched.
- [Control Service]: Fix the issue that E2 got inaccurate position of open length.
- [Firmware]: Fix the issue that position calibration will not release DM motors which may cause collision.
3. Version 5.1.4
Release date: 2025.05.28
3.1 New Features
- [Control Service]: Add support for directly
MIT
control.
3.2 Bug Fixes
- [SDK] (!251, !254): Remove unimplemented method
servo_eef_force
. - [SDK: CPP Client] (!289): Fix the issue that the
MoverEefPos
method cannot be used to move end effector. - [SDK: CPP Client] (!297): Fix the issue that the
GetMode
method andGetControlMode
method have duplicated functionality and remove theGetMode
method.
4. Version 5.1.3
Release date: 2025.05.21
4.1 New Features
- [Firmware, Control Service]: Add home position setting for motor, which will be used when stop the control service or position calibration.
- [SDK: Cpp Client]: Add Cpp SDK.
4.2 Bug Fixes
- [Firmware] (!278): Fix the issue that position of motor will lost after restart power without unplugging USB cable.
- [Control Service]: Fix the issue that the control service cannot be launched on X5 RDK with G2.
- [Configuration] (!277): Fix the issue that the can rules are removed after package upgrade.
5. Version 5.1.2
Release date: 2025.05.09
5.1 New Features
- [Firmware]: Add support for manual zero point reference calibration. To trigger the calibration, press and hold the base board button for 3 seconds when the AIRBOT Play is not controlled by any control service.
- [Control Service]: Add log dumpping. Now launching control service via
airbot_fsm
orairbot_server
will automatically create a log folderairbot_logs
and dump the logs inairbot_logs/<TIMESTAMP>
folder. The logs are also dumped to the console. - [Configuration]: Add idleness check for
airbot_fw_upgrade
. Now the upgrade would fail to start if AIRBOT Play is currently being used by another process.
5.2 Bug Fixes
- [Documentation] (!271): Fix the broken url at the intro page.
- [Documentation] (!247): Add missing specification of the control modes in which the control service should be before calling respective control methods.
- [Control Service] (!266): Fix the issue that occasionally gripper cannot be controlled via short press on end button when in free-drive state of record-replay APP.
- [Control Service] (!245): Fix the issue that fingers of G2 would rebound when closing the gripper in the record-replay APP.
- [SDK: Examples] (!232): add support for
servo_joint_vel
mode inairbot_examples.switch_mode
example. - [SDK: Python Client] (!253): Forcing argument type checks in all SDK methods. This is to prevent the user from passing in incorrect types of arguments, which may cause the robot to behave unexpectedly.
- [SDK: Python Client] (!235): Remove
get_eef_vel
method as not planned. - [SDK: Python Client] (!219): Fix the issue that
move_with_cart_waypoints
would raise exception immediately after the method is called. - [Control Service] (!276): Fix the issue that simultaneously launching more than 3 control services would cause the last one to fail.
- [Configuration] (!268): Fix the issue that the bizzarre display of progress bar when upgrading firmware via
airbot_fw_upgrade
command.
6. Version 5.1.1
Release date: 2025.05.07
6.1 New Features
- [SDK: Python Client]: Add parameter update example with Python SDK. This example will update the parameters of the robot and print the updated parameters. The example can be run with the following command:
-
[SDK: Python Client]: Add shortcuts for examples. Starting from this version, you can run examples with the following commands:
Supported examples are:# For example, keyboard control example can be launched with: arm_kbd_ctrl -u <URL> -p <PORT> # Instead of python3 -m airbot_examples.task_kbd_ctrl -u <URL> -p <PORT>
Example Shortcut Launch via Python module Keyboard control arm_kbd_ctrl
python3 -m airbot_examples.task_kbd_ctrl
Motion following arm_follow
python3 -m airbot_examples.task_follow
Switch control mode arm_switch_mode
python3 -m airbot_examples.switch_mode
Load app arm_load_app
python3 -m airbot_examples.app_load
Unload app arm_unload_app
python3 -m airbot_examples.app_unload
Print joint position arm_joint_state
python3 -m airbot_examples.get_joint_pos
Print end pose arm_end_pose
python3 -m airbot_examples.get_end_pose
Parameter query arm_get_params
python3 -m airbot_examples.get_end_pose
Parameter update arm_set_params
python3 -m airbot_examples.set_params
Move end effector to a cartesian pose arm_move_cart_pose
python3 -m airbot_examples.move_cart_pose
Move to a set of joint angles arm_move_joint
python3 -m airbot_examples.move_joint_pos
Move along a set of cartesian waypoints arm_move_cart_waypoints
python3 -m airbot_examples.move_with_cart_waypoints
Move along a set of joint waypoints arm_move_joint_waypoints
python3 -m airbot_examples.move_with_joint_waypoints
Swing example: continuous swing in joint space arm_example_swing
python3 -m airbot_examples.task_swing
Wipe example: continuous wipe in cartesian space arm_example_wipe
python3 -m airbot_examples.task_wipe
-
[System Configuration] Add
airbot_server
as an alias forairbot_fsm
,airbot_fw_upgrade
as an alias forairbot_iap
, andairbot_bind_device
as an alias forbind_airbot_device
in theairbot-configure
package. This is to make the command names more user-friendly and easier to remember. - [System Configuration] Add a new firmware upgrade tool. Now the firmwares of AIRBOT arm series are shipped as a whole package inside the container image, and the package can be burned directly with one command:
- [System Configuration] With the new upgrade tool, the time required to upgrade the firmware for the whole arm is shortened to less than 2 minutes.
- [Documentation] Add concept sections to describe the internal states of the control services
6.2 Bug Fixes
- [Control Service]: Fix the issue that control service cannot read states of AIRBOT Replay.
- [Control Service]: Disable collision protection introducted in
5.1.0
by default. - [System Configuration]: Fix the issue that device name bindings created by
bind_airbot_device
are removed after package upgrade.
7. Version 5.1.0
Release date: 2025.04.29
7.1 Breaking Changes
- [System Configuration]: The argument of
airbot_fsm
command to specify control port is changed from-P
to-p
to align with SDK.-P
will now specify the product type. - [Control Service]: The home position of the arm is changed to a new position, in order to avoid collision between end effector and the robot itself. The new home position is:
in which links are either parallel or perpendicular to the ground. The new home position is also the default position to go to after the zero point reference is calibrated.
* [Control Service]: Add support for motor firmware version 5015
. Motor firmware version 5015
addresses the critical issue of short-time twitching when switching mode to gravity compensation. To upgrade motor #4-#6 to 5015
version, a special set of hardware upgrading tools is required. Please contact AIRBOT support for more information.
7.2 New Features
- [Control Service]: Largely reduce the image size of the control server. Now the image size is about 620MB, which is about 1/6 of the original size.
- [Control Service]: If the zero position reference needs to be calibrated when the control server is launched, the control server will wait for calibration to complete before subsequent operations.
- [Control Service]: Add
enable_protected_mode
bool parameter to enable/disable the collision protection of the motors. This feature is enabled by default. The parameter can be set by the Python SDK: - [SDK: Python Client]: Add URL argument (
-u
) to specify the URL of the control server. This allows you to control AIRBOT Pro, and also another robot from a remote location. - [System Configuration]: Add
bind_airbot_device
command (shipped withairbot-configure
deb package) to bind the AIRBOT device with certain interface name. After binding, the device will be recognized by the system with the specified name. This is useful when you have multiple AIRBOT devices connected to the same host and want to distinguish them by name.# In this example, the connected device is bound to the name "can_tbw" # sudo bind_airbot_device Detecting connected USB2CAN devices... Detected USB2CAN devices: 1. 002/034 Serial number: 205B334C5543 Enter desired CAN interface name for device with serial number 205B334C5543 (e.g., can_left) or press Enter to skip this device: can_tbw udev for can_tbw created in /etc/udev/rules.d/91-usb-slcan-airbot.rules Udev rules reloaded successfully. Reconnect your USB2CAN devices.
7.3 Bug Fixes
- [Control Service]: Fix the issue that the control service is not able to control AIRBOT Play lite.
- [Control Service]: Fix the critical issue of control server misbehaving when the gravity compensation parameters are not calibrated. Now service checks the presence of the parameters, and will NOT start if the parameters are not calibrated.
- [Control Service]: (fixed only for motor firmware
5015
) Fix the issue of short-time twitching when motor #4-#6 enters protection state or gravity compensation state. - [Control Service]: Fix the issue of RecoredAndRecord not able to exit in ReplayWaiting mode.
- [SDK: Server]: Fix the issue of returning
False
but still moving afterwards in waypoint control mode. - [SDK: Server]: Fix the issue of not resetting with multiple parts of path planning.
- [System Configuration] Fix the issue of interference between multiple control servers in the same subnet. It is not necessary to set
ROS_DOMAIN_ID
variable now.
7.4 Known Issues
- [Control Service]: AIRBOT Play Lite is using URDF of AIRBOT Play right now.
8. Version 5.0.9
Release date: 2025.04.17
8.1 Control Services
8.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:
- The default threshold for motor #1 - #3 is
5.0
and for motor #4 - #6 is2.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
andPLANNING_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
andmove_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
andmove_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
8.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.
8.2 Python SDK
8.2.1 New Features
8.2.2 Bug Fixes
task_kbd_ctrl
: Align the home position of the arm with the home position when cleaning up.
9. Version 5.0.8
Release date: 2025.04.10
9.1 Python SDK
9.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 byrobot.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
andset_params
method to read / write parameters for internal nodes. Useful parameters:servo_node.moveit_servo.scale.linear
: linear speed scale in servo control modesservo_node.moveit_servo.scale.rotational
: rotational speed scale in servo control modesservo_node.moveit_servo.scale.joint
: joint speed scale in servo control modessdk_server.max_velocity_scaling_factor
: velocity scale in planning control modessdk_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 information print in get examples (
get_joint_pos
andget_end_pose
) - Add position syncing before following in the
task_follow
example
9.1.2 Bug Fixes
- Fix
None
returned byget_joint_eff
- Use enum class
RobotMode
to replace plain integer to represent robot mode. Output ofrobot.get_control_mode()
is nowRobotMode
instead of integer. - Use enum class
State
to replace plain integer to represent robot state. Output ofrobot.get_state()
is nowState
instead of integer. - Unify the interfaces of end effector, now
list[float]
is passed and returned forget_eef_pos
,set_eef_pos
andservo_eef_pos
. - Add support for Python 3.8 (to support Ubuntu 20.04)
- Fix the incorrect always-true return value of
load_app
andunload_app
methods. - Fix the exception raised by
servo_eef_pos
andmove_eff_pos
9.2 Control Service
9.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
9.3 Shipping
9.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_iap
is available now to upgrade the firmware of the boards.Firmware upgrade must not run simultaneously with control server!
9.3.2 Bug Fixes
- Use
199
as the default ROS Domain ID to avoid conflict with other ROS 2 nodes.