具体的驱动的详细介绍请参考:
universal_robot_ros_wiki
ur_robot_driver
ur_robot_driver_doc
下面我们将会使用ROS和ur_robot_driver来驱动真机UR臂。
source /opt/ros/$ROS_DISTRO/setup.bash
mkdir -p ur_ws/src && cd ur_ws
git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
git clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robot
sudo apt update -qq
rosdep update
rosdep install --from-paths src --ignore-src -y
catkin_make
source devel/setup.bash
如果执行rosdep init 和 rosdep install
失败,请参考ROS -sudo rosdep init 失败解决方法
为了工作空间之间不相互干扰,推荐每次手动source setup.bash
,如果只有一个工作空间,也可以直接写在bashrc
里面。
将Universal_Robots_ROS_Driver/ur_robot_driver/resources
路径下的externalcontrol.urcap
文件拷贝到U盘安装到示教器上。
安装完成后,按以下步骤操作:
设置完成后返回
静止在这个页面不要动.
使用externalcontrol,要求使用静态IP,并且指定了IP段,而且因为笔者电脑有两个有线网卡,所以我们选择网线直线,印象中通过路由器分配静态IP不是那么直接。
使用网线直线电脑和UR的控制柜。
第二步已经将示教器配置好,下面来配置Ubuntu。
ifconfig
可以看到enp2s0
正是连接控制柜的网卡。在没配置之前,这个没有inet addr
属性,所以一看便知。
sudo vi /etc/network/interfaces
添加如图所示的代码。因为示教器上的externalcontrol显示要设置成这个指定的IP。网关和子网掩码可按上图设置。网管必须和IP在同一网段,即最后一位的数字可以不一样,且范围为[0,255]。指定静态IP时必须指定dns server,否则连接互联网的网卡有可能无法解析DNS。
这里虽然设置的是8.8.8.8
,但是实际的dns server地址并不是8.8.8.8,而是由ubuntu内置的networkmanager
程序dnsmasq
程序接管,由它来分配dns server。
执行
sudo vi /etc/resolv.conf
可以看到分配的nameserver为
这个是本地dns的回环地址,由dnsmasq来分配,具体参考nameserver 127.0.1.1 & 如何设置nameserver。
如果没有,执行
sudo vi /etc/NetworkManager/NetworkManager.conf
sudo /etc/init.d/networking restart
如果还是没有显示连接,重启
。
roslaunch ur_calibration calibration_correction.launch robot_ip:=192.168.56.2 target_filename:="${HOME}/my_robot_calibration.yaml"
roslaunch ur_robot_driver ur3_bringup.launch robot_ip:=192.168.56.2 kinematics_config:=${HOME}/my_robot_calibration.yaml
上条指令ur3换成自己的机械臂类型。
当终端显示Robot ready to receive control commands.
时,
rosrun rqt_joint_trajectory_controller rqt_joint_trajectory_controller
这时候就可以在rqt中拖动滑块来控制机械臂每个关节的转角。
具体参考ur_robot_driver