Skip to content

Latest commit

 

History

History
175 lines (151 loc) · 21.3 KB

INTERFACE_V2.MD

File metadata and controls

175 lines (151 loc) · 21.3 KB

PIPER SDK Interface_V2 使用文档

EN

Based on version V1.5-2 and later

本SDK用于接收can数据帧,然后处理为自定义数据类型

ps:有些地方略写,代码中有详细的中文注释,本文这里只是理清结构

interface解析

C_PiperInterface_V2 类初始化参数及成员变量说明

内类依照can_port识别实例,防止重复创建同can_port的interface实例

形参 类型 默认值 说明
can_name str "can0" CAN 路由名称,指示从哪个 CAN 中收发数据。
judge_flag Bool True 是否在创建实例时判断can模块状态,如果使用了非机械臂自带的can模块而导致报错,请置为False后再尝试
can_auto_init Bool True 是否在创建实例时初始化can bus
dh_is_offset int 0 dh参数中的J2 J3是否偏移了2°,0为没有偏移,1为偏移了2°

1.二次封装类

说明
ArmStatus 机械臂状态二次封装类,增加时间戳。
ArmEndPose 机械臂末端姿态二次封装类,增加时间戳。
ArmJoint 机械臂关节角度反馈二次封装类,增加时间戳。
ArmGripper 机械臂夹爪反馈二次封装类,增加时间戳。
ArmMotorDriverInfoHighSpd 机械臂电机驱动高速反馈信息类,增加时间戳。
ArmMotorDriverInfoLowSpd 机械臂电机驱动低速反馈信息类,增加时间戳。
ArmMotorAngleLimitAndMaxVel 当前电机限制角度/最大速度反馈信息类,增加时间戳。
CurrentEndVelAndAccParam 当前末端速度/加速度参数反馈信息类,增加时间戳。
CrashProtectionLevelFeedback 碰撞防护等级设置反馈指令信息类,增加时间戳。
GripperTeachingPendantParamFeedback 夹爪/示教器参数反馈指令信息类,增加时间戳。
CurrentMotorMaxAccLimit 当前电机最大加速度限制反馈信息类,增加时间戳。
ArmJointCtrl 机械臂关节角度控制消息类,增加时间戳。
ArmGripperCtrl 机械臂夹爪控制消息类,增加时间戳。
ArmCtrlCode_151 机械臂发送控制指令0x151的消息接收类,由主臂发送,增加时间戳。
AllCurrentMotorMaxAccLimit 机械臂关节所有关节电机的最大加速度限制。
AllCurrentMotorAngleLimitMaxSpd 机械臂关节所有关节电机的角度限制和最大速度
ArmTimeStamp 机械臂的时间戳类,包含各种反馈的时间戳。

具体解释可以查看代码内注释

每个机械臂相关的类都有时间戳,如果是多条can帧才能获得的数据例如机械臂六个关节角,则会获取这些can帧的时间戳,并选取最大的一个作为该类的时间戳

2.类内变量解析

变量 类型 说明
__arm_can C_STD_CAN can_encapsulation.py 中的类的实例化,为硬件接收数据层,注册数据处理回调函数
__piper_fk C_PiperForwardKinematics 机械臂正解类
__parser C_PiperParserBase 数据协议解析类实例化,当前为V1版本协议解析,类型为数据解析类的基类
__firmware_data bytearray 固件版本字符串
__fps_counter C_FPSCounter can帧率计算
__is_ok Bool can总线是否还有数据
__arm_time_stamp ArmTimeStamp 时间戳类的实例化,是C_PiperInterface_V2的私有类,是一些由多个can帧组合一起的机械臂变量的时间戳,例如关节角
__link_feedback_fk list[float] 机械臂所有关节反馈信息的正解位置
__link_ctrl_fk list[float] 机械臂所有关节控制信息的正解位置
__arm_status ArmStatus 机械臂状态消息的实例,包含机械臂的状态信息。
__arm_end_pose ArmEndPose 机械臂末端姿态反馈消息的实例,包含末端的姿态信息。
__arm_joint_msgs ArmJoint 机械臂关节角度反馈消息的实例,包含各关节的状态信息。
__arm_gripper_msgs ArmGripper 机械臂夹爪反馈消息的实例,包含各夹爪的状态信息。
__arm_motor_info_high_spd ArmMotorDriverInfoHighSpd 变量为机械臂电机消息高速反馈类
__arm_motor_info_low_spd ArmMotorDriverInfoLowSpd 变量为机械臂电机低速反馈类
__feedback_current_motor_angle_limit_max_vel ArmMotorAngleLimitAndMaxVel 变量为主动发送can帧后的反馈消息,用来读取当前电机限制角度/最大速度
__feedback_current_end_vel_acc_param CurrentEndVelAndAccParam 该变量为主动发送can帧后的反馈消息,用来读取当前末端速度/加速度参数
__feedback_crash_protection_level CrashProtectionLevelFeedback 该变量为主动发送can帧后的反馈消息,用来读取碰撞防护等级设置反馈指令
__feedback_current_motor_max_acc_limit CurrentMotorMaxAccLimit 该变量为主动发送can帧后的反馈消息,用来读取反馈当前电机最大加速度限制
__arm_joint_ctrl_msgs ArmJointCtrl 变量为读取主动臂给从动臂发送的关节角消息
__arm_gripper_ctrl_msgs ArmGripperCtrl 变量为读取主动臂给从动臂发送的夹爪消息
__arm_ctrl_code_151 ArmCtrlCode_151 变量为读取主动臂发送给从动臂的0x151指令消息
__arm_all_motor_max_acc_limit AllCurrentMotorMaxAccLimit 变量为机械臂关节所有关节电机的最大加速度限制消息
__arm_all_motor_angle_limit_max_spd AllCurrentMotorAngleLimitMaxSpd 机械臂关节所有关节电机的角度限制和最大速度
_initialized Bool 类内防止重复实例标志位

3.函数解析

函数 类型 说明 使用 参数 反馈
get_instance Getter Method 获取当前实例地址 bj.GetArmStatus() can_name (str), judge_flag (Bool), can_auto_init (Bool) self@C_PiperInterface_V2
ConnectPort Start Method 该函数为打开can消息读取函数,该函数调用读取can消息函数,并创建读取线程,打开线程 用来在外部实例化类后,打开数据处理线程,并且发送读取机械臂电机的最大加速度、关节限位和最大速度读取指令 can_init (Bool) None
DisconnectPort Close Method 该函数为停止can读取线程并关闭can总线读取 外部实例化类后,关闭读取 can_init (Bool) None
ParseCANFrame Getter Method can协议解析函数,用来处理接收到的can数据帧,为can接收消息的回调函数 先创建局部变量,然后调用解析协议类中的解码函数如果解码成功,则更新对应的消息,更新到上述的私有变量中,每个更新数据函数都有筛选当前数据类型,对应的数据类型才会被更新 rx_message: Optional[can.Message] None
GetCanFps Getter Method 获取can总线当前实时帧率 obj.GetArmStatus() None int
GetArmStatus Getter Method 获取机械臂状态信息。使用互斥锁__arm_status_mtx保证线程安全。 obj.GetArmStatus() None self.__arm_status
GetArmEndPoseMsgs Getter Method 获取机械臂末端位置的消息。使用互斥锁__arm_end_pose_mtx保证线程安全。 obj.GetArmEndPoseMsgs() None self.__arm_end_pose
GetArmJointMsgs Getter Method 获取机械臂关节的状态消息。使用互斥锁__arm_joint_msgs_mtx保证线程安全。 obj.GetArmJointMsgs() None self.__arm_joint_msgs
GetFK Getter Method 获取机械臂每个关节控制信息和反馈信息的正解,XYZ单位为mm,RXRYRZ单位为度,反馈长度为6的float类型数据列表,代表 1-6 关节相对 base_link 的位姿 obj.GetFK() mode:Literal["feedback", "control"]="feedback" self.__link_fk
GetArmGripperMsgs Getter Method 获取机械臂夹爪的状态消息。使用互斥锁__arm_gripper_msgs_mtx保证线程安全。 obj.GetArmGripperMsgs() None self.__arm_gripper_msgs
GetArmHighSpdInfoMsgs Getter Method 获取机械臂高速运动信息的消息。使用互斥锁__arm_motor_info_high_spd_mtx保证线程安全。 obj.GetArmHighSpdInfoMsgs() None self.__arm_motor_info_high_spd
GetArmLowSpdInfoMsgs Getter Method 获取机械臂低速运动信息的消息。使用互斥锁__arm_motor_info_low_spd_mtx保证线程安全。 obj.GetArmLowSpdInfoMsgs() None self.__arm_motor_info_low_spd
GetCurrentMotorAngleLimitMaxVel Getter Method 获取当前指定电机编号的角度最大限制值。使用互斥锁__feedback_current_motor_angle_limit_max_vel_mtx保证线程安全。 obj.GetCurrentMotorAngleLimitMaxVel() None self.__feedback_current_motor_angle_limit_max_vel
GetCurrentEndVelAndAccParam Getter Method 获取当前机械臂末端速度和加速度参数的反馈。使用互斥锁__feedback_current_end_vel_acc_param_mtx保证线程安全。 obj.GetCurrentEndVelAndAccParam() None self.__feedback_current_end_vel_acc_param
GetCrashProtectionLevelFeedback Getter Method 获取碰撞保护等级的反馈信息。使用互斥锁__feedback_crash_protection_level_mtx保证线程安全。 obj.GetCrashProtectionLevelFeedback() None self.__feedback_crash_protection_level
GetGripperTeachingPendantParamFeedback Getter Method 获取夹爪/示教器参数反馈指令,包括示教器行程系数反馈、夹爪/示教器最大控制行程限制值反馈 为主动发送指令后反馈消息 obj.GetGripperTeachingPendantParamFeedback() None self.__feedback_gripper_teaching_pendant_param
GetCurrentMotorMaxAccLimit Getter Method 获取当前电机最大加速度限制的反馈。使用互斥锁__feedback_current_motor_max_acc_limit_mtx保证线程安全。 obj.GetCurrentMotorMaxAccLimit() None self.__feedback_current_motor_max_acc_limit
GetArmJointCtrl Getter Method 获取机械臂主动臂发给从臂的关节角控制消息。使用互斥锁__arm_joint_ctrl_msgs_mtx保证线程安全。 obj.GetArmJointCtrl() None self.__arm_joint_ctrl_msgs
GetArmGripperCtrl Getter Method 获取机械臂主动臂发给从臂的夹爪控制消息。使用互斥锁__arm_gripper_ctrl_msgs_mtx保证线程安全。 obj.GetArmJointCtrl() None self.__arm_gripper_ctrl_msgs
GetArmCtrlCode151 Getter Method 获取机械臂控制码151的状态。使用互斥锁__arm_ctrl_code_151_mtx保证线程安全。 obj.GetArmCtrlCode151() None self.__arm_ctrl_code_151
GetAllMotorMaxAccLimit Getter Method 获取机械臂控关节所有关节电机的最大加速度限制消息,使用互斥锁__arm_all_motor_max_acc_limit_mtx保证线程安全。 obj.GetAllMotorMaxAccLimit() None self.__arm_all_motor_max_acc_limit
GetAllMotorAngleLimitMaxSpd Getter Method 获取机械臂控关节所有关节电机的角度限制和最大速度,使用互斥锁__arm_all_motor_angle_limit_max_spd_mtx保证线程安全。 obj.GetAllMotorAngleLimitMaxSpd() None self.__arm_all_motor_angle_limit_max_spd
GetPiperFirmwareVersion Getter Method 获取piper机械臂的主控固件版本,反馈固件版本字符串 obj.GetPiperFirmwareVersion() None firmware_version
isOk Getter Method 反馈can数据读取线程是否正常 obj.isOk() None self.__is_ok
__CanMonitor Getter Method can数据帧率检测 类内使用 None None
__UpdateArmStatus Getter Method 更新机械臂状态 类内使用 msg:PiperMessage self.__arm_status
__UpdateArmEndPoseState Getter Method 更新末端位姿状态,单位为0.001mm 类内使用 msg:PiperMessage self.__arm_end_pose
__UpdateArmJointState Getter Method 更新关节状态,关节角单位为0.001度 类内使用 msg:PiperMessage self.__arm_joint_msgs
__UpdateArmGripperState Getter Method 更新夹爪状态,夹爪反馈的行程单位为0.001mm 类内使用 msg:PiperMessage self.__arm_gripper_msgs
__UpdateDriverInfoHighSpdFeedback Getter Method 更新驱动器信息反馈(高速) 类内使用 msg:PiperMessage self.__arm_motor_info_high_spd
__UpdateDriverInfoLowSpdFeedback Getter Method 更新驱动器信息反馈(低速) 类内使用 msg:PiperMessage self.__arm_motor_info_low_spd
__UpdateCurrentMotorAngleLimitMaxVel Getter Method 更新当前电机限制角度/最大速度 类内使用 msg:PiperMessage self.__feedback_current_motor_angle_limit_max_vel
__UpdateCurrentMotorMaxAccLimit Getter Method 更新当前电机最大加速度限制 类内使用 msg:PiperMessage self.__feedback_current_motor_max_acc_limit
__UpdateAllCurrentMotorAngleLimitMaxVel Getter Method 更新所有电机最大加速度限制 类内使用 msg:PiperMessage self.__arm_all_motor_angle_limit_max_spd
__UpdateAllCurrentMotorMaxAccLimit Getter Method 更新所有电机角度限制和最大速度 类内使用 msg:PiperMessage self.__arm_all_motor_max_acc_limit
__UpdateCurrentEndVelAndAccParam Getter Method 更新当前末端速度/加速度参数 类内使用 msg:PiperMessage self.__feedback_current_end_vel_acc_param
__UpdateCrashProtectionLevelFeedback Getter Method 更新碰撞防护等级设置反馈指令 类内使用 msg:PiperMessage self.__feedback_crash_protection_level
__UpdateGripperTeachingPendantParamFeedback Getter Method 夹爪/示教器参数反馈指令 类内使用 msg:PiperMessage self.__feedback_gripper_teaching_pendant_param
__UpdateArmJointCtrl Getter Method 更新关节状态(为主臂发送的消息) 类内使用 msg:PiperMessage self.__arm_joint_ctrl_msgs
__UpdateArmGripperCtrl Getter Method 更新夹爪状态(为主臂发送的消息) 类内使用 msg:PiperMessage self.__arm_gripper_ctrl_msgs
__UpdateArmCtrlCode151 Getter Method 更新主臂发送的151控制指令 类内使用 msg:PiperMessage self.__arm_ctrl_code_151
__UpdatePiperFirmware Getter Method 更新发送4AF后,读取到的4AF反馈的字符并拼接 类内使用 msg:PiperMessage self.__firmware_data
__UpdatePiperFeedbackFK Getter Method 更新piper反馈信息正解数据 类内使用 None None
__UpdatePiperCtrlFK Getter Method 更新piper控制信息正解数据 类内使用 None None
MotionCtrl_1 Ctrl Method 0x150,可以控制急停、轨迹传输及拖动示教模式。 类外调用 emergency_stop (uint8),track_ctrl (uint8), grag_teach_ctrl (uint8) None
EmergencyStop Ctrl Method 0x150,控制急停 类外调用 emergency_stop (uint8) None
MotionCtrl_2 Ctrl Method 0x151,可以设置控制模式、MOVE模式及运动速度。每次控制机械臂运动之前都要发送一次,否则机械臂可能动不起来 类外调用 ctrl_mode (uint8),move_mode (uint8), move_spd_rate_ctrl (uint8), is_mit_mode(uint8) None
ModeCtrl Ctrl Method 0x151,设置控制模式、MOVE模式及运动速度。每次控制机械臂运动之前都要发送一次,否则机械臂可能动不起来 类外调用 ctrl_mode (uint8),move_mode (uint8), move_spd_rate_ctrl (uint8),is_mit_mode(uint8) None
EndPoseCtrl Ctrl Method 0x152,0x153,0x154,控制机械臂的末端位置和姿态。是下面三个函数的汇总,需要注意的是,该函数发送出去的x、y、z数值单位为0.001mm,rx、ry、rz数值单位为0.001度,假如需要机械臂向x轴方向运行0.3m,则发送的数据应为0.3*100*1000=30000 类外调用 X (int), Y (int), Z (int), RX (int), RY (int), RZ (int) None
__CartesianCtrl_XY Ctrl Method 控制机械臂笛卡尔坐标的XY轴运动。 类内调用(私有) X (int), Y (int) None
__CartesianCtrl_ZRX Ctrl Method 控制机械臂笛卡尔坐标的Z轴和RX轴运动。 类内调用(私有) Z (int), RX (int) None
__CartesianCtrl_RYRZ Ctrl Method 控制机械臂笛卡尔坐标的RY轴和RZ轴运动。 类内调用(私有) RY (int), RZ (int) None
JointCtrl Ctrl Method 0x155,0x156,0x157,控制机械臂的六个关节运动。需要注意的是,该函数发送出去的数值单位为0.001度,假如需要机械臂1号关节运动90度(1.57弧度),则发送的数据为90*1000,如果是弧度,则1.57*1000*(180/3.14) 类外调用 joint_1 (int), joint_2 (int), joint_3 (int), joint_4 (int), joint_5 (int), joint_6 (int) None
__JointCtrl_12 Ctrl Method 控制机械臂1,2关节运动。 类内调用(私有) joint_1 (int), joint_2 (int) None
__JointCtrl_34 Ctrl Method 控制机械臂3,4关节运动。 类内调用(私有) joint_3 (int), joint_4 (int) None
__JointCtrl_56 Ctrl Method 控制机械臂5,6关节运动。 类内调用(私有) joint_5 (int), joint_6 (int) None
MoveCAxisUpdateCtrl Ctrl Method 机械臂圆弧模式控制,需要EndPoseCtrl配合使用。EndPoseCtrl发布目标位姿,MoveCAxisUpdateCtrl按照参数执行上一条 EndPoseCtrl() 设定的目标位姿,并更新运动轨迹。 类外调用 instruction_num:int None
GripperCtrl Ctrl Method 0x159控制机械臂夹爪的运动。夹爪适配agx的末端执行器,夹爪模块是独立使能,需要注意的是,该函数发送出去的数值单位为0.001mm,假如需要夹爪运动50mm,则发送的数据为50*1000=50000 类外调用 gripper_angle (int), gripper_effort (int), gripper_code (int), set_zero (int) None
MasterSlaveConfig Ctrl Method 0x470,配置机械臂随动主从模式。 类外调用 linkage_config (int), feedback_offset (int), ctrl_offset (int), linkage_offset (int) None
DisableArm Ctrl Method 0x471,失能电机。此时指定电机失去力,如果此时机械臂处于非零点位置,例如2号关节和3号关节抬起状态下,机械臂会直接失力掉下来 类外调用 motor_num (int), enable_flag (int) None
EnableArm Ctrl Method 0x471,使能机械臂电机,此时指定的机械臂电机上电,用手尝试移动机械臂关节是无法移动的 类外调用 motor_num (int), enable_flag (int) None
SearchMotorMaxAngleSpdAccLimit Ctrl Method 0x472,查询电机角度、最大速度及最大加速度限制。这是一个主动发送后反馈指定消息的指令,为应答式指令,可以通过修改search_content来查询指定的内容,反馈的内容是单个电机的 类外调用 motor_num (int), search_content (int) None
SearchAllMotorMaxAngleSpd Ctrl Method 查询全部电机的电机最大角度/最小角度/最大速度指令 类外调用 None None
SearchAllMotorMaxAccLimit Ctrl Method 查询全部电机的最大加速度限制指令 类外调用 None None
MotorAngleLimitMaxSpdSet Ctrl Method 设置电机角度限制及最大速度。 类外调用 motor_num (int), max_angle_limit (int), min_angle_limit (int), max_joint_spd (int) None
MotorMaxSpdSet Ctrl Method 设置电机最大速度。 类外调用 motor_num (int), max_joint_spd (int) None
JointConfig Ctrl Method 配置关节参数。 类外调用 joint_num (int), set_zero (int), acc_param_is_effective (int), max_joint_acc (int), clear_err (int) None
JointMaxAccConfig Ctrl Method 设定关节最大加速度 类外调用 motor_num (int), max_joint_acc (int) None
SetInstructionResponse Ctrl Method 设置指令应答。 类外调用 instruction_index (int), zero_config_success_flag (int) None
ArmParamEnquiryAndConfig Ctrl Method 机械臂参数查询与设置。 类外调用 param_enquiry (int), param_setting (int), data_feedback_0x48x (int), end_load_param_setting_effective (int), set_end_load (int) None
EndSpdAndAccParamSet Ctrl Method 设置机械臂末端速度及加速度参数。 类外调用 end_max_linear_vel (int), end_max_angular_vel (int), end_max_linear_acc (int), end_max_angular_acc (int) None
CrashProtectionConfig Ctrl Method 配置机械臂碰撞防护等级。 类外调用 joint_1_protection_level (int), joint_2_protection_level (int), joint_3_protection_level (int), joint_4_protection_level (int), joint_5_protection_level (int), joint_6_protection_level (int) None
SearchPiperFirmwareVersion Ctrl Method 查询piper机械臂的主控固件版本 类外调用 None None
__JointMitCtrl Ctrl Method 0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,机械臂关节1~6MIT控制指令 类内调用 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,机械臂关节1~6MIT控制指令 类外调用 self,motor_num:int,pos_ref:float,vel_ref:float,kp:float,kd:float,t_ref:float None
GripperTeachingPendantParamConfig Ctrl Method 夹爪/示教器参数设置指令(基于V1.5-2版本后) 类外调用 teaching_range_per:int=100, max_range_config:int=70, teaching_friction:int = 1 None

注意:

所有Update函数都是用来读取can数据帧后更新解析的数据到私有变量中的接口,由于获取消息并处理后的变量被更新到私有变量中,因此需要用类内的Get函数来获取私有变量的数值

注意获取的所有数值为原始数值

机械臂末端位姿反馈单位为0.001mm

关节角变量单位为0.001度

夹爪反馈的行程单位为0.001mm

夹爪反馈的扭矩单位为0.001N/m

因此需要自行处理单位问题,例如需要获取夹爪当前角度,需要将Get到的关节角度除以1000,才是获取到的真实角度