有关ROS系统的相关知识已经在上一篇文章中进行了阐述,在本篇文章中,将就ROS的进一步搭建方法做阐述。
⚠️:本文中“消息代理”、“主服务器”、“Master Server”是相同的意思,可以互换。
我们此处以ROS Melodic Morenia为例进行本地环境的搭建,选用Ubuntu 18.04 LTS。
⚠️:尽管实际的ROS交互并不需要任何的图形化界面,但是为了演示方便,我们此处还是选用带有用户图形界面的Desktop版本。
-
配置apt仓库
使用以下命令启用restricted、universe和multiverse存储库。
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted 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
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
-
初始化rosdep
接下来因为要与raw.githubusercontent.com交互获取内容以完成初始化动作,因此需要先对host配置进行修改
执行sudo vi /etc/hosts
在最后添加一行151.101.84.133 raw.githubusercontent.com
接下来执行以下命令以完成初始化
sudo rosdep init
rosdep update
🚫:在执行rosdep update时切勿使用sudo。
至此,我们对于ROS环境的安装全部完成。
-
配置环境变量(非必须)
可以使用以下命令来自动的添加环境变量的配置
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
⚠️:若不进行此步骤,在接下来进行测试操作以及后续构建工程时都需要执行source /opt/ros/melodic/setup.bash来使环境变量生效。
-
安装必要小工具
可以使用以下命令来安装一些工具以方便我们后续构建项目。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
小乌龟项目是内置在ROS系统中的用于测试的项目,此项目中同时用到了发布者-订阅者消息模式和客户端-服务端消息模式。
-
启动Master Server
首先,若还记得之前在”物联网协议——MQTT与ROS”一文中提到的消息代理的概念,对于ROS系统,不论是使用了哪种消息模式都需要启动一个消息代理用于将消息分发到合适的消息接收端。
那么,我们需要使用roscore启动一个主服务器以充当master server。
这里我们做以下几点补充说明:
-
roscore会默认将计算机名作为主服务器的host,此时,ROS系统仅能用于本地测试。
-
可以使用环境变量来控制roscore的启动行为,其中,最重要的三个环境变量是:
-
启动node观察器
现在我们可以使用rosnode这个小工具来查看目前的ROS系统中存在哪些节点
这个节点就是由消息代理启动的一个用于管理消息发送接收的节点,正如之前说过的,ROS系统与MQTT不同,他是一个高度集成的系统,同时支持两种消息模式。那么,/rosout事实上就拥有了三种属性:
订阅者:/rosout可以作为订阅者,订阅若干其他节点,用于具有多播特性的Pub-Sub mode。
发布者:/rosout可以作为发布者,向其他若干节点发布消息,用于具有多播特性的Pub-Sub mode。
服务者:/rosout可以作为服务端,提供若干服务以供其他节点发起调用,用于具有单播特性的CS mode。
我们可以使用rosnode info命令去看到其所有的订阅者、发布目标以及服务列表,此外,还能看到此节点的位置以及PID。
⚠️:在ROS系统中,为了最高效的利用资源,当我们启动一个新节点时,默认策略会使得主服务器随机选择一个可用端口进行节点绑定,当有其他节点想要链接此节点时只需要向消息代理询问即可,这个策略尽管实现了空间解耦,但是阻碍了我们利用ROS系统进行CTF竞赛的命题,因为无法动态的进行docker的端口映射,如果有读者可以解决此问题,请在本文评论区发布评论,笔者在此感激不尽。
-
启动小乌龟节点【需要桌面环境】
接下来我们使用rosrun turtlesim turtlesim_node命令启动小乌龟节点
此时或许可以发现,每次启动小乌龟节点时,小乌龟的皮肤都不相同,我们重新使用rosnode命令观察节点
我们可以发现以下几点:
-
小乌龟节点/turtlesim已经对/rosout这个节点产生了订阅关系。
-
/turtlesim同样提供了若干话题以及若干服务。
那么,如果我们不想用/turtlesim这个节点名,ROS系统事实上提供了自定义节点名称的参数。
首先关闭小乌龟节点启动的节点或者在小乌龟节点的终端使用Ctrl + C来终止,之后使用命令rosrun turtlesim turtlesim_node __name:=myturtle1启动,启动后再次查看node信息:
可以发现,这个节点的名字已经改变了。
- 结尾 - 精彩推荐 【技术分享】堆中index溢出类漏洞利用思路总结 【技术分享】非PE恶意代码分析之Gorgon组合拳 【技术分享】谈谈Office Moniker类漏洞和公式编辑器类漏洞 戳“阅读原文”查看更多内容 原文始发于微信公众号(安全客):【技术分享】ROS系统的本地搭建
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论