- Added the teaching pendant friction coefficient parameter to the gripper/teaching pendant parameter feedback command (both feedback and sending) and adapted the protocol.
- Added
ModeCtrl
andEmergencyStop
functions to set modes and perform emergency stops (future updates will introduce dictionary-based parameter matching for all functions). - Renamed all data reading files in the demo to start with "read" for easier searching.
- Initialized
rx_message
as an emptyMessage()
in theC_STD_CAN
encapsulation class - Added
piper_param_manager
file, which includes angle and gripper range limits, applying constraints to both feedback and control messages.- If feedback or control messages exceed the set limits, the values will be clamped to the boundary values.
- To configure limit ranges, use the
SetSDKJointLimitParam
andSetSDKGripperRangeParam
functions to set software constraints. Refer to thepiper_sdk_param.py
file in the demo for examples.
- Fixed the issue where the gripper feedback timestamp was of type
int
. Now, a unified timestamp retrieval function is used.
None
None
- Fixed abnormal current feedback values.(High speed piper msg) piper_sdk/piper_msgs/msg_v1/feedback/arm_high_spd_feedback.py piper_sdk/piper_msgs/msg_v2/feedback/arm_high_spd_feedback.py piper_sdk/protocol/protocol_v1/piper_protocol_v1.py piper_sdk/protocol/protocol_v2/piper_protocol_v2.py
None
- Added
effort
feedback to high-speed information feedback, with a unit of 0.001 N/m. - Removed elements in the
sh
script to ensure compatibility withzsh
. - Added
interface_v1
without affecting previous versions, reserving it for future updates. - Added class references in
__init__.py
. - Fixed incorrect comments in
msg_v1/__init__.py
,msg_v2/__init__.py
,protocol/protocol_v2/piper_protocol_v2.py
, andarm_low_spd_feedback.py
. - Corrected the unit description of
max_joint_acc
in theArmMsgFeedbackCurrentMotorMaxAccLimit
class to0.001 rad/s^2
. - Added firmware version descriptions in the interface documentation.
- Modified
pyproject.toml
to allow proper installation usingsetup.py
(the previous version was missing theversion
field in theproject
tag, causingpip install .
to fail). - Fixed the issue where
msg_type
inmsg_v2
was not assigned usingauto
. - Fixed missing class references in
piper_sdk/__init__.py
, which caused errors. - Fixed an error in
protocol
where the position information of motor 2 was incorrectly assigned to motor 3. - Fixed an issue in
interface
where the timestamp for high-speed feedback data was mistakenly using the timestamp from low-speed feedback data.
None
- Changed the parameter names of
foc_status
inpiper_msgs/msg_v1(msg_v2)/feedback/arm_low_spd_feedback.py
in two files:- Renamed
sensor_status
tocollision_status
- Renamed
homing_status
tostall_status
- Renamed
- Added type checking (must be of Python's int type) and value range checking (within joint limit range) for the
JointCtrl
function. - Added type checking (must be of Python's int type) for the
EndPoseCtrl
function's input values - Modified the comments in the
SearchAllMotorMaxAngleSpd
andSearchAllMotorMaxAccLimit
functions to include CAN ID descriptions. - Added a demo file to set and print the robotic arm's collision level
piper_read_crash_protectation.py
. - Modified the
arm_high_spd_feedback
to set themotor_speed
unit to 0.001 rad/s and thecurrent
unit to 0.001 A. - Modified the shell script. Since the
sh
command does not support==
for equality comparison, butbash
does, changed it to use=
for equality comparison. This allows the script to be used inzsh
.
None
None
- Corrected the output unit for the gripper's printed data.
- Fixed some comments and provided clearer explanations.
- Unified the code formatting to maintain consistency.
- Added data limits for the gripper message sending: [0, 5000], corresponding to [0, 5] N/m.
- Added data limits for setting the maximum joint speed: [0, 3000], corresponding to [0, 3] rad/s.
- Added data limits for setting the maximum joint acceleration: [0, 500], corresponding to [0, 5] rad/s^2.
None
None
None
- Fixed an issue in the CAN send function where calling
is_can_bus_ok
resulted inbase_state
being None(#23).
None
Modified the GetFK function to include a mode parameter to choose the source of the robotic arm's forward kinematics joint data.
The mode parameter supports only two values: ["feedback", "control"].
The default value for mode is "feedback".
- 'feedback' -> Data from the robotic arm's feedback joint angle messages, corresponding to the data returned by the GetArmJointMsgs function.
- 'control' -> Data from the joint angle control messages sent in the robotic arm's master arm mode, corresponding to the data returned by the GetArmJointCtrl function.
None
None
Correct errors in the version 0.1.12 documentation.
None
None
V1 based on version V1.5-1 and before
The V1 version code here is the code under version 0.1.x.
The code in version 0.1.x differs significantly from the code in version 0.0.x. The V1 version in the former is an update and iteration based on the latter.
The following sections mainly explain the differences between the 0.1.x-V1 version code and the 0.0.x version code.
- Compatible with new firmware (before version V1.5-2), the protocol content is not detailed here.
C_PiperInterface
- Added conditional instantiation for the class. The condition is the
can_name
passed to the interface. For example, in a loop, repeatedly callingpiper = C_PiperInterface(can_name="can0")
will only create one instance. Subsequent instantiations will recognize that an instance withcan_name="can0"
has already been created and will not create a new one. - The class now includes frame rate calculation. You can use the
isOk
function to check if CAN data transmission is normal. A True feedback indicates normal data transmission, while False indicates that the data has been disconnected. - Added forward kinematics (FK) calculation. The pose of each joint relative to the base_link is calculated by extending the DH parameters. This can be obtained through the
GetFK
function, which returns the pose of link1 to link6 in a 6*6 list. The last element represents the pose of link6.
Compared to version 0.0.x, version 0.1.x-V1 adds several functions as follows:
Functio | Type | Description | Usage | Parameters | Feedback |
---|---|---|---|---|---|
GetCanFps |
Getter Method | Get the current real-time frame rate of the CAN bus. | obj.GetArmStatus() | None | int |
GetFK |
Getter Method | Get the forward kinematics of each joint of the robot arm. XYZ is in mm, RXRYRZ is in degrees. It returns a list of 6 floats, representing the pose of joints 1-6 relative to base_link. | obj.GetFK() | None | self.__link_fk |
isOk |
Getter Method | Check if the CAN data reading thread is functioning normally. | obj.isOk() | None | self.__is_ok |
__CanMonitor |
Getter Method | Monitor the CAN data frame rate. | Used internally in class | None | None |
__UpdatePiperFK |
Getter Method | Updates the Piper forward kinematics data. | Used internally in class | None | None |
V2 based on version V1.5-2 and later
The V1 and V2 version codes here are both under version 0.1.x.
In version 0.1.x, the difference between V2 and V1 is the protocol.
The code in version 0.1.x differs significantly from the code in version 0.0.x.
The following sections mainly explain the differences between V2 and V1.
- Compatible with new firmware (after version V1.5-2), while maintaining compatibility with the previous version firmware.
Additional information:
Byte 2 mode feedback now includes 0x04 MOVE M feedback, which corresponds to the MIT mode feedback.
Additional information:
Byte 1 MOVE mode now includes the 0x04 MOVE M instruction, which sets the MIT mode.
Added:
Byte 5 installation position settings:
- 0x00 Invalid value
- 0x01 Horizontal mounting (standard position)
- 0x02 Left side mounting
- 0x03 Right side mounting
Note: Ensure wiring faces backward.
Robot Arm Joint 1-6 MIT Control Command | ID 0x15A ~ 0x15F | len 8 | |
---|---|---|---|
Data | Function | Type | |
Byte 0 | Pos_ref [bit15~bit8] High 8 bits | uint8 | |
Byte 1 | Pos_ref [bit7~bit0] Low 8 bits | uint8 | |
Byte 2 | Vel_ref [bit11~bit4] Low 12 bits | uint8 | |
Byte 3 | Vel_ref [bit3 |
uint8 | |
Byte 4 | Kp [bit7~bit0] | uint8 | Kp reference value: 10 |
Byte 5 | Kd [bit11~bit4] Low 12 bits | uint8 | Kd reference value: 0.8 |
Byte 6 | Kd [bit3 |
uint8 | |
Byte 7 | T_ref [bit3 |
uint8 |
Additional invalid value command
Motor Angle Limit / Maximum Speed Setting Command | ID 0x474 | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Joint Motor Serial Number | uint8 | Range 1-6: 1-6 represents joint actuator serial number; |
Byte 1 | Maximum Angle Limit High | uint16 | Unit: 0.1° Invalid value: 0x7FFF |
Byte 2 | Maximum Angle Limit Low | ||
Byte 3 | Minimum Angle Limit High | uint16 | Unit: 0.1° Invalid value: 0x7FFF |
Byte 4 | Minimum Angle Limit Low | ||
Byte 5 | Maximum Joint Speed High | uint16 | Unit: 0.001 rad/s Invalid value: 0x7FFF |
Byte 6 | Maximum Joint Speed Low | ||
Byte 7 | Reserved |
Additional invalid value command
Joint Setting Command | ID 0x475 | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Joint Motor Serial Number | uint8 | Range 1-7: 1-6 represents joint actuator serial number; 7 represents all joint motors |
Byte 1 | Set the current position of motor N as zero point | uint8 | Valid value: 0xAE |
Byte 2 | Acceleration parameter setting effectiveness | uint8 | Valid value: 0xAE |
Byte 3 | Maximum Joint Acceleration High | uint16 | Unit: 0.001 rad/s² Invalid value: 0x7FFF |
Byte 4 | Maximum Joint Acceleration Low | Valid value: 0xAE | |
Byte 5 | Clear Joint Error Code | uint8 | |
Byte 6 | Reserved | ||
Byte 7 | Reserved |
Additional information:
Query gripper/teach pendant parameter index: 0x04
Joint Setting Command | ID 0x475 | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Parameter Query | uint8 | Query end-effector V/acc parameters: 0x01, Query collision protection level: 0x02, Query current trajectory index: 0x03, Query gripper/teach pendant parameter index: 0x04 |
Byte 1 | Parameter Setting | uint8 | Set end-effector V/acc parameters to initial values: 0x01, Set all joint limits, maximum joint speeds, and joint accelerations to default values: 0x02 |
Byte 2 | 0x48X Message Feedback Setting | uint8 | Invalid: 0x00; Enable periodic feedback: 0x01; Disable periodic feedback: 0x02; After enabling, periodic reporting of current end-effector speed/acceleration for joints 1-6 |
Byte 3 | End-effector load parameter setting effectiveness | uint8 | Valid value: 0xAE |
Byte 4 | Set End-effector Load | uint8 | 0x00 -- No load; 0x01 -- Half load; 0x02 -- Full load |
Byte 5 | Reserved | uint8 | |
Byte 6 | Reserved | ||
Byte 7 | Reserved |
Additional invalid value command
End-effector Speed/Acceleration Parameter Setting Command | ID 0x479 | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Maximum Linear Speed High | uint16 | Unit: 0.001 m/s Invalid value: 0x7FFF |
Byte 1 | Maximum Linear Speed Low | ||
Byte 2 | Maximum Angular Speed High | uint16 | Unit: 0.001 rad/s Invalid value: 0x7FFF |
Byte 3 | Maximum Angular Speed Low | ||
Byte 4 | Maximum Linear Acceleration High | uint16 | Unit: 0.001 m/s² Invalid value: 0x7FFF |
Byte 5 | Maximum Linear Acceleration Low | ||
Byte 6 | Maximum Angular Acceleration High | uint16 | Unit: 0.001 rad/s² Invalid value: 0x7FFF |
Byte 7 | Maximum Angular Acceleration Low |
Gripper/Teach Pendant Parameter Setting Command | ID 0x47D | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Teach Pendant Stroke Coefficient Setting | uint8 | Teach pendant stroke coefficient setting: 100~200, Unit: % (default 100%), only applies to setting the main arm of the master-slave arms, used to amplify the control stroke for the slave arm |
Byte 1 | Gripper/Teach Pendant Maximum Control Stroke Limit Setting | uint8 | Unit: mm; Invalid value: 0; Small gripper: 70mm; Large gripper: 100mm |
Byte 2 | Reserved | ||
Byte 3 | Reserved | ||
Byte 4 | Reserved | ||
Byte 5 | Reserved | ||
Byte 6 | Reserved | ||
Byte 7 | Reserved |
Gripper/Teach Pendant Parameter Feedback Command | ID 0x47E | ||
---|---|---|---|
Data | Function | Type | |
Byte 0 | Teach Pendant Stroke Coefficient Feedback | uint8 | Teach pendant stroke coefficient setting: 100~200, Unit: % (default 100%), only applies to setting the main arm of the master-slave arms, used to amplify the control stroke for the slave arm |
Byte 1 | Gripper/Teach Pendant Maximum Control Stroke Limit Feedback | uint8 | Unit: mm; Invalid value: 0; Small gripper: 70mm; Large gripper: 100mm |
Byte 2 | Reserved | ||
Byte 3 | Reserved | ||
Byte 4 | Reserved | ||
Byte 5 | Reserved | ||
Byte 6 | Reserved | ||
Byte 7 | Reserved |
- Retain V1 version
C_PiperInterface
, addC_PiperInterface_V2
The V2 version is maintained separately, although some code is duplicated, it ensures independence between versions, with minimal difference in usage.
In the V2 version, several functions have been added based on V1, as follows:
Function | Type | Description | Usage | Parameters | Feedback |
---|---|---|---|---|---|
GetGripperTeachingPendantParamFeedback |
Getter Method | Get gripper/teach pendant parameter feedback, including the teach pendant stroke coefficient feedback and the gripper/teach pendant maximum control stroke limit feedback after actively sending the command. | obj.GetGripperTeachingPendantParamFeedback() | None | self.__feedback_gripper_teaching_pendant_param |
MotorMaxSpdSet |
Ctrl Method | Set the maximum motor speed. | Called externally | motor_num (int) , max_joint_spd (int) |
None |
__JointMitCtrl |
Ctrl Method | 0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,MIT control command for arm joints 1~6 | Called externally | self,motor_num:int ,pos_ref:float ,vel_ref:float ,kp:float ,kd:float ,t_ref:float ,p_min:float=-12.5 ,p_max:float=12.5 ,v_min:float=-45.0 ,v_max:float=45.0 ,kp_min:float=0.0 ,kp_max:float=500.0 ,kd_min:float=-5.0 ,kd_max:float=5.0 ,t_min:float=-18.0 ,t_max:float=18.0 |
None |
JointMitCtrl |
Ctrl Method | 0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,MIT control command for arm joints 1~6 | Called externally | self,motor_num:int ,pos_ref:float ,vel_ref:float ,kp:float ,kd:float ,t_ref:float |
None |
GripperTeachingPendantParamConfig |
Ctrl Method | Gripper/teach pendant parameter setting command (based on V1.5-2 version or later) | Called externally | teaching_range_per:int=100 , max_range_config:int=70 |
None |
None
None
- Modified the CAN bus class to make the data reading section compatible with Ubuntu 18.04 and Python 3.6.
- Updated the protocol_base to simplify the function that converts values to a list by using struct and ctypes.
- Added singleton pattern support in the interface class.
- Added thread protection to the
ConnectPort
function in the interface class. - Added a
DisconnectPort
function to the interface class to stop the data reading process. - Changed the
Update
function and some variables in the interface class to private. - Fixed erroneous comments to make them more readable.
- Optimized the document structure and descriptions.
- Added an interface to query the robotic arm's firmware.
- Added all demos (e.g., moveC).
- Corrected the spelling of "jonit" to "joint".
- Fixed the unit for setting maximum motor acceleration to 0.01 rad/s^2; added a new function
JointMaxAccConfig
to set the motor's maximum acceleration.
None