一、话题通信机制
话题通信机制在ROS中用的非常多;也较为复杂。一般包含以下7个步骤:
一、参数通信机制
小海龟实验:
## 小海龟仿真
## 终端一
## 启动 ROS Master
roscore
## 终端二
## rosrun(启动节点) turtlesim(功能包) turtlesim_node(节点归属于功能包)
rosrun turtlesim turtlesim_node
## 终端三
## 启动海龟控制节点
rosrun turtlesim turtle_teleop_key
终端2 海龟节点启动成功会出现如图的小海龟;键盘控制节点启动成功则会出现如图蓝色圈内信息。小海龟Demo虽简单,但是包含知识较多。
1 ## rqt_graph 将系统中一些信息可视化的一个工具 2 ## 在启动rosmaster、没关闭小海龟节点和键盘节点前提下 3 ## 终端四 4 rqt_graph
1 ## 查看系统当中有多少节点 2 rosnode list 3 4 ## 此时,终端打印出: 5 #/rosout 6 #/teleop_turtle 7 #/turtlesim 8 9 ## 查看节点A的具体信息 10 ## rosnode info /A 11 rosnode info /turtlesim
1 ## 查看系统有哪些话题正在发布 2 rostopic list 3 4 ##终端打印出: 5 #/rosout_agg 6 #/turtle1/cmd_vel 7 #/turtle1/color_sensor 8 #/turtle1/pose 9 10 ## 查看话题B的具体信息 11 ## rosnode info /B 12 rostopic info /turtlesim/cmd_vel
1 ## 监听话题信息的具体内容 2 rostopic echo /turtle1/cmd_vel 3 ## 发现没有打印出消息 4 ## 在键盘控制终端中,控制海龟移动 5 ## 如图是终端中显示的海归位置信息
1 ## 我们也可以通过终端控制海归,一般用于调试 2 rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear: 3 x: 0.0 4 y: 0.0 5 z: 0.0 6 angular: 7 x: 0.0 8 y: 0.0 9 z: 0.0" 10 11 ## 加上参数 -r 10 表示以一秒钟10次的频率发布 12 rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: 13 x: 2.0 14 y: 0.0 15 z: 0.0 16 angular: 17 x: 0.0 18 y: 0.0 19 z: 0.0"
1 ## 查看系统中能够提供的服务 2 rosservice list 3 ##打印信息如下---------------------------------- 4 /clear 5 /kill 6 /reset 7 /rosout/get_loggers 8 /rosout/set_logger_level 9 /spawn 10 /teleop_turtle/get_loggers 11 /teleop_turtle/set_logger_level 12 /turtle1/set_pen 13 /turtle1/teleport_absolute 14 /turtle1/teleport_relative 15 /turtlesim/get_loggers 16 /turtlesim/set_logger_level
1 ## 查看 服务信息 2 rossverce info /spawn 3 4 ##打印信息如下---------------------------------- 5 Node: /turtlesim ##服务所提供节点 6 URI: rosrpc://sry:36157 7 Type: turtlesim/Spawn ##数据类型 8 Args: x y theta name ##类型里的参数 9 10 ##以上的服务spawn的作用是在仿真器里新生一只海归 11 rosservice call /spawn "x: 10.0 12 y: 20.0 13 theta: 30.0 14 name: 'shiruiyu'" 15 ##如图,仿真器中有两只海归
1 ## rqt_plot 可视化工具 2 ## 例如绘制曲线 3 ##在rqt_plot界面添加海龟坐标,如图:当你在键盘控制终端控制海龟移动的时候,rqt_plot曲线会实时显示。
二
2.1 创建工作空间
2.2 ROS通信编程
2.3 实现分布式通信
2.4 ROS中的关键组件
创建工作空间
1 # 创建工作空间 2 mkdir -p ~/catkin_ws/src 3 cd ~/catkin_ws/src ## 在源代码文件夹下初始化空间 4 catkin_init_workspace 5 6 7 ## 工作空间初始化之后,src 文件下出现 CMakeLists.txt
1 # 编译工作空间 2 cd ~/catkin_ws/ 3 catkin_make 4 5 6 ## 编译完之后,catkin_ws文件下出现 build、devel文件夹
1 # 需要知道整个Linux系统的功能包在什么位置,所以必须设置环境变量 2 # 设置环境变量 [注意:这里似乎仅仅是把当前终端加入环境变量??] 3 source devel/setup.bash 4 5 ## 这样系统就知道,功能包位置在工作空间catkin_ws下。 6 ## 这种做法只会使得环境变量在当前终端生效,换一个终端则无效。所以 7 ## 我们可以将这条命令放到整个终端的配置文件当中。
1 gedit ~/.bashrc ## 打开终端配置文件 2 添加并保存: source ~/catkin_ws/devel/setup.bash
我们看到,在我们添加的当前工作空间catkin_ws下功能包位置的上一行,是ROS自带功能包位置,安装的时候自动加入终端配置文件的。
1 source ~/.bashrc ## 让刚刚配置文件生效。
1 # 检查环境变量 2 ## 随便打开几个新的终端 3 echo $ROS_PACKAGE_PATH 4 ## 打印效果如下图: 5
以后用 rospack find 功能包 的时候,会优先从上图左边路径依次往右边开始查找。
创建功能包
1 ## 创建功能包 2 $ catkin_create_pkg <package_name> [depend1] [depend2] [depend3] 3 4 5 cd ~/catkin_ws/src 6 catkin_create_pkg learning_communication std_msgs rospy roscpp
1 cd ~/catkin_ws 2 3 我们打开如图文件下的package.xml文件,翻到如图的位置,看到功能包的依赖。后期可添加更多依赖。
1 catkin_make ## 编译,看到刚刚创建的功能包
## 设置环境变量,
##由于刚刚我们已经将工作空间路径添加进了终端配置文件,所以这里不用再设置了。