ROS概念及命令行工具

ROS:Robot Operating System,机器人操作系统。ROS是一种分布式机器人操作系统,依赖于linux(一般支持的linux系统有ubuntu系列与debian系列),由斯坦福发布,目前,很多机器人的研究都是基于它。在古月居的定义理解中,ROS = 通信机制 + 开发工具 + 应用功能 + 生态系统。
从网上教程数量角度和无人机仿真项目Prometheus的应用角度出发,我学习使用的是Ubuntu 18.04长期支持版本,学习教程主要是根据古月居的《ROS入门21讲》。ROS2据说支持windows系统,并未进行尝试。

节点

节点(Node)– 执行单元

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

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

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

通信机制

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

  • 节点间用来传输数据的重要总线;
  • 使用发布 / 订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。
  • 消息(Message):定义数据的类型,具有一定的数据结构定义。使用编程语言无关的 ==.msg== 文件定义,编译过程中生成对应的代码文件。

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

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

文件系统

ROS命令行

在ROS命令行基本操作学习中,以小海龟程序作为示例进行学习。

运行小海龟程序

# 用来启动ros核心,也就是ros master节点。  
roscore  
  
# rosrun表示运行一个节点  
# turtlesim表示功能包名为turtlesim,海龟仿真器  
# turtlesim_node表示turtlesim包下的turtlesim_node节点  
rosrun turtlesim turtlesim_node  
  
# rosrun表示运行一个节点  
# turtlesim表示功能包名为turtlesim,海龟仿真器  
# turtlesim_node表示turtlesim包下的turtle_teleop_key节点  
# 键盘控制  
rosrun turtlesim turtle_teleop_key

rqt_graph

ROS的可视化工具rqt_graph,可以清晰的了解系统节点间通信的部分信息。

teleop_turtle节点(键盘控制节点)通过cmd_vel(topic)向turtlesim节点(海龟仿真器节点)发出消息,使得小海龟移动。

/rosout 是 ros master 启动后默认启动的一个节点,会保存所有结点的日志信息。

rqt_plot

左上角添加 topic,就可以实时打印某一话题里的数据内容。

rosnode

# 打印所有的节点  
rosnode list  

# rosnode info /节点名
# 打印/turtlesim节点信息,如发布的话题,订阅的话题和服务等  
rosnode info /turtlesim

rostopic

# 显示topic列表
rostopic list

# 例如,结点/turtlesim正在发布海龟1的位置信息/turtle1/pose(这个是话题)  
# echo是打印某一个话题里的数据内容  
# 打印海龟1的姿势信息  
# 平移单位是米,角度的单位是弧度  
rostopic echo /turtle1/pose  
  
# pub 表示publish  
# 格式:rostopic pub (参数) 话题名 消息数据结构 “具体数据”
# /turtle1/cmd_vel是topic名,表示海龟1的速度指令  
# geometry_msgs/Twist是message名,表示线速度和角速度(机器人学中的twist)  
# 键盘的输入的优先级高一些  
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist +Tab键  
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist +Tab键
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

rosmsg

# 上例我们使用了**消息数据结构**定义了一个消息传给topic,我们可以查看有哪些消息数据结构
# 可以看到geometry_msgs/Twist数据结构的内容
rosmag show geometry_msgs/Twist

rosservice

# 查看服务列表
rosservice list
# 在服务列表中,有个/spawn服务,可以产生一只新的海龟
# 格式:`rosservice call (参数) 服务名 “具体数据”`
rosservice call /spawn +tab

rosbag

# 话题记录和重现
# 格式:rosbag record -a -O 文件名 。保存在主目录
rosbag record -a -O cmd_record

# 关闭所有打开的ros节点,重新开启roscore,开启海龟节点rosrun turtlesim turtlesim_node
# 复现之前的运动
rosbag play cmd_record.bag

   转载规则


《ROS概念及命令行工具》 CHQ 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录