DAY 5 ROS 通讯架构

DAY 5 ROS 通讯架构1

前言

在前几天我们将我们的 ROS 环境给搭建起来了,并且知道了大部分的架构,接下来就准备开始运行我们的程序码,但在运行之前,我们必须要知道整个通讯架构。

一台机器人他有很多的部分都是需要控制的,像是下面这台 PR2 机器人

他有多个模块是需要我们去进行控制的,像是以下这些模块

Master 节点管理器

那我们该怎麽来控制这些模块,来让彼此能够进行沟通呢? 首先我们要有一个 OP 管理员,来管理全部的程序 master(节点管理器),首先每一个 node 都需要跟 master 进行注册(白名单),在注册後才能运行,如果有多个 node 时,他们本身是互不认识的,但是透过 master,他们就可以互相沟通了,所以在 ROS 启动时,我们便需要去把 master 给唤醒,输入下面这个指令进行唤醒,在唤醒 master 的同时也会将 rosout、parameter server 给唤醒(召唤小怪),而 rosout 是负责将现在系统的资讯给输出的 node, 看警告跟错误的地方便是这里,并将这些讯息存在 log 中,而parameter server 就是进行一些参数配置的地方。

roscore

Node 节点

Node 是什麽呢? 你可以把它看成是一个程序,在之前我们有说过一个 package 可以有多个可执行文件,他们被读取後便会成为一个个 node,我们在回来看刚刚 PR2 机器人的图片,每一个模块他都是一个 node , 而他的启动方法是:

rosrun [package name] [node name]

还有一些指令可以用来辅助 node

列出当前运行的 node 讯息

rosnode list

显示某个 node 的详细讯息

rosnode info [node name]

结束某个 node

rosnode kill [node name]

测试连接节点

rosnode ping

列出某台机器上运行中的节点

rosnode machine

将没有连接到的节点给砍了

rosnode cleanup 

roslaunch

这个时候你可能会有疑问,如果我一次要开一堆 node , 不就需要开好几次吗? 这时候我们可以用 roslaunch, 在昨天有讲道说我们有一个 launch 文件, roslaunch 就是拿来辅助我们开启 launch 文件 然後一次把 master 跟多个 node 一起启动了:

roslaunch [package name] [launch file name]

我们来看一下 launch 他会长什麽样子

<launch> <!--头标签-->
    <node> <!--需要启动的node及其参数-->
    <include> <!--包含其他launch-->
    <machine> <!--指定运行的机器-->
    <env-loader> <!--设置环境变数-->
    <param> <!--定义参数到参数服务器-->
    <rosparam> <!--启动yaml文件参数到参数服务器-->
    <arg> <!--定义变数-->
    <remap> <!--设定参数映射-->
    <group> <!--设定命名空间-->
</launch> <!--头标签-->

我们来看一下 PR2 机器人 有多少个节点吧~

在明天我们将要来说明 ROS 中最重要的一环 通讯方式

#Arm Arm Platforms


<<:  [DAY 05] EC2 - 关於储存空间

>>:  第三章

【Day 8】梯度下降法(Gradient Descent) --- Tip 1

之前在机器学习基本功(二) --- Regression中有简单提到梯度下降法(Gradient D...

欸! 我觉得自动化测试的架构应该长这样,测试应该这样写。

最近目前我的公司要做新的专案, 所以藉此需要一个新的专案来做自动化测试, 所以开始在思考一个好的自动...

Day03 - 我要写 Laravel !

前言 在混过了完全不知道要写什麽的两天之後,我就在思考我到底能在铁人赛中记录下甚麽或学习到甚麽,甚至...

Day24 - 静态模型 part2 (CNN)

在 CNN-based 的架构中,会使用三种不同的 CNN 架构: Basic CNN Multi-...

Day 22 UICollectionView的练习 (2/2)

今天把功能都做完吧~ 首先,我们把图片弄到Assets.xcassets里面,直接把照片拖曳到左边红...