Skip to content

Repository files navigation

A5 python SDK-V2

English | 中文

00 Hardware Connection

Single-Arm Device

Single-arm device

Desktop Device

Secure both sides of the platform with G-clamps.

Desktop device fixed with G-clamps

Single-Arm Overview

Each robotic arm base has two ports: power and signal.

XT30 is the 24V power input.

The Type-C port is the CAN signal interface.

Arm base ports

Each arm base contains a CAN signal board, identified by its CAN device ID.

Recommended device ID assignment is shown below; refer to the single-arm manual when configuring.

Left arm CAN1
Right arm CAN3
Head arm CAN0

Desktop Ports

Desktop ports

00 Environment Setup

sudo apt update
./01_global_nopasswd_sudo.sh.x
./setup.sh      

A CAN Devices

Configure CAN Devices

If the device has not been changed, configuration is only needed once.

When setting up multiple devices, configure them one at a time. After one device is configured, you can plug in the next one and configure it directly, without unplugging and re-plugging.

Plugging them in one at a time is how you tell which arm is which. Recommended: left arm can1, right arm can3.

Double-click /ARX_CAN_doctor to launch it.

ARX_CAN_doctor interface

Recommended: left arm can1, right arm can3.

Select CAN channel

After clicking Configure, wait for the log to report a successful configuration.

Successful configuration log

Repeat the same steps for the other CAN devices.

Start CAN Devices

Method A

In the doctor, click the Configure button next to each CAN device you need; this configures and starts the device. The setting remains effective as long as the CAN device stays connected to the computer.

Start CAN devices in doctor

Method B

Go to the /start_CAN directory and start the corresponding channel:

./arx_can1

//For dual arms, also start
./arx_can3

B Run

Single arm:
python3 single_arm_demo.py

Dual arm:
python3 A5_dual_arm_demo.py

SDK

0> Gripper Control

set_gripper_pos()

1> Pose Control

set_ee_pose_xyzrpy(xyzrpy, duration=0) //duration is the time to reach the target in seconds; 0 means reach it at maximum speed

2> Joint Position Control (with low-level gravity compensation)

set_joint_positions(positions=positions, duration=0) //duration is the time to reach the target in seconds; 0 means reach it at maximum speed

3> State Feedback

Joint feedback (position, velocity, torque) + pose feedback

3.1 Joint Position Feedback

get_joint_positions()

3.2 Joint Velocity Feedback

get_joint_velocities()

3.3 Joint Torque Feedback

get_joint_currents()

3.4 End-Effector Pose Feedback

get_ee_pose_xyzrpy() — Euler angle form

4> Gravity Compensation

gravity_compensation()

The default value accounts for the gripper only. If you mount a camera or other equipment on the end effector and it drops or lifts, change the end-effector mass as described in <5>.

If it lifts, decrease the value.

If it drops, increase the value.

5> Change End-Effector Mass

Go to bimanual/models/

Change link6 mass

Remember to save

Change link6 mass

If it lifts, decrease the value.

If it drops, increase the value.

Joint Range

Unit: deg J1
J2 J3 J4 J5 J6 2025-gripper
rad
min -150 0 -180 -90 -90 -120 -3.4
max 180 210 0 90 90 120 0.1

Joint Coordinates and Zero Position

Joint rotation follows the right-hand rule: point your thumb along the joint axis, and your four fingers curl in the positive direction of motor rotation.

The position shown below is the zero position of every joint.

Joint coordinates and zero position

End-Effector Pose Frame

End-effector pose frame

Calibration Commands

Example for motor 01 on can0:

cansend can0 7FF#00010003
joint 1 2 3 4 5 6 gripper
Motor ID 1 2 4 5 6 7 8

The gripper requires a separate calibration command. Example for can1:

cansend can1 008#FFFFFFFFFFFFFFFE

About

A5_beta

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages