ROS 通信架构 (计算图级)

PR2 机器人
11.PNG
管理之间进程和通信

1.需要一个管家master,管理这些进程

master 节点管理器
每个节点(node)启动,都要向master注册
其管理node之间的通信

12.PNG
所以,启动ros,首先启动master
14.PNG
在命令行输入
roscore
会启动master,同时也会启动rosoutparameter server

rosout parameter server
系统有哪些error,warning 进行参数配置

2.启动具体ros程序(node)

一个node就是一个进程
是pkg文件中可执行文件的实例

这些只可执行文件,比如:

  • c++
  • .py
  • .sh (shell脚本)

运行后,被加载到内存中,成为node
可执行文件是静态的,而node是动态的

一般来说,每个节点是有特定功能的

启动方法:

rosrun [pkg_name] [node_name]
其他命令 功能
rosnode list 列出当前运行node的信息
rosnode info [node_name] 显示某个node的详细信息
rosnode kill [node_name] 结束某个node

roslaunch启动master和多个node

roslaunch [pkg_name] [file_name.launch]

15.PNG

launch文件的写法:
具体参见官方网页

<launch>             <!--根目录-->
    <node>           <!--需要启动的node和参数-->
    <include>        <!--包含其他launch文件-->
    <machine>        <!--指定运行的机器-->
    <env-loader>     <!--设置环境变量-->
    <param>          <!--定义参数到参数服务器-->
    <rosparam>       <!--启动yaml文件参数到参数服务器-->
    <arg>            <!--定义参数,传入到launch文件中-->
    <remap>          <!--设定参数映射-->
    <group>          <!--设定命名空间-->
</launch>            <!--根目录-->

以下是运行PR2机器人时所需要运行的节点
捕获.PNG

我们运行时只需要运行launch文件即可

roslaunch pr2_bringup pr2.launch

以下为我在Linux16.04下的操作

先到官方下载的文件夹下

roslaunch robot_sim_demo robot_spawn.launch 

然后会出现仿真环境
2-1.png
再回头看命令框中内容
2-2.png
以上是参数服务器

然后是节点
2-3.png

robot_state_publisher 自身状态
spawner 启动机器人模型
cmd_vel_mux速度选择器
gazebo后端
gazebo_gui前段展示
mobile_base_nodelet_manager控制底盘运动
urdf_spawner和机器人自身结构有关系
每个node都是一个进程
2-4.png

master进程
常伴随启动的rosout

我们现在可以查看有哪些node在运行
rosnode list
2-7.png
查看某一个node信息
rosnode info /cmd_vel_mux
2-5.png
可以看到其发布的topic,订阅的

再运行

rosrun robot_sim_demo robot_keyboard_teleop.py

会显示操作按键
2-6.png
i前进
l左转
r右转
k
再在另外一个命令框中查看node
2-8.png
多出来一个/robot_teleop

然后我们再运行一个node

rosrun image_view image_view image:=/camera/rgb/image_raw

2-9.png


Laniakea
8 声望1 粉丝

ye