【设备使用】法奥意威 FR5 机械臂 Python 控制
[!abstract]
FR5 是与 UR5 构型相似的 6 自由度机械臂,本文介绍其 Python SDK 的基本运动控制方法。本文内容参考自官方文档。
一、FR5 机器人使用方法
1.1 机器人安装与连接
(1)机器人安装
安装好机器人,并将夹爪安装连接在机械臂末端。
(2)网络配置
机器人默认 IP 地址为 192.168.58.2
,需要修改电脑 IP 同一频段例如 192.168.58.10
,然后才可连接。
配置好网络后,在浏览器输入 192.168.58.2
,进入机械臂网页控制页面说明连接成功,默认用户名 admin,默认密码 123。(必须使用 Chrome 浏览器)
(3)Python 环境
该 SDK 程序基于 Python 3.10 实现,因此需要创建 3.10 的 Python 环境才能正常使用。
(4)设置工具坐标系
首先进入浏览器机器人后台,打开【初始设置-机器人设置-工具坐标】,选择坐标系名称为 toolcoord1(初始默认是 toolcoord0,尽量不修改它),此时成功设置机器人工具坐标系为 toolcoord1。
如果已知参数,例如夹爪坐标系和法兰盘坐标系,方向相同,仅 Z 轴移动了一定距离。可以直接设置为:[0, 0, 185, 0, 0, 0]
或者通过六点法标定,依次选择六个点
- 第 1 点:在世界中指定一个点,保持工具尖端在该位置处
- 第 2 点:保持工具尖端在该位置处(与上一点姿态差距尽量大)
- 第 3 点:保持工具尖端在该位置处(与前两点姿态差距尽量大)
- 第 4 点:保持工具尖端在该位置处,末端 Z 轴与工具坐标 Z 轴平行
- 第 5 点:移动工具末端至工具 X 轴正方向上的任一点
- 第 6 点:移动工具末端至工具 Y 轴正方向上的任一点
1.2 示例程序
(1)机器人连接与基本运动
该程序的功能为,连接机器人,移动机器人至初始位置(本文中机器人安装位置绕 Z 轴有夹角,设置初始位置为夹爪向下),激活夹爪并关闭夹爪。
1 | import Robot |
二、FR5 常用 Python 接口
2.1 机器人基础
2.1.1 实例化机器人
RPC(ip)
:实例化一个机器人对象
- 参数:
ip
:机器人的IP地址,默认出厂IP为“192.168.58.2”
- 返回
- 机器人对象
1 | from fairino import Robot |
2.1.2 查询 SDK 版本号
GetSDKVersion()
:查询 SDK 版本号
- 参数
- 返回
- [SDK_version, Controller_version]
1 | from fairino import Robot |
2.1.3 机器人手动/自动模式切换
Mode(state)
:控制机器人手动/自动模式切换
- 参数
state
:0-自动模式,1-手动模式
- 返回
- 错误码
1 | from fairino import Robot |
2.1.4 控制机器人上使能或下使能
RobotEnable(state)
:控制机器人上使能或下使能
- 参数
state
:1-上使能,0-下使能
- 返回
- 错误码
1 | from fairino import Robot |
2.2 机器人运动控制
2.2.1 机器人点动
(1)Jog 点动
StartJOG(ref,nb,dir,max_dis,vel=20.0,acc=100.0)
:jog 点动
- 参数
ref
:0-关节点动,2-基坐标系点动,4-工具坐标系点动,8-工件坐标系点动;nb
:1-1关节(x 轴),2-2关节(y 轴),3-3关节(z 轴),4-4关节(rx),5-5关节(ry),6-6关节(rz);dir
:0-负方向,1-正方向;max_dis
:单次点动最大角度/距离,单位 ° 或 mm;vel
:速度百分比,[0~100] 默认20;acc
:加速度百分比,[0~100] 默认100;
- 返回
- 错误码
(2)Jog 点动减速停止
StopJOG(ref)
:jog 点动减速停止
- 参数
ref
:1-关节点动停止,3-基坐标系点动停止,5-工具坐标系点动停止,9-工件坐标系点动停止
- 返回
- 错误码
(3)Jog 点动立即停止
ImmStopJOG()
:jog 点动立即停止
- 参数
- 返回
- 错误码
1 | from fairino import Robot |
2.2.2 关节空间运动
MoveJ(joint_pos, tool, user, desc_pos = [0.0,0.0,0.0,0.0,0.0,0.0], vel = 20.0, acc = 0.0, ovl = 100.0, exaxis_pos = [0.0,0.0,0.0,0.0], blendT = -1.0, offset_flag = 0, offset_pos = [0.0,0.0,0.0,0.0,0.0,0.0])
:关节空间运动
- 参数
joint_pos
:目标关节位置,单位[°];tool
:工具号,[0~14];user
:工件号,[0~14];desc_pos
:目标笛卡尔位姿,单位 [mm][°] 默认初值为[0.0,0.0,0.0,0.0,0.0,0.0],默认值调用正运动学求解返回值;vel
:速度百分比,[0~100] 默认20.0;acc
:加速度百分比,[0~100],暂不开放;ovl
:速度缩放因子,[0~100] 默认100.0;exaxis_pos
:外部轴 1 位置 ~ 外部轴 4 位置 默认[0.0,0.0,0.0,0.0];blendT
:[-1.0]-运动到位 (阻塞),[0~500.0]-平滑时间 (非阻塞),单位 [ms] 默认-1.0;offset_flag
:[0]-不偏移,[1]-工件/基坐标系下偏移,[2]-工具坐标系下偏移 默认 0;offset_pos
:位姿偏移量,单位 [mm][°] 默认[0.0,0.0,0.0,0.0,0.0,0.0];
- 返回
- 错误码
1 | from fairino import Robot |
2.2.3 笛卡尔空间直线运动
MoveL(desc_pos, tool, user, joint_pos = [0.0,0.0,0.0,0.0,0.0,0.0], vel = 20.0, acc = 0.0 , ovl = 100.0, blendR = -1.0, exaxis_pos = [0.0,0.0,0.0,0.0], search = 0, offset_flag = 0, offset_pos = [0.0,0.0,0.0,0.0,0.0,0.0] )
:笛卡尔空间直线运动
- 参数
desc_pos
:目标笛卡尔位姿,单位[mm][°];tool
:工具号,[0~14];user
:工件号,[0~14];joint_pos
:目标关节位置,单位 [°] 默认初值为[0.0,0.0,0.0,0.0,0.0,0.0],默认值调用逆运动学求解返回值;vel
:速度百分比,[0~100] 默认20.0;acc
:加速度百分比,[0~100],暂不开放 默认0.0;ovl
:速度缩放因子,[0~100] 默认100.0;blendR
:blendR:[-1.0]-运动到位 (阻塞),[0~1000]-平滑半径 (非阻塞),单位 [mm] 默认-1.0;exaxis_pos
:外部轴 1 位置 ~ 外部轴 4 位置 默认[0.0,0.0,0.0,0.0];search
:[0]-不焊丝寻位,[1]-焊丝寻位;offset_flag
:offset_flag:[0]-不偏移,[1]-工件/基坐标系下偏移,[2]-工具坐标系下偏移 默认 0;offset_pos
:位姿偏移量,单位 [mm][°] 默认[0.0,0.0,0.0,0.0,0.0,0.0]
- 返回
- 错误码
1 | from fairino import Robot |
2.2.4 笛卡尔空间点到点运动
MoveCart(desc_pos, tool, user, vel = 20.0, acc = 0.0, ovl = 100.0, blendT = -1.0, config = -1)
:笛卡尔空间点到点运动
- 参数
desc_pos
:目标笛卡尔位置;tool
:工具号,[0~14];user
:工件号,[0~14];vel
:速度,范围 [0~100],默认为 20.0;acc
:加速度,范围 [0~100],暂不开放,默认为 0.0;ovl
:速度缩放因子,[0~100],默认为 100.0;blendT
:[-1.0]-运动到位 (阻塞),[0~500]-平滑时间 (非阻塞),单位 [ms] 默认为 -1.0;config
:关节配置,[-1]-参考当前关节位置求解,[0~7]-依据关节配置求解 默认为 -1
- 返回
- 错误码
1 | from fairino import Robot |
2.2.5 伺服运动
(1)伺服运动开始
ServoMoveStart()
:伺服运动开始,配合 ServoJ、ServoCart 指令使用
- 参数
- 返回
- 错误码
(2)伺服运动结束
ServoMoveEnd()
:伺服运动开始,配合 ServoJ、ServoCart 指令使用
- 参数
- 返回
- 错误码
(3)关节空间伺服模式运动
ServoJ(joint_pos, acc = 0.0, vel = 0.0, cmdT = 0.008, filterT = 0.0, gain = 0.0)
:关节空间伺服模式运动
- 参数
joint_pos
:目标关节位置,单位[°];acc
:加速度,范围 [0~100],暂不开放,默认为 0.0;vel
:速度,范围 [0~100],暂不开放,默认为 0.0;cmdT
:指令下发周期,单位s,建议范围[0.001~0.0016], 默认为0.008;filterT
:滤波时间,单位 [s],暂不开放, 默认为0.0;gain
:目标位置的比例放大器,暂不开放, 默认为0.0;
- 返回
- 错误码
(4)笛卡尔空间伺服模式运动
ServoCart(mode, desc_pos, pos_gain = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0] , acc = 0.0, vel = 0.0, cmdT = 0.008, filterT = 0.0, gain = 0.0)
:笛卡尔空间伺服模式运动
- 参数
mode
:[0]-绝对运动(基坐标系),[1]-增量运动(基坐标系),[2]-增量运动(工具坐标系);desc_pos
:目标笛卡尔位置/目标笛卡尔位置增量;pos_gain
:位姿增量比例系数,仅在增量运动下生效,范围 [0~1], 默认为 [1.0, 1.0, 1.0, 1.0, 1.0, 1.0];acc
:加速度,范围 [0~100],暂不开放,默认为 0.0;vel
:速度,范围 [0~100],暂不开放,默认为 0.0;cmdT
:指令下发周期,单位s,建议范围[0.001~0.0016], 默认为0.008;filterT
:滤波时间,单位 [s],暂不开放, 默认为0.0;gain
:目标位置的比例放大器,暂不开放, 默认为0.0;
- 返回
- 错误码
1 | from fairino import Robot |
2.3 机器人参数设置
2.3.1 设置全局速度
SetSpeed(vel)
:设置全局速度
- 参数
vel
:速度百分比,范围[0~100]
- 返回
- 错误码
1 | from fairino import Robot |
2.3.2 设置系统变量值
SetSysVarValue(id,value)
:设置系统变量
- 参数
id
:变量编号,范围[1~20];value
:变量值
- 返回
- 错误码
1 | from fairino import Robot |
2.3.3 设置工具坐标系
(1)计算工具坐标系 - 六点法
SetToolPoint(point_num)
:设置工具参考点-六点法
- 参数
point_num
:点编号,范围[1~6]
- 返回错误码
ComputeTool()
:计算工具坐标系-六点法(设置完六个工具参考点后再进行计算)
- 参数
- 返回
- 错误码
tcp_pose [x,y,z,rx,ry,rz]
:工具坐标系
1 | from fairino import Robot |
(2)计算工具坐标系 - 四点法
SetTcp4RefPoint(point_num)
:设置工具参考点-四点法
- 参数
point_num
:点编号,范围[1~4]
- 返回值
- 错误码
ComputeTcp4()
:计算工具坐标系-四点法(设置完四个工具参考点后再进行计算)
- 参数
- 返回
- 错误码
tcp_pose [x,y,z,rx,ry,rz]
:工具坐标系
1 | from fairino import Robot |
(3)设置工具坐标系
SetToolCoord(id,t_coord,type,install)
:设置工具坐标系
- 参数
id
:坐标系编号,范围[0~14];t_coord
:[x,y,z,rx,ry,rz] 工具中心点相对末端法兰中心位姿,单位[mm][°];type
:0-工具坐标系,1-传感器坐标系;install
:安装位置,0-机器人末端,1-机器人外部
- 返回
- 错误码
1 | from fairino import Robot |
2.3.4 设置外部工具坐标系
(1)设置外部工具参考点
SetExTCPPoint(point_num)
:设置外部工具参考点-三点法
- 参数
point_num
:点编号,范围[1~3]
- 返回
- 错误码
(2)计算外部工具坐标系
ComputeExTCF(point_num)
:计算外部工具坐标系-三点法(设置完三个参考点后再进行计算)
- 参数
point_num
:点编号,范围[1~3]
- 返回
- 错误码
etcp [x,y,z,rx,ry,rz]
:外部工具坐标系
(3)设置外部工具坐标系
SetExToolCoord(id,etcp ,etool)
:设置外部工具坐标系
- 参数
id
:坐标系编号,范围[0~14];etcp
:外部工具坐标系,单位[mm][°];etool
:末端工具坐标系,单位[mm][°];
- 返回
- 错误码
1 | from fairino import Robot |
2.3.5 设置工件坐标系
(1)设置工件参考点
SetWObjCoordPoint(point_num)
:设置工件参考点-三点法
- 参数
point_num
:点编号,范围[1~3]
- 返回
- 错误码
(2)计算工件坐标系
ComputeWObjCoord()
:计算工件坐标系-三点法(三个参考点设置完后再进行计算;
- 参数
method
:计算方式:0(原点-x轴-z轴),1(原点-x轴-xy平面)
- 返回
- 错误码
wobj_pose [x,y,z,rx,ry,rz]
:工件坐标系
(3)设置工件坐标系
SetWObjCoord(id,w_coord)
:设置工件坐标系
- 参数
id
:坐标系编号,范围[0~14];w_coord
:坐标系相对位姿,单位[mm][°];
- 返回
- 错误码
1 | from fairino import Robot |
2.4 机器人安全设置
2.4.1 碰撞设置
(1)设置碰撞等级
SetAnticollision (mode,level,config)
:设置碰撞等级
- 参数
mode
:0-等级,1-百分比;level=[j1,j2,j3,j4,j5,j6]
:碰撞阈值;config
:0-不更新配置文件,1-更新配置文件
- 返回
- 错误码
(2)设置碰撞后策略
SetCollisionStrategy (strategy)
:设置碰撞后策略
- 参数
strategy
:0-报错暂停,1-继续运行
- 返回
- 错误码
1 | from fairino import Robot |
2.4.2 设置关节限位
(1)正限位
SetLimitPositive(p_limit)
:设置正限位
- 参数
p_limit=[j1,j2,j3,j4,j5,j6]
:六个关节位置
- 返回
- 错误码
(2)负限位
SetLimitNegative(p_limit)
:设置负限位
- 参数
n_limit=[j1,j2,j3,j4,j5,j6]
:六个关节位置
- 返回
- 错误码
1 | from fairino import Robot |
2.4.3 错误状态清除
ResetAllError()
:错误状态清除,只能清除可复位的错误
- 参数
- 返回
- 错误码
1 | from fairino import Robot |
2.5 机器人状态查询
2.5.1 获取关节位置
(1)获取当前关节位置(角度)
GetActualJointPosDegree(flag = 1)
:获取关节当前位置(角度)
- 参数
flag
:0-阻塞,1-非阻塞
- 返回
- 错误码
joint_pos
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
(2)获取当前关节位置(弧度)
GetActualJointPosRadian(flag = 1)
:获取关节当前位置(弧度)
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
joint_pos
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
2.5.2 获取关节反馈速度
GetActualJointSpeedsDegree(flag = 1 )
:获取关节反馈速度(deg/s)(实际速度)
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
speed
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
2.5.3 获取工具坐标系速度
(1)TCP 指令合速度
GetTargetTCPCompositeSpeed(flag = 1)
:获取 TCP 指令合速度(期望速度)
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
[tcp_speed,ori_speed]
:tcp_speed 线性合速度,ori_speed 姿态合速度
1 | from fairino import Robot |
(2)TCP 反馈合速度
GetActualTCPCompositeSpeed(flag = 1)
:获取TCP反馈合速度(实际速度)
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
[tcp_speed,ori_speed]
:tcp_speed 线性合速度,ori_speed 姿态合速度
1 | from fairino import Robot |
(3)TCP 指令速度
GetTargetTCPSpeed(flag = 1)
:获取 TCP 指令速度(期望速度)
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
speed
:[x,y,z,rx,ry,rz]
1 | from fairino import Robot |
(4)TCP 反馈速度
GetActualTCPSpeed(flag = 1)
:获取 TCP 反馈速度
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
speed
:[x,y,z,rx,ry,rz]
1 | from fairino import Robot |
2.5.4 获取工具位姿
GetActualTCPPose(flag = 1)
:获取当前工具位姿
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
tcp_pose
=[x,y,z,rx,ry,rz]
1 | from fairino import Robot |
2.5.5 获取末端法兰位姿
GetActualToolFlangePose(flag = 1)
:获取当前末端法兰位姿
- 参数
flag
:0-阻塞,1-非阻塞 默认1
- 返回
- 错误码
flange_pose
=[x,y,z,rx,ry,rz]
1 | from fairino import Robot |
2.5.6 获取关节转矩
GetJointTorques(flag = 1)
:获取当前关节转矩
- 参数
flag
:0-阻塞,1-非阻塞 默认 1
- 返回
- 错误码
torques
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
2.5.7 获取关节软限位
GetJointSoftLimitDeg(flag = 1)
:获取关节软限位角度
- 参数
flag
:0-阻塞,1-非阻塞 默认 1
- 返回
- 错误码
[j1min,j1max,j2min,j2max,j3min,j3max, j4min,j4max,j5min, j5max, j6min,j6max]
: 轴 1~ 轴 6 关节负限位与正限位,单位 [mm]
1 | from fairino import Robot |
2.5.8 查询机器人运动是否完成
GetRobotMotionDone()
:查询机器人运动是否完成
- 参数
- 返回
- 错误码
state
:0-未完成,1-完成
1 | from fairino import Robot |
2.5.9 获取 DH 参数
GetDHCompensation()
:获取 DH 补偿参数
- 参数
- 返回
- 错误码
[cmpstD1,cmpstA2,cmpstA3,cmpstD4,cmpstD5,cmpstD6]
:dhCompensation 机器人 DH 参数补偿值(mm)
1 | import Robot |
2.6 机器人运动学
2.6.1 正运动学求解
GetForwardKin(joint_pos)
:正运动学,关节位置求解工具位姿
- 参数
joint_pos
:[j1,j2,j3,j4,j5,j6]:关节位置,单位[°]
- 返回
- 错误码
desc_pos
=[x,y,z,rx,ry,rz]
1 | from fairino import Robot |
2.6.2 逆运动学
(1)逆运动学求解
GetInverseKin(type,desc_pos,config)
:逆运动学,笛卡尔位姿求解关节位置
- 参数
type
:0-绝对位姿(基坐标系),1-相对位姿(基坐标系),2-相对位姿(工具坐标系)desc_pose
:[x,y,z,rx,ry,rz],工具位姿,单位[mm][°]
- 返回
- 错误码
joint_pos
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
(2)逆运动学求解(指定参考位置)
GetInverseKinRef(type,desc_pos,joint_pos_ref)
:逆运动学,工具位姿求解关节位置,参考指定关节位置求解
- 参数
type
:0-绝对位姿(基坐标系),1-相对位姿(基坐标系),2-相对位姿(工具坐标系)desc_pos
:[x,y,z,rx,ry,rz]工具位姿,单位[mm][°]joint_pos_ref
:[j1,j2,j3,j4,j5,j6],关节参考位置,单位[°]
- 返回
- 错误码
joint_pos
=[j1,j2,j3,j4,j5,j6]
1 | from fairino import Robot |
(3)逆运动学求解(判断是否有解)
GetInverseKinHasSolution(type,desc_pos,joint_pos_ref)
:逆运动学,工具位姿求解关节位置 是否有解
- 参数
type
:0-绝对位姿(基坐标系),1-相对位姿(基坐标系),2-相对位姿(工具坐标系)desc_pos
:[x,y,z,rx,ry,rz]工具位姿,单位[mm][°]joint_pos_ref
:[j1,j2,j3,j4,j5,j6],关节参考位置,单位[°]
- 返回
- 错误码
result
:“True”-有解,“False”-无解
1 | from fairino import Robot |
2.7 夹爪配置
2.7.1 夹爪配置
(1)获取夹爪配置
GetGripperConfig()
:获取夹爪配置
- 参数
- 返回
- 错误码
[number,company,device,softversion]
:number(夹爪编号,范围[1]);company(夹爪厂商,1-Robotiq,2-慧灵,3-天机,4-大寰,5-知行);device(设备号,Robotiq(0-2F-85系列),慧灵(0-NK系列,1-Z-EFG-100), 天机(0-TEG-110),大寰(0-PGI-140),知行(0-CTPM2F20)); softvesion(软件版本号,暂不使用,默认为0);
(2)配置夹爪
SetGripperConfig(company,device,softversion,bus)
:配置夹爪
- 参数
company
:夹爪厂商,1-Robotiq,2-慧灵,3-天机,4-大寰,5-知行;device
:设备号,Robotiq(0-2F-85系列),慧灵(0-NK系列,1-Z-EFG-100),天机(0-TEG-110),大寰(0-PGI-140),知行(0-CTPM2F20)softversion
:软件版本号,暂不使用,默认为0;bus
:设备挂载末端总线位置,暂不使用,默认为0;
- 返回
- 错误码
2.7.2 夹爪控制
测试发现若夹爪连接在机械臂上,控制盒集成的夹爪控制与机械臂本体伺服控制会存在程序阻塞,无法同时使用
考虑夹爪直接连接电脑,通过 RS485 控制机械臂。
(1)激活夹爪
ActGripper(index,action)
:激活夹爪
- 参数
index
:夹爪编号;action
:0-复位,1-激活
- 返回
- 错误码
(2)控制夹爪
MoveGripper(index,pos,speed,force,maxtime,block)
:控制夹爪
- 参数
index
:夹爪编号;pos
:位置百分比,范围[0~100];speed
:速度百分比,范围[0~100];force
:力矩百分比,范围[0~100];maxtime
:最大等待时间,范围[0~30000],单位[ms];block
:0-阻塞,1-非阻塞。
- 返回
- 错误码
(3)获取夹爪运动状态
GetGripperMotionDone()
:获取夹爪运动状态
- 参数
- 返回
- 错误码
[fault,status]
:fault(0-无错误,1-有错误),status(0-运动未完成,1-运动完成)
1 | from fairino import Robot |
三、大寰 AG95 夹爪使用
3.1 RS385 控制接口
3.1.1 RS485 默认配置
参数 | 默认 |
---|---|
夹爪ID | 1 |
波特率 | 115200 |
数据位 | 8 |
停止位 | 1 |
校验位 | 无 |
3.1.2 命令格式
以初始化指令 01 06 01 00 00 01 49 F6
为例:
地址码 | 功能码 | 寄存器地址 | 寄存器数据 | CRC 校验码 |
---|---|---|---|---|
01 | 06 | 01 00 | 00 01 | 49 F6 |
- 地址码:表示夹爪的ID 号,默认是 1;
- 功能码:描述读写操作,03(读取寄存器),06(写入寄存器);
- 寄存器地址:夹爪功能对应地址;
- 寄存器数据:写入数据到具体的寄存器地址;
- CRC 校验码:根据前面的数据进行转换,参考 http://www.ip33.com/crc.html
3.1.3 初始化夹爪
初始化:
01 06 01 00 00 01 49 F6
:回零位(运行到张开极限位置)
01 06 01 00 00 A5 48 4D
:重新标定+回零点(先关闭夹爪,再打开夹爪,记录总行程标定)
含义:
01
:夹爪编号06
:写入寄存器01 00
:夹爪初始化寄存器00 01
/00 A5
:初始化指令49 F6
/48 4D
:校验码
初始化状态反馈:获取是否进行了初始化
发送:01 03 02 00 00 01 85 B2
01
:夹爪编号03
:读取寄存器02 00
:初始化状态反馈寄存器00 01
:初始化状态反馈指令85 B2
:校验码
返回:01 03 02 00 00 B8 44
00 00
:未初始化,如果是 1 则初始化成功,如果是 2 则初始化中。
3.1.3 夹爪位置控制
设置位置:设置夹爪位置,可以写入 0-1000,代表开合程度百分比,对应 16 进制为 00 00 - 03 E8
01 06 01 03 01 F4 78 21
:设置夹爪位置 500。
01
:夹爪编号06
:写入寄存器01 03
:夹爪位置寄存器01 F4
:设置夹爪位置为 50078 21
:校验码
读取设定位置:读取设置的位置
发送:01 03 01 03 00 01 75 F6
01
:夹爪编号03
:读取寄存器01 03
:夹爪位置寄存器00 01
:读取设定位置指令75 F6
:校验码
返回:01 03 02 xx xx crc1 crc2
xx xx
:16 进制夹爪位置,对应 0-1000 夹爪开合程度百分比
读取实时位置:读取夹爪实时位置
发送:01 03 02 02 00 01 24 72
01
:夹爪编号03
:读取寄存器02 02
:夹爪实时位置寄存器00 01
:读取实时位置指令24 72
:校验码
返回:01 03 02 xx xx crc1 crc2
xx xx
:16 进制夹爪位置,对应 0-1000 夹爪开合程度百分比
3.1.4 夹爪状态反馈
获取夹爪运动状态:读取目前夹爪的状态
发送:01 03 02 01 00 01 D4 72
01
:夹爪编号03
:读取寄存器02 01
:夹爪状态寄存器00 01
:读取夹爪状态指令24 72
:校验码
返回:01 03 02 00 02 39 85
00 02
:代表夹住物体
00:夹爪处于正在运动状态。
01:夹爪停止运动,且夹爪未检测到夹到物体。
02:夹爪停止运动,且夹爪检测到夹到物体。
03:夹爪检测到夹住物体后,发现物体掉落。
3.2 Ubuntu 控制夹爪
3.2.1 连接夹爪
(1)查看夹爪串口
命令行输入 ls -l /dev/ttyUSB*
,此时如果没有插入其它 usb 设备,则看不到输出
将 RS485 转 USB 连接至电脑,重新执行 ls -l /dev/ttyUSB*
命令,可以看到多出了一个 /dev/ttyUSB0
,该设备即为夹爪的串口。
(2)固定 ttyUSB 编号
首先命令行输入 lsusb
查看设备 ID,可以拔插一次观察多出来的那一行就是夹爪设备,例如我的设备 ID 是 0403:6001
,分别代表 idVendor:idProduct
1 | Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC |
然后创建并编辑配置文件:sudo vim /etc/udev/rules.d/usb.rules
,输入以下内容:
1 | KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0777", SYMLINK+="dh_gripper" |
其中
KERNEL
:不修改ATTRS{idVendor}
:填写 ID 冒号前的部分ATTRS{idProduct}
:填写 ID 冒号后的部分MODE
:默认设置为 0777 即可,可读可写可执行SYMLINK
:自定义,也就是想要将 ttyUSB0 改成什么一个固定的名字
重启 udev
:
1 | service udev reload |
重新插拔设备,然后 ls /dev/
,就可以看到自己设置的端口名出现。
3.2.2 Python 串口控制
(1)安装依赖
1 | pip install pyserial |