目录
1、ROS的结构和通信机制
ROS结构
ROS常用命令
ROS工作空间文件结构
工作空间
1、ROS的结构和通信机制
ROS结构
ROS中有一些很重要的概念,节点,节点管理器、工作空间、功能包
节点(node)
在机器人系统中,需要同时实现多个功能,例如我想让机器人实现跟踪射击,那么可以拆分成,镜头跟踪,调整枪的位置,开枪射击。那么这里需要实现三个节点,每一个节点实现一个功能,每个节点对应功能包中的一个可执行文件。
节点管理器
节点通过节点管理器报告注册信息,只有通过节点管理器,节点和节点之间才能建立起联系,只有通过节点管理器注册,才能实现后续的节点间的通信。
工作空间
简单来说,工作空间就是一个文件夹,用于是存放工程开发的相关文件,类似用Keil整个IDE开发STM32时,会有一个工程文件,文件下包含头文件,编译过程生成的文件,源码等等。关于工作空间的详细结构可以看后面的详细介绍。
功能包
功能包时放置源码的最小单元。源码(.cpp文件或者.py文件)必须放在功能包里面,功能包的路径一定要在src的路径下。除了源码文件,功能包还可以放置.cpp的.h文件launch文件、param参数文件,map地图文件。关于功能包的详细介绍可以看下面。
ROS常用命令
roscore:启动ROS
使用ROS的第一件事就是运行roscore命令,roscore启动master,master负责ros的节点注册,参数服务器、话题通信管理等等。
rosnode:是用于获取节点信息的命令
rosnode ping 测试到节点的连接状态
rosnode list 列出活动节点
rosnode info 打印节点信息
rosnode machine 列出指定设备上的节点
rosnode kill 杀死某个节点
rosnode cleanup 清除不可连接的节点
清除无用节点,启动乌龟节点,然后 ctrl + c 关闭,该节点并没被彻底清除,可以使用 cleanup 清除节点
rostopic:包含rostopic命令行工具,用于显示有关ROS主题的调试信息,包括发布者、订阅者、发布频率和ROS消息,它还包含一个实验性Python库,用于动态获取有关主题的信息并交互。
rostopic bw 显示主题使用的带宽
rostopic delay 显示带有header的主题延迟
rostopic echo 打印消息到屏幕
rostopic find 根据类型查找主题
rostopic hz 显示主题的发布频率
rostopic info 显示主题有关的信息
rostopic list 显示所有活动状态下的主题
rostopic pub 将数据发布到主题
rostopic type 打印主题类型
rosmsg:是用于显示有关ROS消息类型的信息的命令行工具
rosmsg show 显示消息描述
rosmsg info 显示消息信息
rosmsg list 列出所有消息
rosmsg md5 显示md5加密后的消息
rosmsg package 显示某个功能包下的所有消息
rosmsg packages 列出包含消息的功能包
rosservice:包含用于列出和查询ROSService的rosservice的命令行工具
rosservice args 打印服务参数
rosservice call 使用提供的参数调用服务
rosservice find 按照服务类型查找服务
rosservice info 打印有关服务的信息
rosservice list 列出所有活动的有关服务
rosservice type 打印服务类型
rosservice uri 打印服务的ROSRPC URI
rossrv:是用于显示有关ROS服务类型的信息的命令行工具,与rosmsg使用语法高度相似
rossrv show 显示服务消息详情
rossrv info 显示服务消息相关信息
rossrv list 列出所有服务信息
rossrv md5 显示md5加密后的服务消息
rossrv package 显示某个包下所有服务消息
rossrv packages 显示包含服务消息的所有包
rosparam:包含rosparam命令行工具,用于使用YAML编码文件在参数服务器上获取和设置ROS参数
rosparam set 设置参数
rosparam get 获取参数
rosparam load 从外部文件加载参数
roaparam dump 将参数写出到外部文件
rosparam delete 删除参数
rosparam list 列出所有参数
这里我对回调函数的理解不够深入,这里再说明一下。
订阅话题:订阅者接收话题信息的过程类似于STM32的外部中断。当接收到数据时,进入回调函数,在回调函数中对接收到的数据进行处理。
例如
void chatterCallback(const topic::type &my_msg)
{
int grade;
ROS_INFO_STREAM(“I got new msg”);
grade=my_msg.grade;
}
ROS工作空间文件结构
工作空间
ROS需要在工作空间的环境下运行,工作空间简单来说是一个文件夹,里面装载了ROS的工程项目,其中包含3个文件夹:src、devel、build。在工作空间下的三个文件夹中,src文件夹是我们重点需要去理解的,其中功能包就是放在src路径下的,如下图所示
这里顺便提下,使用C++开发ROS需要在工作空间下编译源码生成可执行文件,编译的指令是在工作空间路径下执行:catkin_make
功能包
为了更好的区分实现不同代码的空间,可以将实现不同功能的文件独立成每一个功能包,这样可以方便管理哦
下面我们以“turn_on_wheeltec_robot”这个功能包讲解下功能包的结构,可以看到这个功能包的路径下包含多个文件夹。
include文件夹
include路径下包含的是cpp文件的头文件,类似于C语言里面的.h文件,如下图所示
launch文件夹
launch路径下包含的是.launch文件,launch文件里面封装好了要运行的节点,写入的参数,加载的参数文件等。rosrun 命令每次只能运行一个节点,当运行一个机器人时要同 第 11 页 共 13 页 时运行多个节点就需要用到 roslaunch 了,roslaunch 命令运行一个 launch 文件, 一个 luanch 文件可以包多个节点。 如果需要运行下面的 navigation_top_diff.launch 文件,如图 2-2-4 所示,用的 指令是“roslaunch turn_on_wheeltec_robot navigation_top_diff.launch”。运行 launch 文件的指令的结构是:[roslaunch][空格][功能包名][空格][launch 文件名]
运行roslaunch 命令不需要运行roscore,运行roslaunch命令时,会自动检测是否开启了roscore,如果没有开启则自动开启roscore。
launch文件的语法如下:
XML文件必须要包含一个根元素,launch文件中的根元素采用<launch>标签定义,文件中的其他内容都必须包含在这个标签之中“
<launch>
...
</launch>
启动 ROS 系统的核心是启动 ROS 节点,采用标签定义,语法如下: 启动一个节点至少需要三个属性:name、pkg 和 type。 name:属性定义节点运行的名称,可自定义; pkg:属性定义节点所在的功能包名称; type:属性定义节点的可执行文件名称,也可以是.py 文件; 关于参数设置的标签元素有两个:、分别代表 parameter 和 argument。param 和 arg 的作用都是写入参数,但是 param 是 ROS 系统运行中的 参数,存储在参数服务器中。在 launch 文件中可以通过标签加载 param
launch 文件执行后,param 就加载到 ROS 的参数服务器上了。 arg 标签用来在 launch 文件中定义参数,arg 和 param 在 ROS 里有根本性的 区别,就像局部变量和全局变量的区别一样。arg 不储存在参数服务器中,不能 提供给节点使用,只能在 launch 文件中使用。param 则是储存在参数服务器中, 可以被节点使用。 我们注意到,launch 文件夹里面还有一个 inculde 文件夹,这个文件夹主要 是 存 放 一 些 被 其 他 launch 文 件 调 用 的 launch 文 件 。 如 图 2-2-5 所 示 是 navigation_4wheel_diff.launch 文件的内容。
map文件夹
map 路径下放的是激光雷达建好的地图文件,一个地图包含一个.pgm 和一 个.yaml 文件。其中.pgm 是图片文件,图片的内容就是地图,yaml 是参数文件, 记录一些坐标参数以及跟.pgm 文件进行绑定。如果直接以文本的形式打开.pgm 文件会显示成乱码,用图片编辑器打开就可以看到一张建好的地图,如图 2--2-6 所示。
param文件夹
param路径下存放的是.yaml的参数文件,对于一个机器人系统而言,会有很多参数,如果每个参数都是在CPP文件中,更改起来会很麻烦,因为这些文件修改之后需要编译。因此会有参数集中放置的文件,运行时只需要加载参数文件就可以了。如果修改也只需要保存之后,即可重新运行。
costmap_common_params:机器人外形、导航参数; dwa_local_planner_params:局部路径规划器参数,有一些机器人里面使用 tel_local_planner_params; Global_costmap_params:建图得到的地图文件调用参数; Local_costmap_params:机器人导航时的实时地图参数; Move_base_params:机器人导航路径规划相关参数; Wheeltec_smoother:机器人平滑控制参数,主要是对速度、加速度进限制。
src
src路径下的是该功能包的.cpp文件,CPP文件里面的内容是该功能包需要实现的功能
scripts文件夹
放置可能直接运行的python文件
CMakeLists.txt文件
编译器编译功能包的规则和功能包清单。
Wheeltec_udev.sh文件按
串口号固定脚本文件,用于给USB外设创建固定的别名。
评论(0)
您还未登录,请登录后发表或查看评论