Synria Communication Protocol v1.0.6
Reading Guide
- All numerical values in this document are uniformly represented in decimal or hexadecimal. Data starting with 0x is hexadecimal; unmarked data is decimal.
- Multi-byte data uses little-endian order (low byte first, high byte last). The example frames already include the check byte and can be used directly for serial debugging.
Alicia-M Button Functions:
- Single click: Switch motor mode, mit mode ↔ pv mode (saved through power-off)
- Double click: The button light flashes rapidly and plays back the recorded motion (press any key during this time to stop playback)
- Long press: Within 1~2s, switch the gravity compensation mode (only valid in mit mode)
- Extra-long press: More than 2s, the button light flashes slowly and records the motion during the button-light flashing period (press any key during this time to stop recording)
Serial Communication Parameters:
- Frame rate with gravity compensation: 830 Hz
- Frame rate without gravity compensation: 1000 Hz
- Limit frame rate: 1630 Hz (applicable to C/C++)
Last modified: May 21, 2026
Note: The final right of interpretation of this communication protocol document and its related functions belongs to Synria Technology Co., Ltd.
I. Basic Structure of the Synria Communication Protocol
The Synria communication protocol consists of a frame header, command, function code, data length, data, check, and frame tail. The default serial baud rate for users is 1000000.
| Field | Length | Description | Fixed Value or Example |
|---|---|---|---|
| Frame header | 1 byte | Data frame start marker | 0xAA |
| Command | 1 byte | The major category of function to be executed by this frame | 0x01, 0x06 |
| Function code | 1 byte | Read/write direction, robotic arm selection, or sub-function | 0x02, 0x82 |
| Data length | 1 byte | The number of bytes in the subsequent "data" field | 0x00, 0x10 |
| Data | Variable | Joint, gripper, parameter, or status data | Per each command description |
| Check | 1 byte | The lower 8 bits of the CRC32 check result | Given in the examples |
| Frame tail | 1 byte | Data frame end marker | 0xFF |
The check calculation range is: command + function code + data length + data. The frame header and frame tail are not included in the calculation.
For example, querying device information:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x7E | 0x00 | Empty | 0x5D | 0xFF |
Complete frame:
AA 01 7E 00 5D FF
Here, 0x5D is the check byte calculated for 01 7E 00.
II. Common Conventions
1. Robotic Arm Selection
Most commands use the lower two bits of the function code to select the robotic arm:
| Function Code Bit | Meaning |
|---|---|
| Bit 0 | Teaching arm |
| Bit 1 | Follower arm |
Common values:
| Function Code | Meaning |
|---|---|
| 0x01 | Select the teaching arm |
| 0x02 | Select the follower arm |
| 0x03 | Select both the teaching arm and the follower arm |
| 0x81 | Write to the teaching arm |
| 0x82 | Write to the follower arm |
It is recommended to interface in a "single frame operates only one robotic arm" manner, especially for joint data read/write and motor parameter setting.
2. Joint Numbering
| Use Case | Numbering Method |
|---|---|
| Zeroing, mechanical lock | Numbered starting from 0 |
| Motor parameter setting | Numbered starting from 1 |
| Joint data read/write | No start-joint field; defaults to starting from joint 0 |
The Alicia-M single arm normally has 7 physical joints. For public interfacing, the 7th joint is the gripper-related joint; when writing the control mode with 0x11, it is skipped, while other already-opened motor parameters such as acceleration, deceleration, velocity loop, and position loop are still processed according to the requested range.
3. Feedback Function Code
Most feedback frames set the highest bit of the request function code to 1. For example:
| Request Function Code | Feedback Function Code |
|---|---|
| 0x02 | 0x82 |
| 0x03 | 0x83 |
| 0x7E | 0xFE |
If the request function code itself is already greater than or equal to 0x80, the feedback function code usually remains the same.
III. Command ID Overview
| Command | Function | Public Description |
|---|---|---|
| 0x01 | Device information read | Open |
| 0x02 | User personalization settings | Open |
| 0x03 | Protocol-layer zeroing | Open |
| 0x05 | Mechanical lock and stiffness switching | Open |
| 0x06 | Joint data read/write | Open |
| 0x09 | Enable and disable | Open |
| 0x11 | Motor parameter setting | Open for control mode, acceleration, deceleration, velocity loop, and position loop parameters |
| 0x15 | Clear motor errors | Open |
| 0x16 | Control lock | Open |
| 0x17 | Gripper gripping parameters | Open |
| 0xFB | Serial frame rate statistics | Open, used for debugging |
| 0xEE | Error feedback | Returned by the lower-level controller |
IV. Command Functions
1. Command ID 0x01: Query Device Information
Command 0x01 is used to read the Alicia-M's product model, serial number, hardware version, and firmware version.
| Field | Value |
|---|---|
| Command | 0x01 |
| Request function code | 0x7E |
| Request data length | 0x00 |
| Feedback function code | 0xFE |
| Feedback data length | 0x18 |
Example: Query Device Information
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x7E | 0x00 | Empty | 0x5D | 0xFF |
Complete frame:
AA 01 7E 00 5D FF
Example: Device Information Feedback
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0xFE | 0x18 | 0x41 0x4D 0x58 0x53 0x32 0x35 0x30 0x31 0x30 0x31 0x30 0x31 0x41 0x30 0x30 0x31 0x64 0x00 0x00 0x00 0x6E 0x00 0x00 0x00 | 0x05 | 0xFF |
Complete frame:
AA 01 FE 18 41 4D 58 53 32 35 30 31 30 31 30 31 41 30 30 31 64 00 00 00 6E 00 00 00 05 FF
The feedback data is 24 bytes in total:
| Offset | Length | Meaning | Example |
|---|---|---|---|
| 0 | 4 bytes | Product model | 41 4D 58 53 |
| 4 | 12 bytes | Serial number | 32 35 30 31 30 31 30 31 41 30 30 31 |
| 16 | 4 bytes | Hardware version | 64 00 00 00 |
| 20 | 4 bytes | Firmware version | 6E 00 00 00 |
In the example above, the raw hardware version value is 100, which can be displayed as 1.0.0; the raw firmware version value is 110, which can be displayed as 1.1.0.
2. Command ID 0x02: User Personalization Settings
Command 0x02 is used to read or write user configuration. After writing, it is saved through power-off.
Function code description:
| Function Code Bit | Meaning |
|---|---|
Highest bit is 0 | Read |
Highest bit is 1 | Write |
| Bit 0 | Power-on action configuration |
| Bit 1 | Gripper type configuration |
| Bit 2 | Periodic upload switch |
Each configuration item occupies 4 bytes, all little-endian.
| Configuration Item | Function Code Bit | Data Length | Value Range or Valid Rule | Description |
|---|---|---|---|---|
| Power-on action configuration | Bit 0 | 4 bytes | Reserved field; recommended to keep the default value | Reserved configuration |
| Gripper type configuration | Bit 1 | 4 bytes | Currently judged by bit1: bit1=0 is the small gripper configuration, bit1=1 is the large gripper configuration; recommended to write 0 or 2 | Configuration flag value, not a directly written model number |
| Periodic upload switch | Bit 2 | 4 bytes | 0 off, 1 on; other values reserved | When enabled, actively uploads follower-arm position data about every 5ms |
The gripper type configuration is not a directly written model number; it is currently parsed by bit1:
| Configuration Value | Byte Order | Meaning |
|---|---|---|
0 | 00 00 00 00 | bit1=0, select the small gripper configuration |
2 | 02 00 00 00 | bit1=1, select the large gripper configuration |
After periodic upload is enabled, the lower-level controller will actively upload follower-arm position data about every 5ms. This active upload frame uses command 0x06 with function code 0x04.
Example 1: Read All User Configuration
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x07 | 0x00 | Empty | 0xBB | 0xFF |
Complete frame:
AA 02 07 00 BB FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 07 | Read the three configuration items corresponding to bits 0, 1, and 2 |
| Data length | 00 | A read request requires no data |
| Check | BB | This frame's check |
Example feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x07 | 0x0C | 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00 | 0x55 | 0xFF |
Complete frame:
AA 02 07 0C 00 00 00 00 02 00 00 00 01 00 00 00 55 FF
Feedback parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 07 | Returns the three configuration items corresponding to bits 0, 1, and 2 |
| Data length | 0C | The data area is 12 bytes, with each configuration item being 4 bytes |
| Data 1 | 00 00 00 00 | The power-on action configuration value is 0 |
| Data 2 | 02 00 00 00 | The gripper type configuration value is 2, bit1=1, indicating a large gripper |
| Data 3 | 01 00 00 00 | Periodic upload is enabled |
Example 2: Modify Gripper Type Configuration
This example writes the gripper type configuration as 2, indicating selection of the large gripper configuration. In the current firmware, bit 1 of this value is used to select the gripper type.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x82 | 0x04 | 0x02 0x00 0x00 0x00 | 0xCF | 0xFF |
Complete frame:
AA 02 82 04 02 00 00 00 CF FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 82 | Write the gripper type configuration corresponding to bit 1 |
| Data length | 04 | Write 1 configuration item, 4 bytes total |
| Data | 02 00 00 00 | The target configuration value is 2, bit1=1, select the large gripper configuration |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x82 | 0x01 | 0x81 | 0x8E | 0xFF |
Complete frame:
AA 02 82 01 81 8E FF
Feedback parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 82 | Corresponds to this write request |
| Data length | 01 | Feedback of 1 status byte |
| Data | 81 | The write request has been received |
Example 3: Enable Periodic Upload
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x84 | 0x04 | 0x01 0x00 0x00 0x00 | 0x3C | 0xFF |
Complete frame:
AA 02 84 04 01 00 00 00 3C FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 84 | Write the periodic upload switch corresponding to bit 2 |
| Data length | 04 | Write 1 configuration item, 4 bytes total |
| Data | 01 00 00 00 | Enable periodic upload |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x84 | 0x01 | 0x81 | 0x3C | 0xFF |
Complete frame:
AA 02 84 01 81 3C FF
Feedback parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 84 | Corresponds to this write request |
| Data length | 01 | Feedback of 1 status byte |
| Data | 81 | The write request has been received |
Example 4: Write Power-On Action Configuration
This example writes the power-on action configuration as 0. This item currently serves as a reserved configuration, and the tool side can use it to confirm whether the write link is normal.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x81 | 0x04 | 0x00 0x00 0x00 0x00 | 0xEA | 0xFF |
Complete frame:
AA 02 81 04 00 00 00 00 EA FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 02 | User personalization settings |
| Function code | 81 | Write the power-on action configuration corresponding to bit 0 |
| Data length | 04 | Write 1 configuration item, 4 bytes total |
| Data | 00 00 00 00 | The target configuration value is 0 |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x81 | 0x01 | 0x81 | 0xD7 | 0xFF |
Complete frame:
AA 02 81 01 81 D7 FF
When the feedback data is 0x81, it indicates that the setting has been received.
3. Command ID 0x03: Protocol-Layer Zeroing
Command 0x03 is used to set the current joint position as the new protocol zero point. It has two methods:
| Zeroing Method | Data Value | Description |
|---|---|---|
| Soft zeroing | 0x00 | Only changes the protocol display and protocol control zero point, without changing the motor's underlying zero point |
| Hard zeroing | 0x01 | Clears the protocol offset and performs an underlying hard zeroing |
The request data is arranged in the order of the selected robotic arms. Each robotic arm occupies 2 bytes:
| Byte | Meaning |
|---|---|
| 1st byte | Start joint number, starting from 0 |
| 2nd byte | Number of consecutive joints |
If 1 more byte is appended at the end, that byte is the zeroing method. When the zeroing method is not included, hard zeroing is processed by default.
Example 1: Soft Zeroing of the 7 Follower-Arm Joints
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x02 | 0x03 | 0x00 0x07 0x00 | 0x44 | 0xFF |
Complete frame:
AA 03 02 03 00 07 00 44 FF
Field explanation:
| Field | Value |
|---|---|
| Function code | 0x02, follower arm |
| Start joint | 0x00 |
| Consecutive count | 0x07 |
| Zeroing method | 0x00, soft zeroing |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x82 | 0x01 | 0x01 | 0xCB | 0xFF |
Complete frame:
AA 03 82 01 01 CB FF
Feedback parsing: 0x82 indicates the follower-arm zeroing feedback, and data 0x01 indicates successful reception.
Example 2: Hard Zeroing of the 7 Joints of Both Arms
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x03 | 0x05 | 0x00 0x07 0x00 0x07 0x01 | 0x4C | 0xFF |
Complete frame:
AA 03 03 05 00 07 00 07 01 4C FF
Field explanation:
| Field | Value |
|---|---|
| Function code | 0x03, select both the teaching arm and the follower arm |
| Teaching arm start joint | 0x00 |
| Teaching arm consecutive count | 0x07 |
| Follower arm start joint | 0x00 |
| Follower arm consecutive count | 0x07 |
| Zeroing method | 0x01, hard zeroing |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x83 | 0x01 | 0x01 | 0xFC | 0xFF |
Complete frame:
AA 03 83 01 01 FC FF
Feedback parsing: 0x83 indicates the dual-arm zeroing feedback, and data 0x01 indicates successful reception.
4. Command ID 0x05: Mechanical Lock and Stiffness Switching
Command 0x05 is used to make the specified joints enter high-stiffness holding while the remaining joints enter low-stiffness holding. It is not a power-off lock, but rather changes the joint holding strength.
The request data format is the same as zeroing: each selected robotic arm occupies 2 bytes.
| Byte | Meaning |
|---|---|
| 1st byte | Start joint number, starting from 0 |
| 2nd byte | Number of consecutive joints |
Example: The 7 Follower-Arm Joints Enter High-Stiffness Holding
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x05 | 0x02 | 0x02 | 0x00 0x07 | 0x2B | 0xFF |
Complete frame:
AA 05 02 02 00 07 2B FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 05 | Mechanical lock and stiffness switching |
| Function code | 02 | Select the follower arm |
| Data length | 02 | The follower arm occupies a 2-byte interval description |
| Data | 00 07 | Starting from joint 0, 7 consecutive joints enter high-stiffness holding |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x05 | 0x82 | 0x01 | 0x01 | 0x17 | 0xFF |
Complete frame:
AA 05 82 01 01 17 FF
Feedback parsing: 0x82 indicates the follower-arm feedback, and data 0x01 indicates successful reception.
5. Command ID 0x06: Joint Data Read/Write
Command 0x06 is the most commonly used control command of the Alicia-M, used to read joint status and also to write control data such as target position, velocity, and torque.
5.1 Joint Data Address Table
Each address fixedly occupies 2 bytes in the data frame.
| Address | Name | Readable | Writable | Effective Bit Width | Unit | Description |
|---|---|---|---|---|---|---|
| 0x00 | pos | Yes | Yes | 16-bit | rad | Joint position affected by zeroing |
| 0x01 | vel | Yes | Yes | 12-bit | rad/s | Velocity target or feedback |
| 0x02 | tor | Yes | Yes | 12-bit | N·m | Torque target or feedback |
| 0x03 | kp | Yes | Yes | 16-bit | dimensionless | Position stiffness coefficient, non-negative |
| 0x04 | kd | Yes | Yes | 16-bit | dimensionless | Velocity damping coefficient, non-negative |
| 0x05 | Linear interpolation velocity | Yes | Yes | 12-bit | rad/s | Used for smooth motion to the position target |
| 0x06 | Coil temperature | Yes | No | 16-bit | °C | Read-only |
12-bit data is placed in a 2-byte slot. When writing the 3 types of 12-bit fields (velocity, torque, linear interpolation velocity), if the 2-byte raw value is 0xFFFF (written as FF FF in a little-endian frame), the lower-level controller treats it as the underlying precise zero value 0. This special value is only used for writing 12-bit fields and does not apply to the position, stiffness, damping, or temperature fields.
5.2 Read Joint Data
The data area of a read request is fixed at 2 bytes:
| Byte | Meaning |
|---|---|
| 1st byte | Start address |
| 2nd byte | Number of consecutive addresses |
The data area format of read feedback:
| Field | Length | Description |
|---|---|---|
| Reply start address | 1 byte | The highest bit of the request start address is set to 1 |
| Address count | 1 byte | Consistent with the request |
| Joint data | 2 × address count × 7 bytes | Expanded in joint order |
| Operating status | 1 byte | Button, error, or peripheral status |
Example: Read the Protocol Position of the 7 Follower-Arm Joints
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x02 | 0x00 0x01 | 0xCE | 0xFF |
Complete frame:
AA 06 02 02 00 01 CE FF
Example feedback: All 7 joints are near the protocol zero point, and the operating status is 0.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x11 | 0x80 0x01 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0x00 | 0x4D | 0xFF |
Complete frame:
AA 06 02 11 80 01 FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F 00 4D FF
In the feedback data, FF 7F is a 16-bit position value, which can be understood as "an intermediate value close to the zero point".
5.3 Write Joint Data
The data area format of a write request:
| Field | Length | Description |
|---|---|---|
| Start address | 1 byte | The first address to write |
| Address count | 1 byte | How many consecutive addresses to write |
| Joint data | Variable | By default, written sequentially starting from joint 0 |
The data area of write feedback is fixed at 3 bytes:
| Field | Length | Description |
|---|---|---|
| Reply start address | 1 byte | The highest bit of the request start address is set to 1 |
| Address count | 1 byte | Consistent with the request |
| Reception status | 1 byte | 0x01 indicates successful reception |
Example 1: The 7 Follower-Arm Joints Target Position Is Zero, Velocity Is Zero
This example writes both address 0x00 and 0x01 simultaneously. Each joint is 4 bytes: position FF 7F, velocity FF FF.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x1E | 0x00 0x02 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF | 0x35 | 0xFF |
Complete frame:
AA 06 82 1E 00 02 FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF 35 FF
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x03 | 0x80 0x02 0x01 | 0x36 | 0xFF |
Complete frame:
AA 06 82 03 80 02 01 36 FF
Example 2: Zero the Linear Interpolation Velocity of the 7 Follower-Arm Joints
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x10 | 0x05 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF | 0xEF | 0xFF |
Complete frame:
AA 06 82 10 05 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF EF FF
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x03 | 0x85 0x01 0x01 | 0x1E | 0xFF |
Complete frame:
AA 06 82 03 85 01 01 1E FF
6. Command ID 0x09: Enable and Disable
Command 0x09 is used to enable or disable the specified robotic arm.
| Data Value | Meaning |
|---|---|
| 0x00 | Disable |
| Non-0x00 | Enable |
Example 1: Enable the Follower Arm
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
Complete frame:
AA 09 82 01 01 AF FF
Send parsing: 0x09 is the enable/disable command, function code 0x82 indicates writing to the follower arm, and data 0x01 indicates enable.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
Complete frame:
AA 09 82 01 01 AF FF
Feedback parsing: The function code remains 0x82, and data 0x01 indicates that the lower-level controller has received this enable request.
Example 2: Disable the Follower Arm
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x00 | 0x39 | 0xFF |
Complete frame:
AA 09 82 01 00 39 FF
Send parsing: The function code 0x82 still indicates writing to the follower arm, and data 0x00 indicates disable.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
Complete frame:
AA 09 82 01 01 AF FF
Feedback parsing: Data 0x01 indicates that the lower-level controller has received this disable request; it does not mean "still enabled".
7. Command ID 0x11: Motor Parameter Setting
Command 0x11 is used to modify motor control parameters. The public edition opens the control mode, acceleration, deceleration, velocity loop, and position loop parameters. When writing the control mode, the 7th physical joint is skipped; when writing the acceleration, deceleration, velocity loop, and position loop parameters, it is not automatically skipped just because the 7th physical joint is the gripper.
| Parameter | Parameter Address | Parameter Value Type | Unit or Attribute | Parameter Description |
|---|---|---|---|---|
| Acceleration | 0x05 | 32-bit float | rad/s² | The larger the value, the faster the startup and acceleration |
| Deceleration | 0x06 | 32-bit float | rad/s² | The larger the value, the faster the deceleration and stop |
| Velocity loop Kp | 0x1A | 32-bit float | Drive parameter | If velocity following is slow, increase slightly; if velocity jitters, decrease |
| Velocity loop Ki | 0x1B | 32-bit float | Drive parameter | If the target velocity is not reached for a long time, increase slightly; if it easily overshoots, decrease |
| Position loop Kp | 0x1C | 32-bit float | Drive parameter | If position following is slow, increase slightly; if it jitters after arrival, decrease |
| Position loop Ki | 0x1D | 32-bit float | Drive parameter | If there is a position error for a long time, increase slightly; if there is obvious swing-back or trailing, decrease |
| Control mode | 0x0B | 32-bit unsigned integer | Enum value | Determines which mode the motor accepts control in |
Control mode values:
| Mode Value | Meaning |
|---|---|
1 | Torque-hybrid control mode |
2 | Position-velocity mode |
3 | Velocity mode |
4 | Position-velocity-current hybrid mode |
Write data format:
| Field | Length | Description |
|---|---|---|
| Start motor number | 1 byte | Starting from 1 |
| Motor count | 1 byte | Consecutive count |
| Parameter address | 1 byte | See the parameter address table above |
| Parameter value | 4 bytes | Low byte first |
| Save flag | 1 byte | 0 not saved, non-0 writes and saves |
Read data format:
| Field | Length | Description |
|---|---|---|
| Start motor number | 1 byte | Starting from 1 |
| Motor count | 1 byte | Consecutive count |
| Parameter address | 1 byte | The public edition opens reading of control mode 0x0B |
When debugging, you can first use save flag 0, and after confirming that the action effect is normal, then decide whether to write and save.
Example 1: Switch Follower-Arm Motors 1 to 6 to Position-Velocity Mode, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x0B 0x02 0x00 0x00 0x00 0x00 | 0xC4 | 0xFF |
Complete frame:
AA 11 82 08 01 06 0B 02 00 00 00 00 C4 FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 11 | Motor parameter setting |
| Function code | 82 | Write to the follower arm |
| Data length | 08 | Start motor, count, parameter address, parameter value, save flag, 8 bytes total |
| Start motor | 01 | Starting from motor 1 |
| Motor count | 06 | 6 consecutive motors |
| Parameter address | 0B | Control mode |
| Parameter value | 02 00 00 00 | Position-velocity mode |
| Save flag | 00 | Not saved through power-off |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x8B 0x01 | 0xD6 | 0xFF |
Complete frame:
AA 11 82 04 01 06 8B 01 D6 FF
Feedback parsing: 01 06 returns this motor range as-is, 8B indicates the feedback for the control mode address, and the trailing data 01 indicates successful reception.
Example 2: Change the Acceleration of Follower-Arm Motors 1 to 6 to 20, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x05 0x00 0x00 0xA0 0x41 0x00 | 0xF0 | 0xFF |
Complete frame:
AA 11 82 08 01 06 05 00 00 A0 41 00 F0 FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 11 | Motor parameter setting |
| Function code | 82 | Write to the follower arm |
| Data length | 08 | Start motor, count, parameter address, parameter value, save flag, 8 bytes total |
| Start motor | 01 | Starting from motor 1 |
| Motor count | 06 | 6 consecutive motors |
| Parameter address | 05 | Acceleration |
| Parameter value | 00 00 A0 41 | 32-bit float, representing 20 |
| Save flag | 00 | Not saved through power-off |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x85 0x01 | 0x58 | 0xFF |
Complete frame:
AA 11 82 04 01 06 85 01 58 FF
Feedback parsing: 85 indicates the feedback for the acceleration address, and the trailing data 01 indicates successful reception.
Example 3: Change the Deceleration of Follower-Arm Motors 1 to 6 to 20, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x06 0x00 0x00 0xA0 0x41 0x00 | 0x5E | 0xFF |
Complete frame:
AA 11 82 08 01 06 06 00 00 A0 41 00 5E FF
Send parsing:
| Field | Byte | Meaning |
|---|---|---|
| Command | 11 | Motor parameter setting |
| Function code | 82 | Write to the follower arm |
| Data length | 08 | Start motor, count, parameter address, parameter value, save flag, 8 bytes total |
| Start motor | 01 | Starting from motor 1 |
| Motor count | 06 | 6 consecutive motors |
| Parameter address | 06 | Deceleration |
| Parameter value | 00 00 A0 41 | 32-bit float, representing 20 |
| Save flag | 00 | Not saved through power-off |
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x86 0x01 | 0x9B | 0xFF |
Complete frame:
AA 11 82 04 01 06 86 01 9B FF
Feedback parsing: 86 indicates the feedback for the deceleration address, and the trailing data 01 indicates successful reception.
Example 4: Change the Velocity Loop Kp of Follower-Arm Motors 1 to 6 to 1.0, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1A 0x00 0x00 0x80 0x3F 0x00 | 0x26 | 0xFF |
Complete frame:
AA 11 82 08 01 06 1A 00 00 80 3F 00 26 FF
Send parsing: Parameter address 0x1A indicates the velocity loop Kp, and parameter value 00 00 80 3F indicates the 32-bit float 1.0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9A 0x01 | 0xC6 | 0xFF |
Complete frame:
AA 11 82 04 01 06 9A 01 C6 FF
Feedback parsing: 0x9A indicates the feedback for the velocity loop Kp address, and the trailing data 0x01 indicates successful reception.
Example 5: Change the Velocity Loop Ki of Follower-Arm Motors 1 to 6 to 1.0, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1B 0x00 0x00 0x80 0x3F 0x00 | 0x83 | 0xFF |
Complete frame:
AA 11 82 08 01 06 1B 00 00 80 3F 00 83 FF
Send parsing: Parameter address 0x1B indicates the velocity loop Ki, and parameter value 00 00 80 3F indicates the 32-bit float 1.0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9B 0x01 | 0x87 | 0xFF |
Complete frame:
AA 11 82 04 01 06 9B 01 87 FF
Feedback parsing: 0x9B indicates the feedback for the velocity loop Ki address, and the trailing data 0x01 indicates successful reception.
Example 6: Change the Position Loop Kp of Follower-Arm Motors 1 to 6 to 1.0, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1C 0x00 0x00 0x80 0x3F 0x00 | 0x3B | 0xFF |
Complete frame:
AA 11 82 08 01 06 1C 00 00 80 3F 00 3B FF
Send parsing: Parameter address 0x1C indicates the position loop Kp, and parameter value 00 00 80 3F indicates the 32-bit float 1.0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9C 0x01 | 0x40 | 0xFF |
Complete frame:
AA 11 82 04 01 06 9C 01 40 FF
Feedback parsing: 0x9C indicates the feedback for the position loop Kp address, and the trailing data 0x01 indicates successful reception.
Example 7: Change the Position Loop Ki of Follower-Arm Motors 1 to 6 to 1.0, Without Saving Through Power-Off
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1D 0x00 0x00 0x80 0x3F 0x00 | 0x9E | 0xFF |
Complete frame:
AA 11 82 08 01 06 1D 00 00 80 3F 00 9E FF
Send parsing: Parameter address 0x1D indicates the position loop Ki, and parameter value 00 00 80 3F indicates the 32-bit float 1.0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9D 0x01 | 0x01 | 0xFF |
Complete frame:
AA 11 82 04 01 06 9D 01 01 FF
Feedback parsing: 0x9D indicates the feedback for the position loop Ki address, and the trailing data 0x01 indicates successful reception.
Example 8: Read the Control Mode of Follower-Arm Motors 1 to 2
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x02 | 0x03 | 0x01 0x02 0x0B | 0x2E | 0xFF |
Complete frame:
AA 11 02 03 01 02 0B 2E FF
Send parsing: Function code 0x02 indicates reading the follower arm; data 01 02 0B indicates reading the control mode of 2 motors starting from motor 1.
Example feedback: Both motors are in position-velocity mode.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x02 | 0x0B | 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x02 0x00 0x00 0x00 | 0x6E | 0xFF |
Complete frame:
AA 11 02 0B 00 00 00 02 00 00 00 02 00 00 00 6E FF
In the feedback data, the first 3 bytes can be treated as reserved bytes, and each subsequent 4 bytes represents the mode value of one motor.
8. Command ID 0x15: Clear Motor Errors
Command 0x15 is used to clear the motor errors of the specified robotic arm. The data area must be 0xFE.
Example: Clear Follower-Arm Errors
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x15 | 0x02 | 0x01 | 0xFE | 0x85 | 0xFF |
Complete frame:
AA 15 02 01 FE 85 FF
Send parsing: Function code 0x02 indicates the follower arm, and data 0xFE is the fixed byte for this command.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x15 | 0x82 | 0x01 | 0x01 | 0x88 | 0xFF |
Complete frame:
AA 15 82 01 01 88 FF
Feedback parsing: 0x82 indicates the follower-arm error-clearing feedback, and data 0x01 indicates successful reception.
9. Command ID 0x16: Control Lock
Command 0x16 is used to lock all joints to their current positions, or to unlock them.
| Function Code | Meaning |
|---|---|
| 0x80 | Lock |
| 0x00 | Unlock |
After locking, the lower-level controller will reject control-type commands that would cause motor motion until an unlock command is received.
Example 1: Enter Control Lock
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x80 | 0x00 | Empty | 0x9B | 0xFF |
Complete frame:
AA 16 80 00 9B FF
Send parsing: Function code 0x80 indicates entering control lock, and the data length is 0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x80 | 0x01 | 0x01 | 0x08 | 0xFF |
Complete frame:
AA 16 80 01 01 08 FF
Feedback parsing: The function code remains 0x80, and data 0x01 indicates that the lock request has been received.
Example 2: Exit Control Lock
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x00 | 0x00 | Empty | 0xD0 | 0xFF |
Complete frame:
AA 16 00 00 D0 FF
Send parsing: Function code 0x00 indicates exiting control lock, and the data length is 0.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x00 | 0x01 | 0x01 | 0x88 | 0xFF |
Complete frame:
AA 16 00 01 01 88 FF
Feedback parsing: The function code remains 0x00, and data 0x01 indicates that the unlock request has been received.
10. Command ID 0x17: Gripper Gripping Parameters
Command 0x17 is used to read or set the gripper torque and force-control related parameters. It can only select one robotic arm at a time. This command only modifies the internal parameters of the gripper controller. It does not write to the J7 ESC register, nor does it change the J7 control mode. After a successful write, the parameters are updated into the gripper controller's running configuration and take effect in subsequent gripper control cycles. If you need to save through power-off, you can append 1 save flag byte at the end of the write data area; when the save flag is non-zero, the device saves the current complete gripper parameter configuration.
Function code description:
| Function Code | Meaning |
|---|---|
| 0x01 | Read the teaching arm |
| 0x02 | Read the follower arm |
| 0x81 | Write to the teaching arm |
| 0x82 | Write to the follower arm |
| Mask Bit | Value | Parameter Meaning | Unit or Description | Range | Adjustment Direction |
|---|---|---|---|---|---|
| Bit 0 | 0x01 | Target gripping force | N, estimated force at the gripper end | Small gripper:[1, 80] NLarge gripper: [1, 120] N | Increasing raises the target gripping force, decreasing lowers the gripping strength |
| Bit 1 | 0x02 | Opening feedforward torque | N·m, feedforward torque on the motor side | Small gripper:[0.2, 3.0] N·mLarge gripper: [0.2, 5.0] N·m | Increasing raises the opening assist torque, decreasing lowers the opening impact |
| Bit 2 | 0x04 | Closing feedforward torque | N·m, feedforward torque on the motor side | Small gripper:[-5.0, -0.2] N·mLarge gripper: [-8.0, -0.2] N·m | The closing direction is negative; increasing the absolute value raises the closing assist torque, adjusting toward 0 lowers the closing impact |
| Bit 3 | 0x08 | Maximum holding torque | N·m, torque upper limit on the motor side | Small gripper:[0.5, 5.0] N·mLarge gripper: [0.5, 10.0] N·m | Increasing raises the torque upper limit during the holding phase, decreasing lowers the continuous gripping torque |
| Bit 4 | 0x10 | Force-control proportion | dimensionless | [0, 2.0] | Increasing raises the force-control response, decreasing lowers the force-control oscillation tendency |
| Bit 5 | 0x20 | Force-control integral | 1/s | [0, 2.0] 1/s | Increasing raises the long-term compensation capability, decreasing lowers the integral trailing |
| Bit 6 | 0x40 | Integral limiting | N·s | [0, 100] N·s | Increasing raises the integral compensation upper limit, decreasing limits the long-term integral accumulation |
| Bit 7 | 0x80 | Torque scaling when approaching closure | ratio | [0, 1] | Increasing raises the closing assist torque when approaching the target, decreasing makes the end closure more gentle |
When reading, an empty data area means reading all parameters; a single non-zero mask in the data area means reading only the parameters selected by the mask.
When writing, the 1st byte of the data area is the mask, followed by 32-bit floats placed in order of the mask bits from low to high. If you need to save through power-off, you can append 1 save flag byte after all the floats:
Data area length = 1 + number of parameters * 4 // Takes effect immediately
Data area length = 1 + number of parameters * 4 + 1 // Takes effect immediately and saves through power-off depending on the save flag
When the save flag is 0x00, it only takes effect immediately; when the save flag is non-zero, the device saves the complete gripper parameter configuration after writing.
Example 1: Read All Gripper Parameters of the Follower Arm
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x02 | 0x00 | Empty | 0x65 | 0xFF |
Complete frame:
AA 17 02 00 65 FF
Example feedback (the following data uses the small gripper default parameters as an example):
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x22 | 0x01 0xFF 0x00 0x00 0x0C 0x42 0x00 0x00 0xA0 0x3F 0x00 0x00 0x20 0xC0 0x00 0x00 0x20 0x40 0x9A 0x99 0x19 0x3F 0xCD 0xCC 0xCC 0x3E 0x00 0x00 0xA0 0x41 0x33 0x33 0xB3 0x3E | 0x8C | 0xFF |
Complete frame:
AA 17 82 22 01 FF 00 00 0C 42 00 00 A0 3F 00 00 20 C0 00 00 20 40 9A 99 19 3F CD CC CC 3E 00 00 A0 41 33 33 B3 3E 8C FF
The meaning of the first 2 bytes of the feedback data:
| Byte | Meaning |
|---|---|
| 0x01 | Follower arm |
| 0xFF | Returns all 8 parameters |
Each subsequent 4 bytes is a 32-bit float, in the same order as the parameter mask table.
Example 2: Set the Follower-Arm Target Gripping Force to 35 N and the Maximum Holding Torque to 2.5 N·m
The mask is 0x09, indicating writing the two parameters at bit 0 and bit 3.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x09 | 0x09 0x00 0x00 0x0C 0x42 0x00 0x00 0x20 0x40 | 0xB3 | 0xFF |
Complete frame:
AA 17 82 09 09 00 00 0C 42 00 00 20 40 B3 FF
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x03 | 0x01 0x09 0x01 | 0x74 | 0xFF |
Complete frame:
AA 17 82 03 01 09 01 74 FF
Example 3: Set the Follower-Arm Target Gripping Force to 2 N and Save
The mask is 0x01, indicating writing only the bit-0 target gripping force. The last byte 0x01 of the data area is the save flag, indicating saving the current complete gripper parameter configuration.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x06 | 0x01 0x00 0x00 0x00 0x40 0x01 | 0xBD | 0xFF |
Complete frame:
AA 17 82 06 01 00 00 00 40 01 BD FF
Here, 00 00 00 40 is the little-endian format of the 32-bit float 2.0f, and the final 01 indicates save.
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x03 | 0x01 0x01 0x01 | 0x7C | 0xFF |
Complete frame:
AA 17 82 03 01 01 01 7C FF
11. Command ID 0xFB: Serial Frame Rate Statistics
Command 0xFB is used to debug serial communication performance.
| Function Code | Meaning |
|---|---|
| 0x00 | Start statistics |
| 0x01 | Query statistics results |
| 0x02 | Stop statistics |
The query result is 12 bytes in total, composed of 3 32-bit floats:
| Order | Meaning |
|---|---|
| 1st | Total effective frame rate |
| 2nd | 0x06 control success frame rate |
| 3rd | Variance of the time interval between adjacent frames |
Example 1: Start Statistics
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x00 | 0x00 | Empty | 0x23 | 0xFF |
Complete frame:
AA FB 00 00 23 FF
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x80 | 0x01 | 0x01 | 0xED | 0xFF |
Complete frame:
AA FB 80 01 01 ED FF
Example 2: Query Statistics Results
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x01 | 0x00 | Empty | 0x62 | 0xFF |
Complete frame:
AA FB 01 00 62 FF
Example feedback: All three statistics values are 0.
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x81 | 0x0C | 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 | 0x61 | 0xFF |
Complete frame:
AA FB 81 0C 00 00 00 00 00 00 00 00 00 00 00 00 61 FF
Example 3: Stop Statistics
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x02 | 0x00 | Empty | 0xA1 | 0xFF |
Complete frame:
AA FB 02 00 A1 FF
Feedback:
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x82 | 0x01 | 0x01 | 0x83 | 0xFF |
Complete frame:
AA FB 82 01 01 83 FF
12. Command ID 0xEE: Error Feedback
Command 0xEE is returned by the lower-level controller to indicate that a frame sent by the upper computer cannot be processed normally.
An error feedback frame consists of a frame header, 0xEE, error type, length 0x01, additional information, check, and frame tail. Below are two sets of actual feedback frames that can be directly compared.
| Error Type | Meaning | Additional Information |
|---|---|---|
| 0x00 | Frame header or frame tail error | The received frame length |
| 0x01 | Length error | The received frame length |
| 0x02 | Check error | The check byte computed by the lower-level controller |
| 0x04 | Angle out of bounds | The out-of-bounds joint number |
| 0x05 | Data length error | The current data length or count |
| 0x06 | Address error | The illegal address or out-of-bounds value |
| 0x07 | The current state does not allow this operation | The request function code |
| 0xEE | Mode switch rejected | The high 4 bits are the current mode, the low 4 bits are the target mode |
When the error type is 0xEE, the additional information is the mode flag byte:
Current mode = (additional information & 0xF0) >> 4
Target mode = additional information & 0x0F
Mode code meanings:
| Mode Code | Meaning |
|---|---|
| 0x0 | Normal state |
| 0x1 | Control protocol state |
| 0x2 | Gravity compensation state |
| 0x3 | Dual-arm synchronization state |
| 0x4 | Firmware upgrade state |
| 0x5 | Control lock state |
Common mode flag examples:
| Additional Information | Current Mode | Target Mode | Meaning |
|---|---|---|---|
| 0x31 | 0x3 Dual-arm synchronization state | 0x1 Control protocol state | Currently in dual-arm synchronization, rejecting entry into the control protocol. |
| 0x51 | 0x5 Control lock state | 0x1 Control protocol state | Currently in control lock, rejecting entry into the control protocol. |
Example 1: Check Error
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xEE | 0x02 | 0x01 | 0x12 | 0x70 | 0xFF |
Complete frame:
AA EE 02 01 12 70 FF
Indicates that the correct check byte computed by the lower-level controller is 0x12.
Example 2: A Motion Control Command Received During Control Lock
| Frame Header | Command | Function Code | Data Length | Data | Check | Frame Tail |
|---|---|---|---|---|---|---|
| 0xAA | 0xEE | 0xEE | 0x01 | 0x51 | 0x9E | 0xFF |
Complete frame:
AA EE EE 01 51 9E FF
Additional information 0x51 indicates: currently in the control lock state, and the target operation is the control protocol state.
V. Interfacing Workflow
- First complete the three basic communications: 0x01 query device information, 0x06 read follower-arm position, and 0x09 enable the follower arm.
- Before controlling the joint positions, first use 0x16 to confirm that the device is not in the locked state, then use 0x06 to write the target position and velocity.
- If you only want to stop the linear interpolation, prefer writing 0x06 address 0x05 and write each joint as
FF FF. - If you want to use active upload, enable periodic upload via 0x02, and parse the active frames according to the
0x06 / 0x04format.