1. 前言

frcobot_ros2为法奥协作机器人基于ROS2开发的API接口,旨在针对入门级用户更便捷的使用法奥SDK。通过参数配置文件对默认参数的配置,即可适应不同的客户要求。

2. fr_ros2

本章节说明APP运行环境如何配置。

2.1. 基本环境安装

推荐在Ubuntu22.04LTS(Jammy)上使用,系统安装完毕后,就可以安装ROS2,推荐用ros2-humble,ROS2的安装可以参考教程:https://docs.ros.org/en/humble/index.html

2.2. 编译及构建fr_ros2

1. 创建colcon工作区 fr_ros2有两个功能包组成,一个是自定义数据结构的功能包frhal_msgs,另外一个是程序主体fr_ros2功能包。在安装好基本环境后,先创建一个colcon工作区,比如:

1cd ~/
2mkdir -p ros2_ws/src

2. 编译功能包 将安装包的代码拷贝至ros2_ws/src目录下,在ros2_ws目录下运行如下命令:

1colcon build --packages-select frhal_msgs

等待上一条命令完成编译后

1colcon build --packages-select fr_ros2

3. 快速开始

3.1. 启动流程

在Ubuntu下打开命令行,输入:

1cd ros2_ws
2source install/setup.bash
3ros2 run fr_ros2 ros2_cmd_server
../_images/fr_ros2_001.png

3.2. 查看机械臂状态反馈流程

机械臂的状态反馈是通过topic发布的,用户可以通过ros2自带的命令观察到状态数据刷新,也可以编写程序获取该数据,下面展示如何通过ros2命令观察机械臂状态数据。

在ubuntu下打开命令行,输入:

1cd ros2_ws
2source install/setup.bash
3ros2 topic echo /nonrt_state_data

可以看到命令行窗口中不断刷新的状态数据,如下图所示。

../_images/fr_ros2_002.png

3.3. 下发指令流程

在ubuntu下打开命令行,输入:

1cd ros2_ws
2source install/setup.bash
3rqt

以上命令执行完毕后,会调出一个rqt GUI界面,如下图所示。

../_images/fr_ros2_003.png

在GUI界面选择plugins->serivce->serivce caller,调出如下界面,选择/FR_ROS_API_service这项,在界面expression中输入指令字符串点击call即可看到下方对话框中跳出回复信息。

../_images/fr_ros2_004.png

重要

  • 输入字符串规则说明:

程序内部对输入的字符串形式进行了筛选,函数输入的格式必须是 [函数名]() 这样的形式,且圆括号的参数字符串必须是由字母,数字,逗号还有负号组成,出现其他字符或者空格均会报错。

  • 指令反馈值说明:

除了GET指令会反馈一串字符串,其余的函数反馈值都是int型,一般0为出现错误,1为正确执行,如果出现其他的值那么参考xmlrpc SDK中定义的错误代码对应的错误。

3.4. 修改参数流程

由于简化SDK是改进自原生的SDK接口,能够简化是因为赋予了一些参数默认值,而在实际使用过程中也会遇到默认参数无法满足要求的情况,这个时候可以通过修改对应默认参数的数值,然后加载到节点中。

源代码文件中存在一个fr_ros2_para.yaml参数文件,文件中的参数为预先设置的默认参数,用于简化指令输入参数,可以根据自己的具体需要修改其中的参数,然后使用命令动态修改参数: ros2 param load FR_ROS_API_nod ~/ros2_ws/src/fr_ros2/fr_ros2_para.yaml。

4. API说明

  1/*
  2函数功能描述:存储一个关节点位信息
  3id - 存储点位id号,从1开始,注意该id与CARTPoint的点位id号各自独立
  4double j1-j6 - 6个关节位置,单位是度
  5*/
  6int JNTPoint(int id, double j1, double j2, double j3, double j4, double j5, double j6)
  7// 例子
  8JNTPoint(1,10,11,12,13,14,15)
  9
 10/*
 11函数功能描述:存储一个笛卡尔点位信息
 12id - 存储点位id号,从1开始,注意该id与JNTPoint的点位id号各自独立
 13double x,y,z,rx,ry,yz - 笛卡尔点位信息,位置单位是mm,角度单位是度
 14*/
 15int CARTPoint(int id, double x,y,z,rx,ry,rz)//存储一个笛卡尔空间点位
 16// 例子
 17CARTPoint(1,100,110,200,0,0,0)
 18
 19/*
 20函数功能描述:获取指定序号点的关节或者笛卡尔位置信息
 21string name - 'JNT'或者'CART',JNT代表获取关节点位信息,'CART'代表获取笛卡尔点位信息
 22int id - 点位id,从1开始
 23*/
 24string GET(string name, int id)//获取对应id序号点位的内容,name可以输入JNT或者CART
 25// 例子
 26GET(JNT,1)
 27
 28/*
 29函数功能描述:拖动模式开关
 30uint8_t state - 1-打开拖动模式,0-关闭拖动模式
 31*/
 32int DragTeachSwitch(uint8_t state)
 33// 例子
 34DragTeachSwitch(0)
 35
 36/*
 37函数功能描述:机械臂使能开关
 38uint8_t state - 1-机械臂使能,0-机械臂去使能
 39*/
 40int RobotEnable(uint8_t state)
 41// 例子
 42RobotEnable(1)
 43
 44/*
 45函数功能描述:模式切换
 46uint8_t state - 1-手动模式,0-自动模式
 47*/
 48int Mode(uint8_t state)
 49// 例子
 50Mode(1)
 51
 52/*
 53函数功能描述:设置当前模式下机械臂速度
 54float vel - 速度百分比,范围为1-100
 55*/
 56int SetSpeed(float vel)
 57// 例子
 58SetSpeed(10)
 59
 60/*
 61函数功能描述:设置并加载指定序号的工具坐标系
 62int id - 工具坐标系编号,范围1-15
 63float x,y,z,rx,ry,rz - 工具坐标系的偏移量信息
 64*/
 65int SetToolCoord(int id, float x,float y, float z,float rx,float ry,float rz)
 66// 例子
 67SetToolCoord(1,0,0,0,0,0,0)
 68
 69/*
 70函数功能描述:设置工具坐标系列表
 71int id - 工具坐标系编号,范围1-15
 72float x,y,z,rx,ry,rz - 工具坐标系的偏移量信息
 73*/
 74int SetToolList(int id, float x,float y, float z,float rx,float ry,float rz );
 75// 例子
 76SetToolList(1,0,0,0,0,0,0)
 77
 78/*
 79函数功能描述:设置外部工具坐标系
 80int id - 工具坐标系编号,范围1-15
 81float x,y,z,rx,ry,rz - 外部工具坐标系的偏移量信息
 82*/
 83int SetExToolCoord(int id, float x,float y, float z,float rx,float ry,float rz);
 84// 例子
 85SetExToolCoord(1,0,0,0,0,0,0)
 86
 87/*
 88函数功能描述:设置外部工具坐标系列表
 89int id - 工具坐标系编号,范围1-15
 90float x,y,z,rx,ry,rz - 外部工具坐标系的偏移量信息
 91*/
 92int SetExToolList(int id, float x,float y, float z,float rx,float ry,float rz);
 93// 例子
 94SetExToolList(1,0,0,0,0,0,0)
 95
 96/*
 97函数功能描述:设置工件坐标系
 98int id - 工件坐标系编号,范围1-15
 99float x,y,z,rx,ry,rz - 工件坐标系的偏移量信息
100*/
101int SetWObjCoord(int id, float x,float y, float z,float rx,float ry,float rz);
102// 例子
103SetWObjCoord(1,0,0,0,0,0,0)
104
105/*
106函数功能描述:设置工件坐标系列表
107int id - 工件坐标系编号,范围1-15
108float x,y,z,rx,ry,rz - 工件坐标系的偏移量信息
109*/
110int SetWObjList(int id, float x,float y, float z,float rx,float ry,float rz);
111// 例子
112SetWObjList(1,0,0,0,0,0,0)
113
114/*
115函数功能描述:设置末端负载重量
116float weight - 负载重量,单位kg
117*/
118int SetLoadWeight(float weight);
119// 例子
120SetLoadWeight(3.5)
121
122/*
123函数功能描述:设置末端负载质心坐标
124float x,y,z - 质心坐标,单位为mm
125*/
126int SetLoadCoord(float x,float y,float z);
127// 例子
128SetLoadCoord(10,20,30)
129
130/*
131函数功能描述:设置机器人安装方式
132uint8_t install - 安装方式,0-正装,1-侧装,2-倒装
133*/
134int SetRobotInstallPos(uint8_t install);
135// 例子
136SetRobotInstallPos(0)
137
138/*
139函数功能描述:设置机器人安装角度,自由安装
140double yangle - 倾斜角
141double zangle - 旋转角
142*/
143int SetRobotInstallAngle(double yangle,double zangle);
144// 例子
145SetRobotInstallAngle(90,0)
146
147
148//安全配置
149/*
150函数功能描述:设置机器人碰撞等级
151float level1-level6 - 1-6轴的碰撞等级,范围是1-10
152*/
153int SetAnticollision(float level1, float level2, float level3, float level4, float level5, folat level6);
154// 例子
155SetAnticollision(1,1,1,1,1,1)
156
157/*
158函数功能描述:设置碰撞后策略
159int strategy - 0-报错停止,1-继续运行
160*/
161int SetCollisionStrategy(int strategy);
162// 例子
163SetCollisionStrategy(1)
164
165/*
166函数功能描述:设置正限位,注意设置值必须在硬限位范围内
167float limit1-limit6 - 6个关节限位值
168*/
169int SetLimitPositive(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
170// 例子
171SetLimitPositve(100,90,90,90,90,90)
172
173/*
174函数功能描述:设置负限位,注意设置值必须在硬限位范围内
175float limit1-limit6 - 6个关节限位值
176*/
177int SetLimitNegative(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
178// 例子
179SetLimitNegative(-100,-90,-90,-90,-90,-90)
180
181/*
182函数功能描述:错误状态清除
183*/
184int ResetAllError();
185
186/*
187函数功能描述:关节摩擦力补偿开关
188uint8_t state - 0-关, 1-开
189*/
190int FrictionCompensationOnOff(uint8_t state);
191// 例子
192FrictionCompensationOnOff(1)
193
194/*
195函数功能描述:设置关节摩擦力补偿系数-正装
196float coeff1-coeff6 - 6个关节补偿系数,范围是0-1
197*/
198int SetFrictionValue_level(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
199// 例子
200SetFrictionValue_level(1,1,1,1,1,1)
201
202/*
203函数功能描述:设置关节摩擦力补偿系数-侧装
204float coeff1-coeff6 - 6个关节补偿系数,范围是0-1
205*/
206int SetFrictionValue_wall(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
207// 例子
208SetFrictionValue_wall(0.5,0.5,0.5,0.5,0.5,0.5)
209
210/*
211函数功能描述:设置关节摩擦力补偿系数-倒装
212float coeff1-coeff6 - 6个关节补偿系数,范围是0-1
213*/
214int SetFrictionValue_ceiling(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
215// 例子
216SetFrictionValue_ceiling(0.5,0.5,0.5,0.5,0.5,0.5)
217
218
219//外设控制
220/*
221函数功能描述:激活夹爪
222int index - 夹爪编号
223uint8_t act - 0-复位, 1-激活
224*/
225int ActGripper(int index,uint8_t act);
226// 例子
227ActGripper(1,1)
228
229/*
230函数功能描述:控制夹爪
231int index - 夹爪编号
232int pos - 位置百分比,范围0-100
233*/
234int MoveGripper(int index,int pos);
235// 例子
236MoveGripper(1,10)
237
238
239//IO控制
240/*
241函数功能描述:设置控制箱数字量输出
242int id - io编号,范围0-15
243uint_t status - 0-关, 1-开
244*/
245int SetDO(int id,uint8_t status);
246// 例子
247SetDO(1,1)
248
249/*
250函数功能描述:设置工具数字量输出
251int id - io编号,范围0-1
252uint_t status - 0-关, 1-开
253*/
254int SetToolDO(int id,uint8_t status);
255// 例子
256SetToolDO(0,1)
257
258/*
259函数功能描述:设置控制箱模拟量输出
260int id - io编号,范围0-1
261float vlaue - 电流或者电压值百分比,范围0-100
262*/
263int SetAO(int id,float value);
264// 例子
265SetAO(1,100)
266
267/*
268函数功能描述:设置工具模拟量输出
269int id - io编号,范围0
270float vlaue - 电流或者电压值百分比,范围0-100
271*/
272int SetToolAO(int id,float value);
273// 例子
274SetToolAO(0,100)
275
276
277//运动指令
278/*
279函数功能描述:机器人点动
280uint8_t ref - 0-关节点动, 2-基坐标系下点动, 4-工具坐标系下点动, 8-工件坐标系下点动
281uint8_t nb - 1-关节1(或x轴),2-关节2(或y轴),3-关节3(或z轴),4-关节4(或绕x轴旋转),5-关节5(或绕y轴旋转),6-关节6(或绕z轴旋转)
282uint8_t dir - 0-负方向, 1-正方向
283float vel - 速度百分比, 范围为0-100
284*/
285int StartJOG(uint8_t ref, uin8_t nb, uint8_t dir, float vel);
286// 例子
287StartJOG(1,1,1,10)
288
289/*
290函数功能描述:机器人点动停止
291uint8_t ref - 0-关节点动停止, 2-基坐标系下点动停止, 4-工具坐标系下点动停止, 8-工件坐标系下点动停止
292*/
293int StopJOG(uint8_t ref);
294// 例子
295StopJOG(1)
296
297/*
298函数功能描述:机器人点动立即停止
299*/
300int ImmStopJOG();
301
302/*
303函数功能描述:关节空间运动
304string point_name - 预存点位名称,比如JNT1就是关节点位信息序号为1的点位,CART1就是笛卡尔点位信息序号为1的点位,MoveJ指令支持输入关节点位或者笛卡尔点位。需要注意的,MoveJ指令由于默认参数中有指定工具坐标系和工件坐标系,当这两个坐标系序号与当前加载的不一致时,该指令会导致报错,需要在默认参数中修改坐标系参数并load参数后再运行该运动指令。
305float vel - 指令速度百分比,范围0-100
306*/
307int MoveJ(string point_name, float vel);//point_name是输入预存点位信息,
308// 例子
309MoveJ(JNT1,10)
310
311/*
312函数功能描述:笛卡尔空间直线运动
313string point_name - 预存点位名称,比如JNT1就是关节点位信息序号为1的点位,CART1就是笛卡尔点位信息序号为1的点位,MoveL指令支持输入关节点位或者笛卡尔点位。需要注意的,MoveL指令由于默认参数中有指定工具坐标系和工件坐标系,当这两个坐标系序号与当前加载的不一致时,该指令会导致报错,需要在默认参数中修改坐标系参数并load参数后再运行该运动指令。
314float vel - 指令速度百分比,范围0-100
315*/
316int MoveL(string point_name,float vel);
317// 例子
318MoveL(CART1,10)
319
320/*
321函数功能描述:笛卡尔空间圆弧运动
322string point1_name point2_name - 预存点位名称,比如JNT1就是关节点位信息序号为1的点位,CART1就是笛卡尔点位信息序号为1的点位,MoveC指令支持输入关节点位或者笛卡尔点位,但是两个点位必须同类型的,即不支持第一个点位输入关节空间点位,第二个点位输入笛卡尔点位。需要注意的,MoveC指令由于默认参数中有指定工具坐标系和工件坐标系,当这两个坐标系序号与当前加载的不一致时,该指令会导致报错,需要在默认参数中修改坐标系参数并load参数后再运行该运动指令。
323float vel - 指令速度百分比,范围0-100
324*/
325int MoveC(string point1_name,string point2_name, float vel);
326// 例子
327MoveC(JNT1,JNT2,10)
328
329/*
330函数功能描述:样条运动开始
331*/
332int SplineStart();
333
334/*
335函数功能描述:关节空间样条运动,该指令只支持输入JNT1这样的关节数据,输入笛卡尔点位会报错
336string point_name - 预存点位名称,比如JNT1就是关节点位信息序号为1的点位。
337float vel - 速度百分比,范围0-100
338*/
339int SplinePTP(string point_name, float vel);
340// 例子
341SplinePTP(JNT2,10)
342
343/*
344函数功能描述:样条运动结束
345*/
346int SplineEnd();
347
348/*
349函数功能描述:笛卡尔空间样条运动开始
350uint8_t ctlpoint - 0-轨迹经过路径点, 1-轨迹不经过控制点,至少4个点
351*/
352int NewSplineStart(uint8_t ctlpoint);
353// 例子
354NewSplineStrart(1)
355
356/*
357函数功能描述:笛卡尔空间样条运动,只能输入CART1这样的笛卡尔空间点位,输入关节空间点位会报错
358string point_name - 预存点位名称,比如CART1就是笛卡尔空间点位信息序号为1的点位。
359float vel - 速度百分比,范围0-100
360int lastflag - 0-不是最后一个点, 1-是最后一个点
361*/
362int NewSplinePoint(string point_name, float vel, int lastflag);
363// 例子
364NewSplinePoint(JNT2,20,0)
365
366/*
367函数功能描述:笛卡尔空间样条运动结束
368*/
369int NewSplineEnd();
370
371/*
372函数功能描述:停止运动
373*/
374int StopMotion();
375
376/*
377函数功能描述:点位整体偏移开始
378int flag - 0-基坐标系下/工件坐标系下偏移, 2-工具坐标系下偏移
379double x,y,z,rx,ry,rz - 偏移位姿量
380*/
381int PointsOffsetEnable(int flag,double x,double y,double z,double rx,double ry,double rz);
382// 例子
383PointsOffsetEnable(1,10,10,10,0,0,0)
384
385/*
386函数功能描述:点位整体偏移结束
387*/
388int PointsOffsetDisable();