机械臂运动分为关节空间运动和笛卡尔空间运动2种方式,2种运动方式分别对应机械臂运动学算法的正解和逆解,在不同的应用场景下可以使用不同的运动方式。
两种运动方式之间的不同可总结为以下几点:
①表示方式不同。关节空间运动发给机械臂的是机械臂各个关节的角度,从而控制机械臂运动到某个位置;笛卡尔空间运动发给机械臂的是在笛卡尔空间种机械臂末端的位置和姿态(简称为位姿),目前大多数机械臂用来表达位姿使用(x,y,z,rx,ry,rz),其中姿态表达为欧拉角;
②控制方式不同。在关节空间中,通过控制各个关节的角度实现控制机械臂运动;在笛卡尔空间中,通过控制机械臂末端的位置和姿态实现控制机械臂运动;
③运动规划不同。关节空间运动规划是对每个关节进行规划,计算每个关节的插补点;笛卡尔空间运动规划是在笛卡尔空间规划末端轨迹,然后每个插补点再去逆解,计算对应的每个关节的角度。
⑤控制自由度不同。使用笛卡尔空间运动时,机械臂可以由N个自由度组成,只需确保机械臂的末端到达所发位姿即可;关节空间运动时,需要根据机械臂的实际自由度发送相对应数量的关节角度;
睿尔曼六轴机械臂关节运动可使用机械臂示教器、JSON协议、API等多种方式进行控制。
1.1示教器关节空间运动控制
登录示教器进入首页,可在WEB示教器示教界面通过长按各个关节的正负按钮,可实现对单个关节进行控制;
①在位姿编辑界面可通过拖动仿真机械臂可找到红色虚体机械臂通过长按红色虚体机械臂可将虚体机械臂摆放为随机姿态。
②将红色虚体机械臂拖动到位之后,在位姿编辑界面处,长按下方“应用”按钮可控制真实机械臂运动至红色虚拟机械臂位置处。单击“还原按钮”可使红色虚拟机械臂复位至实体仿真机械臂,此处“应用”按钮运行方法为关节空间运动,即MOVEJ;
1.2. JSON协议关节空间运动控制
功能描述 | MoveJ:关节运动 |
参数说明 | movej:关节运动 joint:目标关节角度,精度0.001° v:速度百分比例系数,0~100 r:交融半径,精度0.001m,暂不支持交融,默认0 |
命令格式 | 六自由度:{s:s,s:[i,i,i,i,i,i],s:i,s:i} ,七自由度:{s:s,s:[i,i,i,i,i,i,i],s:i,s:i} |
示例 | 六自由度: {"command":"movej","joint":[10100,200,20300,30400,500,20600],"v":50,"r":0} 七自由度: {"command":"movej","joint":[10100,200,20300,30400,500,20600,20600],"v":50,"r":0} |
说明:关节运动,六自由度关节角度[10.1°,0.2°,20.3°,30.4°,0.5°,20.6°],七自由度关节角度[10.1°,0.2°,20.3°,30.4°,0.5°,20.6°,20.6°],速度系数50%,交融半径:0 | |
返回值 | 格式:{s:s,s:b,s:i},true-到达目标位置,false-规划失败;0:机械臂运动轨迹到位 |
{"state":"current_trajectory_state","trajectory_state":true,"device":0} |
上面是机械臂JSON协议文档手册中关于MOVEJ运动的指令,如仅需发送一条JSON指令,那么就需要使用“TCP测试工具”(此工具可自行下载或联系厂家工作工作人员索取)进行使用,下面是使用“TCP测试工具”发送指令的详细步骤(进行此操作前提为上位机通过网线连接至机械臂并可通信):
①打开“TCP测试工具”(以下内容使用“工具”简称),进行连接机械臂TCP服务端操作。打开软件,点击软件左上方创建连接。此时会弹出设置参数窗口,分别对连接类型、目标IP、目标端口、本机端口进行设置,具体设置参考下图。
②创建连接成功之后会进入操作界面,此时需首先点击连接按钮,连接成功之后即可进行指令的发送。
③通过上一步骤连接至机械臂的服务器之后,即可进行指令的发送。此时我们可以发送本小节开头的MOVEJ运动指令,在发送指令之前需确保机械臂附近没有可妨碍机械臂运动的障碍物,指令如下所示:
{"command":"movej","joint":[0,0,0,0,0,0],"v":20,"r":0}
上述指令含义为机械臂各关节运行至零位,运行速度为百分之20,交融半径为0。
④将指令复制粘贴至软件发送区,并点击“发送”按钮。此时机械臂开始运动,运动结束后接收区将收到以下返回值。
{"device":0,"state":"current_trajectory_state","trajectory_state":true}
2.2 六轴机械臂笛卡尔运动规划
笛卡尔空间运动在机械臂中的运动指令有三种,分别是MOVEL、MOVEC、MOVEJ_P;
- MOVEL指令:在保证最终路点位置的同时,保证两点之间轨迹为直线运动。
- MOVEC指令:用来执行圆弧或圆形轨迹,只能添加两个路点(中间点和终点)。
- MOVEJ_P指令:只保证最终路点位置,不对中间轨迹进行约束,但发送给机械臂的是机械臂末端在坐标系中的位姿(发送的值不同于MOVEJ,MOVEJ发的是各关节角度)。
MOVEJ_P的运动轨迹 | MOVEL的运动轨迹 | MOVEC的运动轨迹 |
睿尔曼六轴机械臂笛卡尔运动可使用机械臂示教器、JSON协议、API等多种方式进行控制,此处需要注意机械臂的笛卡尔空间运动中,有奇异区域的概念,如果将奇异区域中的点位发送给机械臂,那么机械臂将不会运动,切会返回“不可达”的信息;
进行笛卡尔运动之前需先给机械臂发送MOVEJ指令使机械臂先从零位姿态运动至非奇异区域,如下图所示姿态
{"command":"movej","joint":[0,0,90000,0,90000,0],"v":20,"r":0}
2.2.1示教器笛卡尔空间运动控制
在示教器的首页通过示教界面,长按“位置控制”和“姿态控制”两个区域内的按钮,此时机械臂的运行速度不宜过快,建议设置百分之20。
2.2.2 JSON协议笛卡尔空间运动控制
MOVEL:直线运动
功能描述 | MoveL:直线运动 |
参数说明 | movel:直线运动 pose:目标位姿,位置精度:0.001mm,姿态精度:0.001rad v:速度百分比例系数,0~100 r:交融半径,精度0.001m,暂不支持交融,默认0 |
命令格式 | {s:s,s:[i,i,i,i,i,i],s:i,s:i} |
示例 | {"command":"movel","pose":[100000,200000,30000,400,500,600],"v":50,"r":0} |
说明:直线运动, 目标位置:x:0.1m,y:0.2m,z:0.03m 目标姿态:rx:0.4rad,ry:0.5rad,rz:0.6rad 速度系数50%, 不交融 | |
返回值 | 格式:{s:s,s:b,s:i},true-到达目标位置,false-规划失败;0:机械臂运动轨迹到位 |
{"state":"current_trajectory_state","trajectory_state":true,"device":0} | |
备注: | MOVL指令也适用于目标位置不变,姿态变化 |
MoveJ_P:关节空间规划到目标位姿
功能描述 | MoveJ_P:关节空间规划到目标位姿 |
参数说明 | movej_p:关节空间规划到目标位姿 pose:目标位姿,位置精度:0.001mm,姿态精度:0.001rad v:速度百分比例系数,0~100 r:交融半径,精度0.001m,暂不支持交融,默认0 |
命令格式 | {s:s,s:[i,i,i,i,i,i],s:i,s:i} |
示例 | {"command":"movej_p","pose":[100000,200000,30000,400,500,600],"v":50,"r":0} |
说明:直线运动, 目标位置:x:0.1m,y:0.2m,z:0.03m 目标姿态:rx:0.4rad,ry:0.5rad,rz:0.6rad 速度系数50%, 不交融 | |
返回值 | 格式:{s:s,s:b,s:i},true-到达目标位置,false-规划失败;0:机械臂运动轨迹到位 |
{"state":"current_trajectory_state","trajectory_state":true,"device":0} | |
备注: | 目标位姿必须是机械臂当前工具坐标系相对于当前工作坐标系的位姿,用户在使用该指令前务必确保,否则目标位姿会出错! |
MOVEC:圆弧运动
功能描述 | MoveC:圆弧运动 |
参数说明 | movec:圆弧运动 pose:位姿 pose_via:中间点位姿,位置精度0.001mm,姿态精度0.001rad pose_to:目标位姿,位置精度0.001mm,姿态精度0.001rad v:速度百分比例系数,0~100 r:交融半径,暂不支持轨迹交融,默认0 loop:循环圈数,默认0 |
命令格式 | {s:s,s:{s:[i,i,i,i,i,i],s:[i,i,i,i,i,i]},s:i,s:i,s:i} |
示例 | {"command":"movec","pose":{"pose_via":[100000,200000,30000,400,500,600],"pose_to":[200000,300000,30000,400,500,600]},"v":50,"r":0,"loop":0} |
说明:圆弧运动, 中间点位置:x:0.1m,y:0.2m,z:0.03m 中间点姿态:rx:0.4rad,ry:0.5rad,rz:0.6rad 终点位置:x:0.2m,y:0.3m,z:0.03m 终点姿态:rx:0.4rad,ry:0.5rad,rz:0.6rad 速度系数50%, 不交融 不循环 | |
返回值 | 格式:{s:s,s:b,s:i},true-到达目标位置,false-规划失败;0:机械臂运动轨迹到位 |
{"state":"current_trajectory_state","trajectory_state":true,"device":0 |
MOVEL的使用
上面是机械臂JSON协议文档手册中关于MOVEL运动的指令,如仅需发送一条JSON指令,那么就需要使用“TCP测试工具”(此工具可自行下载或联系厂家工作工作人员索取)进行使用,下面是使用“TCP测试工具”发送指令的详细步骤(进行此操作前提为上位机通过网线连接至机械臂并可通信):
①打开“TCP测试工具”(以下内容使用“工具”简称),进行连接机械臂TCP服务端操作。打开软件,点击软件左上方创建连接。此时会弹出设置参数窗口,分别对连接类型、目标IP、目标端口、本机端口进行设置,具体设置参考下图。
②创建连接成功之后会进入操作界面,此时需首先点击连接按钮,连接成功之后即可进行指令的发送。
③通过上一步骤连接至机械臂的服务器之后,即可进行指令的发送。此时我们可以发送MOVEL运动指令,在发送指令之前需确保机械臂附近没有可妨碍机械臂运动的障碍物,指令如下所示:
{"command":"movel","pose":[-209962,0,104844,3141,0,0],"v":50,"r":0}
上述指令含义为机械臂运动至笛卡尔空间的一个点,且运行轨迹为直线,运行速度为百分之50,交融半径为0。
④将指令复制粘贴至软件发送区,并点击“发送”按钮。此时机械臂开始运动,运动结束后接收区将收到以下返回值。
{"device":0,"state":"current_trajectory_state","trajectory_state":true}
MOVEJ_P的使用
①使用工具软件连接至机械臂的服务器之后,即可进行指令的发送。此时我们可以发送MOVEJ_P运动指令,在发送指令之前需确保机械臂附近没有可妨碍机械臂运动的障碍物,指令如下所示(发送以下指令之前需要先发送movej指令,即机械臂运行至准备姿态:
{"command":"movej","joint":[0,0,90000,0,90000,0],"v":20,"r":0})
{"command":"movej_p","pose":[-209962,0,104844,3141,0,0],"v":50,"r":0}
上述指令含义为机械臂运动至笛卡尔空间的一个点,运行轨迹不可控,运行速度为百分之50,交融半径为0。
②将指令复制粘贴至软件发送区,并点击“发送”按钮。此时机械臂开始运动,运动结束后接收区将收到以下返回值。
MOVEC的使用
①使用工具软件连接至机械臂的服务器之后,即可进行指令的发送。此时我们可以发送MOVEC运动指令,在发送指令之前需确保机械臂附近没有可妨碍机械臂运动的障碍物,指令如下所示(发送以下指令之前需要先发送上movej指令,即机械臂运行至准备姿态:
{"command":"movej","joint":[0,0,90000,0,90000,0],"v":20,"r":0})
{"command":"movec","pose":{"pose_via":[-245825,-27684,352523,3141,0,0],"pose_to":[-182843,-115699,352475,3141,0,0]},"v":50,"r":0,"loop":1}
上述指令含义为机械臂运动按照圆弧运动,且运行1个循环。
②将指令复制粘贴至软件发送区,并点击“发送”按钮。此时机械臂开始运动,运动结束后接收区将收到以下返回值。