1.前言
本教程是以仿真ABB1600机器人为机器人主体来实现ROS的连接和使用的。
仿真实验条件
1.一台路由器或交换机
2.一台电脑windows系统
3.一台电脑Ubuntu系统
2. 使用Robostudio创建虚拟机器人(实体机器人请忽略)
2.1创建机器人
step1: 打开Robostudio,文件->新建->空工作站解决方案,如下图,完成设置以后点击创建。
step2: 基本->机器人模型库,选择机器人1600
step3: 点击确定
step4: 将机器人成功导入
2.2虚拟控制柜
step1: 基本->机器人系统->新建系统
step2: 如下图所示,选择RoboWare版本号和机器人的型号,并勾选自定义选项,然后点击确定。
step3: 系统会跳转到这个界面。
step4: 这里我们要选择两个选项的开通,点击Communication 616-1 PC Interface 和 Engineering Tools 623-1 Multitasking
step5: 下面就是我们默认开通的选项:语言可以在第一项改成中文的。
step6: 完成以上设置以后点击确定即可,等待roboStudio完成控制柜的创建。
创建完成以后就可以看见控制器里面有了一些数据参数。
step7: 在Home文件夹创建一个ROS文件夹
**step8:**这里需要在windows端的防火墙中开启robostudio的权限。
2.3 复制文件到机器人虚拟控制柜
**step1:**从github上下载的机器人文件,找到abb_driver/rapid文件夹,将rapid目录中的文件夹复制到机器人控制器中。蓝奏云下载
需要复制的文件如下,及其功能为:
ROS_common.sys 所有文件共享的全局变量和数据类型
ROS_socket.sys 套接字处理和simple_message实现
ROS_messages.sys 特定消息类型的实现
ROS_stateServer.mod 广播关节位置和状态数据
ROS_motionServer.mod 接收机器人运动命令
ROS_motion.mod 向机器人发出运动指令
将这6个文件复制到上文建立的ROS文件夹中去。
**step2:**打开ROS_socket.sys并更改以下行:
IF (SocketGetStatus(server_socket) = SOCKET_CREATED) SocketBind server_socket, GetSysInfo(\LanIp), port;
将GetSysInfo(\LanIp)替换成你的电脑IP地址,我电脑在路由器中的IP地址是192.168.1.101,IP地址要用英文的双引号。即替换成
查看电脑的IP地址
IF (SocketGetStatus(server_socket) = SOCKET_CREATED) SocketBind server_socket, “192.168.1.101”, port;
2.4创建任务
打开RoboStudio创建的虚拟机器人
打开配置->Controller->Task,创建新的Task,创建的明细如图,不分先后顺序。
Name | Type | Trust Level | Entry | Motion Task |
ROS_StateServer | SEMISTATIC | NoSafety | main | NO |
ROS_MotionServer | SEMISTATIC | SysStop | main | NO |
T_ROB1 | NORMAL | main | YES |
如下图所示:
注意:
1.T_ROB1运动任务可能已经存在于您的控制器上。
2.如果T_ROB1有现有的运动控制模块,您可能需要将 ROS_Motion.mod 中的main()例程重命名为ROS_main ()。在这种情况下,将T_ROB1任务的入口点设置为ROS_main()。
3.对于多机器人控制器,为每个任务指定所需的机器人(例如rob1 )
4.SEMISTATIC任务将在控制器启动时自动启动。它们是可见的,但不容易看到以进行故障排除。出于调试或开发目的,可能需要将两个ROS_*Server任务都设置为Type=NORMAL。
2.5创建信号输入输出
打开控制器→配置→ I/O System → Signal,然后右键单击新建 Signal
Name | Type of Signal |
signalExecutionError | Digital Output |
signalMotionPossible | Digital Output |
signalMotorOn | Digital Output |
signalRobotActive | Digital Output |
signalRobotEStop | Digital Output |
signalRobotNotMoving | Digital Output |
signalRosMotionTaskExecuting | Digital Output |
创建完成后,如图所示:
2.6将信号连接到系统输出
打开控制器→配置→ I/O System →System Output,然后右键单击 新建System Output
Signal Name | Status | Arg 1 | Arg 2 | Arg 3 | Arg 4 |
signalExecutionError | Execution Error | N/A | T_ROB1 | N/A | N/A |
signalMotionPossible | Runchain OK | N/A | N/A | N/A | N/A |
signalMotorOn | Motors On State | N/A | N/A | N/A | N/A |
signalRobotActive | Mechanical Unit Active | ROB_1 | N/A | N/A | N/A |
signalRobotEStop | Emergency Stop | N/A | N/A | N/A | N/A |
signalRobotNotMoving | Mechanical Unit Not Moving | ROB_1 | N/A | N/A | N/A |
signalRosMotionTaskExecuting | Task Executing | N/A | T_ROB1 | N/A | N/A |
创建后的如图所示:
2.7 把模块配置到任务
打开控制器→配置→Controller → Automatic Loading of Modules,然后右键单击新建 Automatic Loading of Modules
File | Task | Installed | All Tasks | Hidden |
HOME:/ROS/ROS_common.sys | NO | YES | NO | |
HOME:/ROS/ROS_socket.sys | NO | YES | NO | |
HOME:/ROS/ROS_messages.sys | NO | YES | NO | |
HOME:/ROS/ROS_stateServer.mod | ROS_StateServer | NO | NO | NO |
HOME:/ROS/ROS_motionServer.mod | ROS_MotionServer | NO | NO | NO |
HOME:/ROS/ROS_motion.mod | T_ROB1 | NO | NO | NO |
更改后如图所示:
2.8一些其他的细节配置
step1 在RAPID中把运行模式改成连续,这样程序模块可以连续循环执行。
step2 机器人手动和自动的选择,配置完成以后选择自动还是手动启动。
手动配置
自动配置:
step3 选择完成以后,重新启动控制器并应用更改。
使用P-Start重新启动控制器
ABB →重新启动→高级→ P-Start →确定
2.9ABB内部启动ROS连接程序
step1: 启动完成以后,打开示教器,可以看到是这样的:
下面的操作时把T_ROB1启动起来。step2: 点击示教器->程序编辑器
step3: 调试->PP移至Main->启动程序按键
step4: 启动成功以后三个任务都启动了,就可以等待ROS连接ABB仿真机器人了。
这里可以查看输出消息的日志。
step5: 这里建议修改一下机器人的关节速度。
到这里就已经可以等待ROS系统的连接了。