ROS 从安装到机械臂的仿真与实验

前言

刚刚结束在沈阳自动化研究所的实习,实习内容是实现机械臂的轨迹规划和仿真,使用的机械臂有UR5和Panda。沈自所的机器人实力确实很强,忙活了一个假期也只是学到了一点皮毛。这篇博客也算是一个实习的记录,将我在学习ROS过程中学到的知识和遇到的坑都记录下来,也希望能为其他还在ROS里挣扎的同学们提供一些帮助。鄙人不才,这篇博客顶多算是抛砖引玉。
本文将详细的介绍ROS,从安装到仿真再到实验。因为内容较多,可能一次无法写完,会持续补充。

1. Ubuntu+ROS系统的搭建

现在ROS可以同时运行在Windows环境和Linux环境下,但是Linux环境下还是相对稳定一些,而且也更适合于程序员开发。安装Linux操作环境可以选择用虚拟机或者直接双系统(如果想要与真实的机械臂相连,不能使用虚拟机,如果一定要使用虚拟机需要打上实时补丁),在这里我选择用虚拟机来做轨迹规划仿真,用另一台装有Linux系统的电脑来做后面的真机实验。VMware是市面上目前比较主流的虚拟机工作平台,在这里我们使用它创建虚拟机。Ubuntu 16.04是目前和ROS Kinetic版本兼容度最高的,鉴于我们之后会使用ROS Kinetic版本(因为这是比较稳定而且较新的版本),我们在虚拟机中安装Ubuntu 16.04版本。

a) 在VMware虚拟机中安装Ubuntu 16.04;

  1. 下载并安装VMware v12.1.0,下载Ubuntu 16.04镜像文件

  2. 运行VMware v12.1.0,创建新的虚拟机,遵循下面这个网页教程,可以完成后续安装,这里就不再赘述。(https://www.jianshu.com/p/3379892948da)

  3. 再安装好虚拟机和Ubuntu 16.04之后,我们重启虚拟机,往往会出现屏幕尺寸太小的情况。有以下两种方法可以解决:

    1. 第一种方法,在终端输入xrandr,并执行,输入我们需要设置的分辨率,xrandr -s 1920x1440,然后执行。
    2. 第二种方法,直接打开虚拟机的设置,更改屏幕分辨率再应用

b) 在Ubuntu16.04LTS 中安装ROS(版本Kinetic):

  1. 在控制台中输入命令:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

  2. 再输入命令:sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

  3. 开始正式的安装,安装豪华至尊版ROS:sudo apt-get update

  4. 前几步一般不会有太大问题,安装完成后可以查看使用的包:apt-cache search ros-kinetic

  5. 到此,还没有结束,需要初始化:sudo rosdep init

  6. rosdep update(这一命令会把所有相关的依赖项都升级到最新版)
    (如果出现无法运行rosdep的情况,用rospack find rosdep检查rospack是否安装,用sudo apt install rospack-tools命令安装,但要注意的是,出现这种情况很有可能第2步执行安装命令出错,应该重新执行第2步)

  7. 配置环境变量:echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    (注意:kinetic的k是小写,如果出现“没有找到文件”的错误,可以通过gedit .bashrc来查看最后一行的source文件是否是小写k, 这里非常坑,很多教程都写错了)

  8. source ~/.bashrc

  9. 此时,就完成了安装,可以测试一下:在命令行终端中输入roscore并运行。
    此时如果出现:
    这是roscore正确运行的样子
    那么恭喜你,ROS成功安装上了

  10. 我们可以跑一个测试程序—小海龟。先安装示例 :sudo apt-get install ros-kinetic-turtlesim (16.04版本可能不用这一步也能直接跑)
    然后,在三个不同的终端分别执行以下三个指令:
    roscore
    rosrun turtlesim turtlesim_node
    rosrun turtlesim turtle_teleop_key
    然后你就会看到经典的小乌龟窗口:
    小乌龟
    试试用上下左右建来控制小乌龟吧~

  11. 在正式使用ROS进行开发之前,我推荐大家几个插件,会在后面的开发时给大家节省大量的时间。
    a). sudo apt install terminator(这是一个非常好用的终端插件,可以随意的分屏,鉴于我们平时使用ROS经常需要终端多开,可以随意分割窗口还是非常方便的)
    b). sudo apt install python-pip (使用Python语言脚本进行开发的话,一定会用到的插件)
    c). sudo pip install ipython (可以实现对仿真进行同步debug,因为有的时候程序本身没有错,但是结合仿真就会跑飞)
    d). sudo apt install meld (一个文本比较工具,当你修改过某个文件夹下的多个文件,但是又想不起来修改过哪些时,会派上用场)

2. ROS工作原理与Node通讯机制:

在教大家如何使用ROS控制机械臂之前,我们先来了解一下ROS的基本知识:

a) 首先,什么是ROS:

ROS(Robot Operating System)是一个开源平台,集成了各种各样的服务,包括视觉识别,轨迹规划,模型仿真等很多强大的开发功能。

b) ROS通过Package来管理所需的文件,通常一个ROS Package包含以下文件或文件夹:

  1. Launch文件夹:包含所有launch文件
  2. Src文件夹:包含所有的cpp文件和python文件
  3. CMakeLists.txt:包含所有需要执行的cmake配置
  4. package.xml: 包含所有package信息和依赖项

c) ROS nodes(节点)

nodes是ROS里的一个基础程序,它是一个可执行文件,通过ROS与其他的nodes进行通讯。Nodes可以向topic发布或提取信息,可以提供或使用一个Service。

这里有个小技巧,我们自己创建node的时候,可以通过rosnode list来查看当前有哪些nodes在运行,如果我们创建的node不在列表里,那么说明我们的node可能没有运行起来,需要重新source一下。

d) ROS message

message是node在向topic发布或提取信息时的一种消息格式

可以使用rosmsg show 来查看某一种特定message的格式,因为message通常都是自定义的一种格式或已经定义好的一种格式,类似于C语言中的结构体,通常包含多个不同类型的变量。

e) 三种实现nodes间通信的方法

  1. Ros topic:message通过publisher和subscriber来传递于多个nodes之间,而topic类似于一个公告板,所有的nodes可以通过topic实现相互通信。一个topic可能会有很多publisher和subscriber,而一个node也可能会从多个topic上发布或获取message。Topic是用来表示message内容的名称。
    比如:
    topic
    左边的teleop_turtle和右边的turtlesim是两个ROS nodes,他们通过中间的topic“/turtle1/command_velocity”进行通讯。两个node是无法直接进行通讯的,通过发布器node发布message给topic,接收器再从topic上获取有用的信息,所以这种通讯通常不是同步的。
  2. ROS service: service 是另一种可以实现nodes之间相互通信的方式。于topic的方法不同在于,topic使用publisher和subscriber这种非常灵活的传递信息方式,但这种多对多,单向的灵活传递信息的方式,并不适用于分布式系统里需要答复请求的场景。所以衍生出了service的通信方式, service由一对message定义:一个用于请求,一个用于回复。当一个ROS node提供service通信时,客户端会发送一个请求给这个node,并停止动作等待回复。
  3. ROS action: Action 是第三种可以实现nodes之间相互通信的方式。Action和Service的区别在于,Service是同步的,当一个ROS程序调用一个service的时候,程序会停止当前的运行直到收到service的答复。而Action是不同步的,这就像启动一个新线程。当ROS程序调用action时,ROS程序可以在当前线程中等待action的答复,但在另一个线程中执行其他任务。

f) 什么是launch文件

还记得我们最开始时运行的小乌龟实例程序么?让我们来看看它的launch文件。

<launch>
  <!-- turtlebot_teleop_key already has its own built in velocity smoother -->
  <node pkg="turtlebot_teleop" typ
  • 81
    点赞
  • 605
    收藏
    觉得还不错? 一键收藏
  • 42
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值