下一篇:用Socket套接字通过TCP/IP以太网实现虚拟机Ubuntu中ROS与Windows10中ABB RobotStudio的协同工作
ABB Robot Studio可以非常轻松地建立ABB机械臂仿真环境,并且Rapid代码可以直接( 只是理论上的)导入到ABB机械臂控制器,控制实际的机械臂 。而ROS系统则有着丰富的智能控制接口,可以让机械臂的程序设计变得异常简单(难度集中在建立连接还有通信部分了)。为了让ABB Robot Studio能够调用ROS机器人操作系统中的功能,让两者优势互补,就需要实现两者间的通信(敲黑板)。
实际应用中,只需要一台运行着Ubuntu系统的计算机通过网线接在ABB IRC5 机器人控制器的以太网接口上就行了。本文由于实验条件有限(没钱买ABB机械臂或者第二台电脑),因此所有仿真工作全部在同一台电脑上完成。
接下来让我们按步骤实现ROS与ABB Robot Studio的连接和通信。
由于运行环境同时涉及了两个操作系统和多个软件,保不准其他运行环境会出现什么奇异现象,因此这里先声明一下我实验成功的配置:
计算机配置 | |
---|---|
操作系统 | Windows10 家庭中文版 |
内存(RAM) | 16GB |
处理器 | Intel i7-8750H CPU2.20Hz |
软件 | 版本 | 系统 |
---|---|---|
VMware® Workstation 15 Pro | 15.0.4 build-12990004 | Windows10 |
ABB Robot Studio | 6.08 | Windows10 |
ROS | Melodic | Ubuntu18.04 |
VMware® Workstation 15 Pro15.0.4下载
ABB Robot Studio 6.08下载
ROS Melodic官方安装步骤
设置Windows10的静态IP地址是为了确定仿真机器人的IP地址。当使用实际机械臂时,直接通过控制器查看机械臂IP地址即可,该步骤跳过。
打开命令提示符输入
ipconfig
打开 控制面板\网络和 Internet\网络连接
由于我连的是WiFi,所以找到WLAN,右击打开WLAN属性,找到Internet协议版本4(TCP/IPv4)一项,选中后点击属性。如果你用的是网线,就找以太网,其他步骤一样。
选择“使用下面的IP地址”,因为我的计算机所属网段是192.168.3,所以IP地址框内输入一个没有被其他设备使用过的IP,如192.168.3.87;子网掩码会自动填充255.255.255.0;默认网关即路由器管理地址。DNS服务器填入8.8.8.8。
设置完后在进入命令提示符输入
ipconfig
确认静态IP地址是否设置成功。
分别在编辑虚拟机设置和Workstation-编辑-虚拟网络编辑器中完成配置
进入Ubuntu,打开终端
输入命令,查看自己网卡编号(如图中是ens33)
ip a
接下来输入命令,用VIM编辑interfaces文件。要是不会VIM,从文件夹用记事本打开是一样的。
sudo vi /etc/network/interfaces
将内容改为:
auto ens33
#把 lo改为ens33
iface ens33 inet static
#改为static
address 192.168.3.88
#IPv4地址,网段要与电脑一致(192.168.3)
#最后一位自己分配一个没被使用过的数字(这里设了88)
gateway 192.168.3.1
#网关地址(路由器地址),要与电脑一致
netmask 255.255.255.0
编辑完成后按esc,再依次按下:,w,q,!就可以保存退出了。用记事本编辑的直接保存即可。
在终端输入命令重启网络。
sudo /etc/init.d/networking restart
然后ping一下局域网内的ip试试能不能ping的通,ping通了就说明内网没问题了。
ping 192.168.3.1
sudo vi /etc/systemd/resolved.conf
删掉DNS前面的#,在后面输入电脑的DNS服务器地址8.8.8.8
重启虚拟机完成配置。
打开Ubuntu的终端,输入以下命令行:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel / setup.bash
# 切换到工作空间下的路径
cd $HOME/catkin_ws
# 如果需要最新版本的程序,可以用kinetic替换kinetic-devel
git clone -b kinetic-devel https://github.com/ros-industrial/abb.git src/abb
git clone -b kinetic-devel https://github.com/ros-industrial/abb_experimental.git src/abb_experimental
#确认安装包及其依赖包是否到位,若不到位则会自动更新
rosdep update
#如果ROS系统不是melodic,需要按情况替换
rosdep install --from-paths src/ --ignore-src --rosdistro melodic
# 用catkin_tools编译程序包
catkin build
#激活abb支持包
#如遇找不到package而roslaunch报错,也请尝试运行下面这个命令
source $HOME/catkin_ws/devel/setup.bash
此部分也可以参考ROS官网教程
a. 通过单击在安装过程中放置在桌面上的图标来打开RobotStudio。
b. 在打开的对话框中,创建一个空工作站。
c. 选择ABB库,然后选择要建模的机器人类型。
d. 产生了机器人。您可以缩放(滚轮),移动(CTRL +拖动鼠标)和旋转(CTRL + SHIFT +拖动鼠标)。
e. 选择机器人系统,然后从布局中选择…
f. 给系统起个名字,其余选项保持不变,然后按Next>。
g. 应该只有一种机制,因此只需按Next>即可。
h. 单击选项…,然后选择616-1 PC接口和623-1多任务。
i. 点击完成。
在继续进入RobotStudio之前,您需要将ROS驱动程序的RAPID文件放在创建的手臂的控制器上。
现在打开刚才放在~ \ Home \ ROS 目录下的 ROS_socket.sys并更改以下行:
IF(SocketGetStatus(server_socket)= SOCKET_CREATED)SocketBind server_socket,GetSysInfo(\ LanIp),端口;
按先前配置的Windows10静态IP地址
把“GetSysInfo(\ LanIp)”变成Windows10的静态IP地址:
IF(SocketGetStatus(server_socket)= SOCKET_CREATED)SocketBind server_socket,“ 192.168.3.87”,端口;
现在,可以在RobotStudio中安装ROS-Industrial驱动程序了:
选择选项卡控制器,然后选择示教器。
首先进入手动模式,方法是选择操纵杆左侧的按钮,然后将钥匙转到垂直位置。
Name | Type | Trust Level | Entry | Motion Task |
---|---|---|---|---|
ROS_StateServer | SEMISTATIC | NoSafety | main | NO |
ROS_MotionServer | SEMISTATIC | SysStop | main | NO |
T_ROB1 | NORMAL | main | YES |
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 |
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 |
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 |
HOME:/ROS/ROS_motionServer.mod | ROS_MotionServer | NO | NO |
HOME:/ROS/ROS_motion.mod T_ROB1 | NO | NO | NO |
最后,千万记得在防火墙中开启abb仿真控制器权限,否则是无法通讯的,即使ping通了也不行
设置运行模式为 连续
打开Robotstudio示教器,点击PP 移至Main
点击程序启动按钮
此时应该会自动弹出程序消息,waiting for connection
与此同时,程序指针应该指向
“WaitTime 0.05; ! Throttle loop while waiting for new command”
另一方面,打开虚拟机,启动Ubuntu.
打开新终端输入
roscore
再打开一个新终端,输入
$ source $HOME/catkin_ws/devel/setup.bash
然后输入,robot_ip就是设置的Windows10静态IP,如果连的是真实机械臂,那就是机械臂的IP地址
roslaunch abb_irb120_moveit_config moveit_planning_execution.launch sim:=false robot_ip:= 192.168.3.87
如果没有出现问题,示教器应该会弹出新的对话,显示connected
ABB Robot Studio与ROS的通信是用Socket套接字的方式通过以太网连接实现的。
如何在ABB Robot Studio的Rapid程序中实现socket套接字的打包、解包、消息收发,还有如何编写程序调用ROS的功能实现ABB Robot Studio与ROS协同工作?
在“用Socket套接字通过TCP/IP以太网实现虚拟机Ubuntu中ROS与Windows10中ABB Robot Studio的协同工作”一文中将继续分享。