一、ROS的定义与组成
ROS是一种开源的源操作系统,是一种机器人框架,提供了一系列的通信机制。
源操作系统:提供类似操作系统中的服务,如提供硬件抽象、提供底层控制与驱动、提供一系列通信机制。
整个图称为计算图(compute-graph),其中的椭圆称为节点,外围的矩形框称为命名空间。节点和节点之间是松耦合的,不同的节点可以分布在不同的平台上!
Rviz:三维可视化工具;Gazebo:三维物理仿真平台
二、ROS核心概念和通信机制
三、第一个ROS例程——小海龟仿真分析
常用指令后面如果不记得可以跟什么参数,可以直接只输入命令,会有帮助信息!
roscore 用来启动 ros 核心 ros master,相当于公司的老板。rosrun 是ros中运行一个节点最基础的命令,后面跟两个参数:节点所在功能包的名字、节点可执行文件的名字。
要想运行上述的计算图,不能关闭已经运行的小海龟程序,重新打开一个新的终端,输入
rqt_graph
,默认运行结果如下图所示:
要想运行和PPT中一样的模样,需要设置面板一些参数,如下图:
先勾选Debug选项,效果如下图:
两个椭圆表示系统中有两个节点,分别对应小海龟运行时的第二和第三条命令!cmd_vel:是小海龟的速度控制指令。/turtle1/cmd_vel
表示话题名!
从上面可以看到,勾选了
Debug
之后会有更多的节点出来,其中就包括rosout
。rosout
它是ros master 启动之后默认启动的一个节点。它会去读取并保存ROS环境中所有节点的日志信息,并通过同名的/rosout
话题发布,这样上位机就可以监控所有节点的日志,实现日志筛选,所以rosout
这个节点无需过多关注,主要关注其他节点及整体框架。当然还有一个rqt_gui_py_node_89362
节点也多出来了,它表示的是rqt_graph
这个计算图,这个节点也无需过多关注!
通过
rqt_graph
命令可以很快的梳理清楚ROS环境中所有节点的数据通信方向和系统架构,可以从上帝视角看到系统的全貌,方便用户去理解系统!
rosnode
后面记不清可以跟什么参数,可以直接回车,会显示出来可以跟的参数,如下图所示:
rosnode list
可以查看到ROS中所有的节点,如下图:
如果想知道某个节点具体是干什么事,订阅和发布哪些数据,提供哪些服务等信息,可以使用命令rosnode info + /节点名
rostopic
指令是跟话题相关的指令。
我们刚刚通过rosnode
看到了turtlesim
节点的一些信息,其中可以看到它一直在发布一个turtle1/pose
的位置话题信息,我们可以通过rostopic
来查看位置信息具体是什么样的,具体命令为:rostopic echo /turtle1/pose
(运动海龟数据也会实时变化,退出ctrl+c
)
rostopic不仅可以收数据,还可以发送数据,命令:rostopic pub /turtle1/cmd_vel
,注意命令还没有输全,接着是数据结构,但是具体的数据结构我们不需要一个个手动输入,直接Tab,会自动补全话题数据结构geometry_msgs/Twist
。此时还未输入完毕,需要输入的线速度角速度,还是使用Tab自动补全,会出现如下图所示:
通过方向键的左右键来修改具体的值,这里只涉及到线速度的x方向,角速度的z方向。这里设置海龟向前移动0.5m,设置完毕后即可回车运行,命令如下图所示:
可以发现海龟运行了一次就停止了。如何不断运行呢,加入频率参数-r 数值
,命令如下图:
上图是以每秒执行10次的频率的运行。
上面做的相当于是直线运动,如何做圆周运动呢?命令如下图:
rosservice
是跟服务相关的。
如果想再来一个海龟,可以发送请求服务spawn
,命令:rosservice call /spawn
然后Tab,输入具体的数据内容。具体数据内容:包括新产生海龟的x和y位置、角度theta和新产生海龟的name。这里取名name为turtle2
,然后回车,命令执行如下:
注意我们回车之后,会在终端回显一个name,这个是服务器端返回的数据(response),表示我们的请求(request)是成功的!
产生成功之后,我们可以看一下当前所有的话题列表!
可以发现有了海龟2的话题,我们同样可以像操作海龟1一样进行订阅和发布话题!如我们让海龟2移动起来,操作命令如下:
rqt_plot
:绘图工具,可以把ROS中话题的数据变成曲线绘制出来(可以发现可视化工具都是以rqt开头的!)
默认打开后,如下图所示:
我们删除左上角已有的/
,重新输入/
,会出现所有话题的下拉列表,我们选择/turtle2/pose
,然后回车,效果如下图:
上图运动太快,不利于观察,我们修改x轴的单位,如下图:
rqt_plot
可以大大方便我们后面的开发调试!
本讲作业毫无难度,这里不再赘述!