xArm-C++-SDK
May 21, 2026 ยท View on GitHub
Overview
- The current version supports Linux/windows/MacOS(beta), but the source code structure has changed.
Caution
- During use, people should stay away from the robot arm to avoid accidental injury or damage to other items by the robot arm.
- Protect the arm before use.
- Before you exercise, please make sure you don't encounter obstacles.
- Protect the arm before unlocking the motor.
Update Summary
-
1.18.0/1.18.1
- Strengthen the code, fix some hidden bugs, and eliminate security risks.
- Supports CMake compilation
- Fix document errors and variable name errors
-
1.17.0/1.17.1
- Change some API names
-
1.16.0
- Added parameter to support get raw data of the Six-axis Force Torque Sensor
- Added an interface to control xArm Gripper G2
- Optimize the interface for controlling BIO Gripper G2
- Extend the get_joint_states interface
-
1.15.0
- Added the Six-axis Force Torque Sensor collision detection related interfaces
- Added support for the new version of BIO Gripper control interface
-
1.14.2
- Fix the 503 interface protocol identification error issue
- Added sync parameters to some gpio interfaces to support immediate execution (requires firmware 2.4.101 or above)
- Added XArmAPIWrapper to C# calls to support simultaneous control of multiple robotic arms
- Added new interface to support obtaining some error information
-
More
API Change List
| OLD API NAME | NEW API NAME | SDK VERSION |
|---|---|---|
| set_tgpio_modbus_timeout | set_rs485_timeout | 1.17.1 |
| get_tgpio_modbus_timeout | get_rs485_timeout | 1.17.1 |
| set_tgpio_modbus_baudrate | set_rs485_baudrate | 1.17.1 |
| get_tgpio_modbus_baudrate | get_rs485_baudrate | 1.17.1 |
| getset_tgpio_modbus_data | set_rs485_data | 1.17.1 |
| set_impedance | set_ft_sensor_admittance_parameters | 1.17.0 |
| set_impedance_mbk | set_ft_sensor_admittance_parameters | 1.17.0 |
| set_impedance_config | set_ft_sensor_admittance_parameters | 1.17.0 |
| set_force_control_pid | set_ft_sensor_force_parameters | 1.17.0 |
| config_force_control | set_ft_sensor_force_parameters | 1.17.0 |
| ft_sensor_set_zero | set_ft_sensor_zero | 1.17.0 |
| ft_sensor_iden_load | iden_ft_sensor_load_offset | 1.17.0 |
| ft_sensor_cali_load | set_ft_sensor_load_offset | 1.17.0 |
| ft_sensor_enable | set_ft_sensor_enable | 1.17.0 |
| ft_sensor_app_set | set_ft_sensor_mode | 1.17.0 |
| ft_sensor_app_get | get_ft_sensor_mode | 1.17.0 |
| get_linear_track_registers | get_linear_motor_registers | 1.17.0 |
| get_linear_track_pos | get_linear_motor_pos | 1.17.0 |
| get_linear_track_status | get_linear_motor_status | 1.17.0 |
| get_linear_track_error | get_linear_motor_error | 1.17.0 |
| get_linear_track_is_enabled | get_linear_motor_is_enabled | 1.17.0 |
| get_linear_track_on_zero | get_linear_motor_on_zero | 1.17.0 |
| get_linear_track_sci | get_linear_motor_sci | 1.17.0 |
| get_linear_track_sco | get_linear_motor_sco | 1.17.0 |
| clean_linear_track_error | clean_linear_motor_error | 1.17.0 |
| set_linear_track_enable | set_linear_motor_enable | 1.17.0 |
| set_linear_track_speed | set_linear_motor_speed | 1.17.0 |
| set_linear_track_back_origin | set_linear_motor_back_origin | 1.17.0 |
| set_linear_track_pos | set_linear_motor_pos | 1.17.0 |
| set_linear_track_stop | set_linear_motor_stop | 1.17.0 |
| shutdown_system | system_control | 1.13.6 |
| get_suction_cup | get_vacuum_gripper | 1.8.0 |
| set_suction_cup | set_vacuum_gripper | 1.8.0 |
Doc
Build
Requirements
- CMake 3.5 or newer
- A C++11 compiler
- Linux/macOS:
g++orclang++ - Windows: Visual Studio 2015/2017/2019/2022 with Desktop development for C++
The top-level CMakeLists.txt is written against CMake 3.5 features.
Get the code
git clone https://github.com/xArm-Developer/xArm-CPLUS-SDK.git
cd xArm-CPLUS-SDK
Output layout
By default, the current CMake build generates:
- libraries in
build/lib - executables in
build/bin
When building shared libraries, make sure the runtime loader can find build/lib.
Build With CMake
Linux
Configure and build:
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
Build static library instead of shared library:
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
make -j
Disable examples:
mkdir -p build
cd build
cmake .. -DXARM_BUILD_EXAMPLES=OFF
make -j
Run an example with shared library output:
LD_LIBRARY_PATH=./build/lib ./build/bin/0002-get_property 192.168.1.221
Install:
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
sudo make install
macOS
Configure and build:
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
Run an example with shared library output:
DYLD_LIBRARY_PATH=./build/lib ./build/bin/0002-get_property 192.168.1.221
Windows
Configure with Visual Studio 2015:
mkdir build
cd build
cmake .. -G "Visual Studio 14 2015" -A x64
cmake --build . --config Release
Configure with Visual Studio 2017:
mkdir build
cd build
cmake .. -G "Visual Studio 15 2017" -A x64
cmake --build . --config Release
Configure with Visual Studio 2019:
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64
cmake --build . --config Release
If you use Visual Studio 2022:
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release
Run an example:
.\build\bin\Release\0002-get_property.exe 192.168.1.221
Build the optional C# wrapper:
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64 -DXARM_BUILD_CSHARP_WRAPPER=ON
cmake --build . --config Release
Build With Makefile
The repository still keeps the original Makefile for Linux-style builds.
Build library:
make xarm
Build all examples:
make test
Build one example:
make test-0002-get_property
Build everything:
make clean
make
Run an example with shared library output:
LD_LIBRARY_PATH=./build/lib ./build/bin/0002-get_property 192.168.1.221
Install:
sudo make install
Uninstall:
sudo make uninstall
Example
-
0001-event_register
-
0002-get_property
-
0003-api_get
-
0004-servo_attach_detach
-
1001-move_line
-
1004-move_arc_line
-
1006-move_tool_line
-
1007-counter
-
1008-move_line_aa
-
1009-cartesian_velocity_control
-
2000-joint_velocity_control
-
2001-move_joint
-
3001-move_circle
-
3002-record_trajectory
-
3003-playback_trajectory
-
3004-get_report_data
-
3005-task_feedback
-
3006-standard_modbus_tcp
-
5000-set_tgpio_modbus
-
5001-get_tgpio_digital
-
5002-get_tgpio_analog
-
5003-set_tgpio_digital
-
5004-set_gripper
-
5005-get_cgpio_digital_analog
-
5006-set_cgpio_digital_analog
-
5008-get_cgpio_state
-
5009-set_bio_gripper
-
6001-set_reduced_mode
-
6002-set_fence_mode
-
7001-servo_j
-
7002-servo_cartesian
-
7003-servo_cartesian_aa
-
8000-load_identify_current
-
8001-force_tech
-
8002-admittance_control
-
8003-force_control
-
8004-load_identify
-
8005-read_force_data
-
8006-save_force_zero
-
8010-get_ft_sensor_config
-
thirdparty-set_robotiq_gripper
-
thirdparty-set_yinshi_gripper