1 ROS简介

  • ROS系统是为了解决机器人开发过程中“重复造轮子”的问题。提高机器人研发中的软件复用率。
  • 每个模块可以被单独设计与编译,运行时以松耦合的方式结合在一起。
  • ROS提供硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制。且集成了大量工具、库、协议。
  • ROS在2007年诞生于斯坦福STAIR项目Morgan Quigley。


2 ROS的特点

点对点

  • 节点单元
  • 分布式网络
  • RPC+TCP/UDP通信系统
  • 多机协同

多语言支持

  • 支持C++、Python、Java等编程语言
  • 语言无关的接口定义

ros2修改qos_bash

架构精简、集成度高

  • 每个功能节点可以单独编译
  • 集成众多开源项目
  • 接口统一、提高软件复用性

ros2修改qos_python_02

组件化工具包丰富

  • 3D可视化工具—— rviz
  • 物理仿真环境——gazebo
  • 数据记录工具——rosbag
  • Qt工具箱——rqt_*
  • ros2修改qos_bash_03


免费且开源

  • BSD许可,可修改、可复用、可商用
  • 软件包数量指数级增加,良好的生态系统
  • ros2修改qos_ros2修改qos_04



3 ROS系统实现

ROS计算图

  • 节点(Node)——软件模块

  • 节点管理器(ROS Master)——控制中心,提供参数管理

  • 话题(Topic)——异步通信机制,传输消息(msg)

    1. Talker注册
    2. Listener注册
    3. ROS Master进行信息匹配
    4. Listener发生连接请求
    5. Talker确认连接请求
    6. 建立网络连接
    7. Talker向Listener发布数据
    8. ros2修改qos_bash_05


  • 服务(Service)——同步通信机制,传输请求/应答数据

    1. Talker注册
    2. Listener注册
    3. ROS Master进行信息匹配
    4. 建立网络连接
    5. Talker向Listener发布服务器应答数据
    6. ros2修改qos_python_06


  • 参数通信机制

    1. Talker设置变量
    2. Listener查询参数值
    3. ROS Master向Listener发生参数值
    4. ros2修改qos_bash_07


文件系统

  • 功能包清单:记录功能包的基本信息,包括作者信息、许可信息、依赖选型、编译标志等。
  • 消息类型:消息是ROS节点之间发布/订阅的通信信息,可以使用ROS系统提供的消息类型,也可以使用.msg文件在功能包msg文件下自定义类型。
  • 服务类型:定义了ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.srv文件在功能包srv文件夹中定义。
  • 代码:放置功能包节点源代码的文件夹。
  • 启动文件:用于配置同时启动多个节点的描述文件

graph LR a(文件系统) --> 功能包 功能包 --> 功能包清单pack 功能包 --> 消息类型msg 功能包 --> 服务类型srv 功能包 --> 代码src和script 功能包 --> 启动文件launch 功能包 --> 其他


4 小乌龟的例程
  • 安装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


5 常用工具用法
  • 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						#输出命令使用帮助