全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 工业控制 >

ROS系统的本地搭建(下)

时间:2023-05-19 17:16

人气:

作者:admin

标签: ROS  物联网  服务器 

导读:有关ROS系统的相关知识已经在上一篇文章中进行了阐述,在本篇文章中,将就ROS的进一步搭建方法做阐述。⚠️:本文中“消息代理”、“主服务器”、“Master Server”是相同的意思,可...
  • 安装必要小工具

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

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

3

测试小乌龟项目

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

  • 启动Master Server

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

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

图片

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

  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系统与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信息:

图片

图片

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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信