ROS小海龟

目标:

  1. 运行海龟仿真器,并使用命令行工具产生2只新的海龟;
  2. 查看3只海龟的计算图结构;
  3. 使用命令行工具控制一只海龟做圆周运动,并显示位置曲线。

先了解ROS核心概念:

节点(Node)——执行单元

  • 执行具体任务的进程、独立运行的可执行文件;
  • 不同节点可使用不同的变成语言来编写,可分布式运行在不同的主机;
  • 节点在系统中的名称必须是唯一的。

节点管理器(ROS Master)——控制中心

  • 为节点提供命名和注册服务;
  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
  • 提供参数服务器,节点使用此服务器存储和检索运行时的参数。

再了解ROS的通信机制:

话题(Topic)——异步通信机制

  • 节点间用来传输数据的重要总线;
  • 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题可以有多个发布者或者订阅者。

消息(Message)——话题数据

  • 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
  • 使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件。

服务(Service)——同步通信机制

  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回的应答数据;
  • 使用编程语言无关的.srv文件定义请求和应答的数据结构,编译过程中生成对应的代码文件。

总结:

  • 一般来说同一个话题可以有多个订阅者,但不建议有多个发布者。否则会造成消息混乱;
  • 跨语言的.msg/.srv文件类型服务端RPC编程的.proto文件。

再看ROS常用命令(划重点内容,一般是要考的):

查看话题列表

rosnode list

查看节点信息

rosnode info /turtlesim

会输出/turtlesim的发布、订阅、服务等信息

发布话题消息

rostopic pub -r 10 /turtle3/cmd_vel geometry_msgs/Twist "linear:
  x: 0.5
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5"

查看话题消息

rostopic echo /turtle3/pose

会输出/turtle3的位置信息,显示话题的具体内容

实现目标:

  1. 启动ROS Master

打开一个Terminal,输入roscore命令并执行

  1. 启动海龟仿真器 再打开一个Terminal,输入rosrun turtlesim turtlesim_node命令并执行,就可以看到海龟仿真器被打开了

  1. 再打开一个新的Terminal,通过rosservice调用/spawn服务产生2只新的海龟,名字分别为turtle2和trutle3。执行命令如下:

产生一只名字叫turtle2的新海龟:

rosservice call /spawn "x: 5.0
y: 5.0 
theta: 0.0
name: 'turtle2'"
name: "turtle2"

产生一只名字叫turtle3的新海龟:

rosservice call /spawn "x: 3.0
y: 3.0
theta: 0.0
name: 'turtle3'"
name: "turtle3"

x、y表示新海龟出现的位置。

  1. 再打开一个终端,通过rostopic命令控制名称为turtle3的海龟做圆周运动
rostopic pub -r 10 /turtle3/cmd_vel geometry_msgs/Twist "linear:
  x: 0.5
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5"

-r 10 表示以10hz的速度,循环发布消息。

  1. 再打开一个Terminal,执行rqt_graph命令,查看3只海龟的计算图结构

  1. 再打开一个Terminal,执行rqt_plot命令,查看turtle3的曲线位置

总结

  • 在ROS中看到/cmd_vel,不管前缀是什么都是用来控制速度的。geometry_msgs/Twist是定义好的速度控制指令,一般ROS里面都这样来定义。
  • 在碰到一个命令不知道怎么使用时,可以直接输入命令按回车,会打印出帮助信息。
  • 在ROS中输入指令按tab,会得到辅助信息。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:ROS小海龟

本文地址:https://jizhong.plus/post/2019/07/ros-turtlesim.html