ROS 通信架构 (计算图级)
PR2 机器人
管理之间进程和通信
1.需要一个管家
master,管理这些进程
即 master
节点管理器
每个节点
(node
)启动,都要向master注册
其管理node之间的通信
所以,启动ros,首先启动master
在命令行输入roscore
会启动master
,同时也会启动rosout
和parameter 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]
launch文件的写法:
具体参见官方网页
<launch> <!--根目录-->
<node> <!--需要启动的node和参数-->
<include> <!--包含其他launch文件-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--启动yaml文件参数到参数服务器-->
<arg> <!--定义参数,传入到launch文件中-->
<remap> <!--设定参数映射-->
<group> <!--设定命名空间-->
</launch> <!--根目录-->
以下是运行PR2机器人时所需要运行的节点
我们运行时只需要运行launch文件即可
roslaunch pr2_bringup pr2.launch
以下为我在Linux16.04下的操作
先到官方下载的文件夹下
roslaunch robot_sim_demo robot_spawn.launch
然后会出现仿真环境
再回头看命令框中内容
以上是参数服务器
然后是节点
robot_state_publisher
自身状态spawner
启动机器人模型cmd_vel_mux
速度选择器gazebo
后端gazebo_gui
前段展示mobile_base_nodelet_manager
控制底盘运动urdf_spawner
和机器人自身结构有关系
每个node都是一个进程
master进程
常伴随启动的rosout
我们现在可以查看有哪些node在运行rosnode list
查看某一个node信息rosnode info /cmd_vel_mux
可以看到其发布的topic,订阅的
再运行
rosrun robot_sim_demo robot_keyboard_teleop.py
会显示操作按键i
前进l
左转r
右转k
停
再在另外一个命令框中查看node
多出来一个/robot_teleop
然后我们再运行一个node
rosrun image_view image_view image:=/camera/rgb/image_raw
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。