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