【技术分享】ROS系统的本地搭建

admin 2022年10月1日08:41:55评论33 views字数 4191阅读13分58秒阅读模式

【技术分享】ROS系统的本地搭建


0
写在前面


【技术分享】ROS系统的本地搭建

有关ROS系统的相关知识已经在上一篇文章中进行了阐述,在本篇文章中,将就ROS的进一步搭建方法做阐述。

⚠️:本文中“消息代理”、“主服务器”、“Master Server”是相同的意思,可以互换。


1
关于版本选择


目前稳定的ROS系统有三个版本可供选择

【技术分享】ROS系统的本地搭建

我们此处以ROS Melodic Morenia为例进行本地环境的搭建,选用Ubuntu 18.04 LTS。

⚠️:尽管实际的ROS交互并不需要任何的图形化界面,但是为了演示方便,我们此处还是选用带有用户图形界面的Desktop版本。


2
本地搭建ROS环境


  • 配置apt仓库

使用以下命令启用restricted、universe和multiverse存储库。

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"
这里也可以换成阿狸云的存储库链接,但是必须是包含restricted、universe和multiverse的。
  • 配置sources.list

使用以下命令启用ros存储库。

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.sjtug.sjtu.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
这里给出一些其他的镜像源以供选择:
🇨🇳中国科学技术大学:http://mirrors.ustc.edu.cn/ros/ubuntu/🇨🇳清华大学:http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/🇨🇳北京外国语大学:http://mirrors.bfsu.edu.cn/ros/ubuntu/🇨🇳上海交通大学:http://mirrors.sjtug.sjtu.edu.cn/ros/ubuntu/🇺🇸官方:http://packages.ros.org/ros/ubuntu
  • 设置GPG密钥

使用以下命令启用GPG密钥。

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
若多次超时,可以使用如下命令进行替换:
sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
curl -sSL 'http://pgp.mit.edu/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
  • 更新软件包并安装完整版的ROS软件包

使用如下命令更新软件源与软件包

sudo apt-get update && sudo apt-get upgrade
然后安装ROS系统(完整版):包括ROS基本通讯协议包、rqt工具包、rviz工具、机器人通用库、2D/3D模拟器、导航以及2D/3D感知包。
sudo apt install ros-melodic-desktop-full
除了完整版我们还可以选择安装非完整版的子包
桌面版(Desktop):包括ROS基本通讯协议包、rqt工具包、rviz工具、机器人通用库
sudo apt install ros-melodic-desktop

核心版(Core):包括ROS基本通讯协议包

sudo apt install ros-melodic-ros-base

独立版:

sudo apt install ros-melodic-PACKAGE

例如:

sudo apt install ros-melodic-slam-gmapping

若想知道所有的可安装独立模块,可使用以下命令查询

sudo apt search ros-melodic
【技术分享】ROS系统的本地搭建
  • 初始化rosdep

接下来因为要与raw.githubusercontent.com交互获取内容以完成初始化动作,因此需要先对host配置进行修改

执行sudo vi /etc/hosts

在最后添加一行151.101.84.133 raw.githubusercontent.com

【技术分享】ROS系统的本地搭建

接下来执行以下命令以完成初始化

sudo rosdep initrosdep update

🚫:在执行rosdep update时切勿使用sudo。

至此,我们对于ROS环境的安装全部完成。

  • 配置环境变量(非必须)

可以使用以下命令来自动的添加环境变量的配置

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrcsource ~/.bashrc

⚠️:若不进行此步骤,在接下来进行测试操作以及后续构建工程时都需要执行source /opt/ros/melodic/setup.bash来使环境变量生效。

  • 安装必要小工具

可以使用以下命令来安装一些工具以方便我们后续构建项目。

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

3
测试小乌龟项目


小乌龟项目是内置在ROS系统中的用于测试的项目,此项目中同时用到了发布者-订阅者消息模式和客户端-服务端消息模式。

  • 启动Master Server

首先,若还记得之前在”物联网协议——MQTT与ROS”一文中提到的消息代理的概念,对于ROS系统,不论是使用了哪种消息模式都需要启动一个消息代理用于将消息分发到合适的消息接收端。

那么,我们需要使用roscore启动一个主服务器以充当master server。

【技术分享】ROS系统的本地搭建

这里我们做以下几点补充说明:

  1. roscore会默认将计算机名作为主服务器的host,此时,ROS系统仅能用于本地测试。

  2. 可以使用环境变量来控制roscore的启动行为,其中,最重要的三个环境变量是:

ROS_ROOT:此环境变量必须指向ROS环境的安装位置,当系统中安装了多个版本的ROS软件包时,需要使用此环境变量进行手动指定。(默认值:/opt/ros/melodic/share/ros)
ROS_MASTER_URI:此环境变量必须指向ROS主服务器的完整地址,当我们想把主服务器暴露在网络中时,需要使用此环境变量进行手动指定。(默认值:(空),建议值:http://0.0.0.0:11311)
PYTHONPATH:此环境变量必须指向ROS系统所使用的Python环境位置,由于ROS系统底层的部分模块需要依赖Python,因此尽管我们可以使用其他语言构建项目,但是为了保证运行无误必须配置Python环境,ROS系统安装时已经默认一并安装了Python,当我们需要更换时需要手动指定。(默认值:/opt/ros/melodic/lib/python2.7/dist-packages)
如果不使用&标志符限定,默认此服务将会在前台运行,在进行接下来的测试时请务必不要关闭一开始的窗口。
  • 启动node观察器

现在我们可以使用rosnode这个小工具来查看目前的ROS系统中存在哪些节点

【技术分享】ROS系统的本地搭建

这个节点就是由消息代理启动的一个用于管理消息发送接收的节点,正如之前说过的,ROS系统与MQTT不同,他是一个高度集成的系统,同时支持两种消息模式。那么,/rosout事实上就拥有了三种属性:

订阅者:/rosout可以作为订阅者,订阅若干其他节点,用于具有多播特性的Pub-Sub mode。

发布者:/rosout可以作为发布者,向其他若干节点发布消息,用于具有多播特性的Pub-Sub mode。

服务者:/rosout可以作为服务端,提供若干服务以供其他节点发起调用,用于具有单播特性的CS mode。

【技术分享】ROS系统的本地搭建

我们可以使用rosnode info命令去看到其所有的订阅者、发布目标以及服务列表,此外,还能看到此节点的位置以及PID。

⚠️:在ROS系统中,为了最高效的利用资源,当我们启动一个新节点时,默认策略会使得主服务器随机选择一个可用端口进行节点绑定,当有其他节点想要链接此节点时只需要向消息代理询问即可,这个策略尽管实现了空间解耦,但是阻碍了我们利用ROS系统进行CTF竞赛的命题,因为无法动态的进行docker的端口映射,如果有读者可以解决此问题,请在本文评论区发布评论,笔者在此感激不尽。

  • 启动小乌龟节点【需要桌面环境】

接下来我们使用rosrun turtlesim turtlesim_node命令启动小乌龟节点

【技术分享】ROS系统的本地搭建

此时或许可以发现,每次启动小乌龟节点时,小乌龟的皮肤都不相同,我们重新使用rosnode命令观察节点

【技术分享】ROS系统的本地搭建
【技术分享】ROS系统的本地搭建

我们可以发现以下几点:

  • 小乌龟节点/turtlesim已经对/rosout这个节点产生了订阅关系。

  • /turtlesim同样提供了若干话题以及若干服务。

那么,如果我们不想用/turtlesim这个节点名,ROS系统事实上提供了自定义节点名称的参数。

首先关闭小乌龟节点启动的节点或者在小乌龟节点的终端使用Ctrl + C来终止,之后使用命令rosrun turtlesim turtlesim_node __name:=myturtle1启动,启动后再次查看node信息:

【技术分享】ROS系统的本地搭建
【技术分享】ROS系统的本地搭建

可以发现,这个节点的名字已经改变了。

【技术分享】ROS系统的本地搭建

- 结尾 -
精彩推荐
【技术分享】堆中index溢出类漏洞利用思路总结
【技术分享】非PE恶意代码分析之Gorgon组合拳
【技术分享】谈谈Office Moniker类漏洞和公式编辑器类漏洞
【技术分享】ROS系统的本地搭建
戳“阅读原文”查看更多内容

原文始发于微信公众号(安全客):【技术分享】ROS系统的本地搭建

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月1日08:41:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术分享】ROS系统的本地搭建https://cn-sec.com/archives/1326353.html

发表评论

匿名网友 填写信息