1 ROS简介
- ROS系统是为了解决机器人开发过程中“重复造轮子”的问题。提高机器人研发中的软件复用率。
- 每个模块可以被单独设计与编译,运行时以松耦合的方式结合在一起。
- ROS提供硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制。且集成了大量工具、库、协议。
- ROS在2007年诞生于斯坦福STAIR项目Morgan Quigley。
2 ROS的特点
点对点
- 节点单元
- 分布式网络
- RPC+TCP/UDP通信系统
- 多机协同
多语言支持
- 支持C++、Python、Java等编程语言
- 语言无关的接口定义
架构精简、集成度高
- 每个功能节点可以单独编译
- 集成众多开源项目
- 接口统一、提高软件复用性
组件化工具包丰富
- 3D可视化工具—— rviz
- 物理仿真环境——gazebo
- 数据记录工具——rosbag
- Qt工具箱——rqt_*
免费且开源
- BSD许可,可修改、可复用、可商用
- 软件包数量指数级增加,良好的生态系统
ROS计算图
节点(Node)——软件模块
节点管理器(ROS Master)——控制中心,提供参数管理
话题(Topic)——异步通信机制,传输消息(msg)
- Talker注册
- Listener注册
- ROS Master进行信息匹配
- Listener发生连接请求
- Talker确认连接请求
- 建立网络连接
- Talker向Listener发布数据
服务(Service)——同步通信机制,传输请求/应答数据
- Talker注册
- Listener注册
- ROS Master进行信息匹配
- 建立网络连接
- Talker向Listener发布服务器应答数据
参数通信机制
- Talker设置变量
- Listener查询参数值
- ROS Master向Listener发生参数值
文件系统
- 功能包清单:记录功能包的基本信息,包括作者信息、许可信息、依赖选型、编译标志等。
- 消息类型:消息是ROS节点之间发布/订阅的通信信息,可以使用ROS系统提供的消息类型,也可以使用.msg文件在功能包msg文件下自定义类型。
- 服务类型:定义了ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.srv文件在功能包srv文件夹中定义。
- 代码:放置功能包节点源代码的文件夹。
- 启动文件:用于配置同时启动多个节点的描述文件
graph LR a(文件系统) --> 功能包 功能包 --> 功能包清单pack 功能包 --> 消息类型msg 功能包 --> 服务类型srv 功能包 --> 代码src和script 功能包 --> 启动文件launch 功能包 --> 其他
- 安装turtlesim组件
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 运行和使用
roscore #启动ros的master节点
rosrun turtlesim turtlesim_node #运行小乌龟节点demo
rosrun turtlesim turtle_teleop_key #运行键盘节点,可以通过这个节点控制小乌龟
rosnode list #查看节点
rosnode info /turtlesim #列举节点详细信息
rosrun rqt_graph rqt_graph #绘制节点通信的流图
rostopic echo /turtlei/cmd_vel #收听/turtlei/cmd_vel话题画图
rostopic info /turtle1/cmd_vel #查看/turtlei/cmd_vel话题的详情信息
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "[Tab]自动补全" #手动发布消息
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 2 "[Tab]自动补全" #以2hz的频率持续发布消息
rostopic hz /turtle1/cmd_vel #查看发生的频率
rostopic -h #查看帮助
roslauch xtark_tutorials xtark_beginner.launch #运行luanch文件(一次配置,一键启动所有节点)~/catkin_ws/src/xtark_tutorials/launch
- ros话题命令行工具
rostopic list #列出当前活动主题
rostopic bw topsic #显示主题发表频率(带宽)
rostopic delay topic #从话题时间搓显示话题延时
rostopic echo topic #打印话题消息
rostopic type topic #显示话题消息类型
rostopic pub <topic name> <topic type> [data..] #向话题发生指定消息
- ros节点执行工具,运行某一个包的某一个节点
rosrun <package> <executable> [param]
rosrun rqt_graph rqt_graph #绘制节点通信的流图
rosrun rqt_tf_tree rqt_tf_tree #可视化ROS-TF框架树,坐标系转换
rosrun rqt_console rqt_console #显示和过滤ROS消息
rosrun rqt_plot rqt_plot #将数值可视化显示
rosrun rqt_reconfigure rqt_reconfigure #可视化参数修改工具
rosrun rqt_image_view rqt_image_view #显示摄像头画面
rosrun rviz rviz #打开雷达图形化工具
- ros节点命令行工具
rosnode list #获取运行节点列表
rosnode info <node name> #获得特定节点信息
rosnode ping <node name> #测试节点联通
rosnode kill <node name> #终止节点
- ros数据管理工具,将ROS系统运行过程的数据录制到.bag文件中
#[Ctrl]+c退出录制
rosbag recode -a #录制所有发布的话题,存储在.bag文件内
rosbag recode -O bagname.bag /cmd_vel /odom #录制特定话题到特定bag包中
rosbag info <bag name> #查看bag文件信息
rosbag play <bag name> #回放指定bag包
rosbag play -r 2 <bag name> #以2Hz频率回放bag包
rosbag play -s 2 <bag name> #从某一时间节点播放bag包
- 其他工具
#ros master启动(必须要运行的)
roscore
#软件包路径切换
roscd xtark_driver #你不知道软件包在哪里,但是你可以通过这个目录切换
#ros软件包管理工具
rospack list #输出当前ros所有软件包信息
rospack depends1 xtark_driver #显示当前包的一级依赖
rospack depends xtark_driver #显示当前包的所有依赖
rospack profile #刷新当前ros软件包索引(重要)
|command| -h #输出命令使用帮助