ROS系统架构及概念
ROS系统主要的构架:文件系统,计算图集,开源社区。
2.1ROS文件系统级
综合功能包(含有多个功能包,综合功能包清单),功能包(含有功能包清单(.xml文件),消息类型(msg),服务类型(srv),src(代码))。
2.1.1工作空间
工作空间:一个包含功能包、可编译源文件或编译包的文件夹。
工作空间主要包括:源文件空间,编译空间,开发空间。
源文件空间:在src文件夹里,放置了功能包、项目、克隆包等。重要文件夹CMakeList.txt,当你在工作空间中配置功能包时,src文件夹CMakeList.txt调用CMake。这个文件通过命令catkin_init_workspace创建。
编译空间:在build文件夹里,CMake和catkin为功能包和项目保持缓存信息、配置和其他中间文件。
开发空间:devel文件夹用来保存编译后的程序。
在ROS配置的编译空间目录中,可以用以下两个命令来编辑可执行文件:
1.$ cmake packageToBuild/ $ make 2.$ cd workspace $ catkin_makso
2.1.2功能包
功能包是一种特定的文件结构和文件组合,结构为:
1.include/package_name/:此目录包含了你需要的库的头文件
2.msg/:非标准信息放置位置。
3.scripts/:包括了Bash、Python或者任何其它脚本文件的可执行文件。
4.src/:储存源文件的地方。
5.srv/:表示服务类型。
6.CMakeList.txt:CMake的生成文件。
7.package.xml:这是功能包清单。
创建、修改或使用功能包的命令:
1.rospack:查找工作空间。2.catkin_create_pkg 创建新的功能包。3.catkin_make 编译工作空间。4.rosdep 安装功能包的依赖项。5.rqt_dep:查看包的依赖关系图。
文件夹和功能包直接移动文件的相关命令:
roscd 更改目录 rosed 编辑文件 roscp 复制文件 rosd 列出功能包的目录 rosls 列出功能包小的文件。
综合功能包:只有一个文件的特定包,它是package.xml。
2.1.3消息
消息类型描述语言来描述ROS节点发布的数据值。消息类型具备两个主要部分:字段和常量。字段定义了要在消息中传输的数据类型,穿了用于定义字段的名称。 文件的后缀为.msg
msg文件示例:int32 id ;float32 vel
ROS消息中有一个特殊数据类型是报文头,主要用于添加时间戳、坐标位置等。
ROS处理消息的命令:rosmsg 输出消息定义信息,并可以找到使用该消息类型的源文件。
2.1.4 服务
服务的描述存储在功能包的srv/子目录下.srv文件中。
2.2 理解ROS计算图级
节点:主要的计算执行进程。如果你想要一个可以与其他节点进行交互的进程,那么你需要创建一个节点,并将此节点连接到ROS网络。
消息:节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的信息数据。
主题:每个消息都必须有一个名称来被ROS网络路由。每个消息都要发送到相应的主题。当一个节点发送数据时,我们就说该节点向主题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。主题的名称必须独一无二。
服务:服务可以允许我们直接与某个节点进行交互。服务的名称唯一。
2.2.1 节点
处理节点的工具:
rosnode info NODE 输出当前节点信息
rosnode kill NODE 结束当前运行节点进程或发送给定信号
rosnode list 列出当前活动节点
rosnode machine hostname 列出某一特定计算机上运行的节点或列出主机的名称。
rosnode ping NODE 测试节点间的连通性。
rosnode cleanup 将无法访问节点的注册信息删除。
改变主题名称:$ rosrun book_tutorials tutorialx topic1:=/levell/topic1 此命令将主题的名称topic1改成了/levell/topic1
更改节点中的参数:$ rosrun book_tutorials tutorialx _param:=9.0 参数设置成了浮点数9.0
2.2.2 主题
每个主题都是强类型,发布到主题上的消息必须与主题的ROS消息类型相匹配,并且节点只能接收类型匹配的消息。节点要想订阅主题,就必须具有相同的消息类型。
主题操作工具:
rostopic bw/topic 显示主题所使用的带宽。
rostopic echo/topic 将消息输出到屏幕。
rostopic find message_type 按照类型查找主题。
rostopic hz/topic 显示主题的发布频率。
rostopic info/topic 输出活动主题、发布的主题、主题订阅者和服务的信息。
rostopic list 输出活动主题的列表
rostopic pub/topic type args 将数据发布到主题。它允许我们直接从命令行中对任意主题创建和数据发布
2.2.3 服务
当你需要直接与节点通信并获得应答时,将无法通过主题实现,而需要使用服务。服务类型是功能包名称和.srv文件名称的组合。例如chapter2_tutorials/srv/chapter2_srv1.srv文件的服务类型是chapter2_tutorials/chapter2_srv1。
服务的操作工具: rosservice call/service args 根据命令行参数调用服务。
rosservice find msg-type 根据服务类型查询服务。
rosservice info/service 输出服务信息。
rosservice list 输出活动服务清单。
rosservice type/service 输出服务类型。
rosservice uri/service 输出服务的ROSRPC URI
2.2.4 消息
消息的命名方式:功能包名称/.msg文件名称。例如,std_msgs/msg/String.msg的消息类型是std_msgs/String。
消息的操作工具:
rosmsg show 显示一条消息的字段。
rosmsg list 列出所有消息。
rosmsg package 列出功能包的所有消息。
rosmsg packages 列出所有具有该消息的功能包。
rosmsg users 搜索使用该消息类型的代码文件。
rosmsg md5 显示一条消息的MD5求和结果。
2.2.5 消息记录包
消息记录包是由ROS创建的一组文件。它使用.bag格式保存消息、主题、服务、和其他ROS数据信息。
2.2.6 节点管理器(ROS Master)
ROS节点管理器向ROS系统中其他节点提供命名和注册服务。节点管理器的作用是使ROS节点之间能够相互查找。
2.3 系统试用练习
2.3.1 文件系统导览
$ rospack find turtlesim //获得功能包turtlesim的路径
$ rosstack find ros_comm //获得综合功能包ros_comm的路径
$ rosls turtlesim //获得功能包下面的文件列表
2.3.2 创建工作空间
$ echo $ROS_PACKAGE_PATH //查看ROS正在使用的工作空间
创建工作空间:
$ mkdir -p ~/dev/catkin_ws/src //建空文件夹
$ cd ~/dev/catkin_ws/src
$ catkin_init_workspace //初始化工作空间,创建CMakelist.txt 文件
$ cd ~/dev/catkin_ws
$ catkin_make //编译工作空间
$ source devel/setup.bash //完成配置,从新加载setup.bash 文件。
2.3.3 创建ROS功能包和综合功能包
使用以下命令在之前建立的工作空间创建新的功能包:
$ cd ~/dev/catkin_ws/src
$ catkin_craete_pkg chapter2_tutorials std_msgs roscpp //此命令格式包括了功能包的名称和依赖项
对功能包操作的相关命令:
rospack profile //通知新添加的内容
rospack find chapter2_tutorials //查找路径
rospack depends chapter2_tutorials //查看依赖关系
2.3.4 编译ROS功能包
$ cd ~/dev/catkin_ws/
$ catkin_make //必须在工作空间文件夹里运行catkin_make命令
2.3.5 使用ROS节点 2.3.6 主题与节点交互 2.3.7 使用服务 (略)
2.3.8 使用参数服务器
参数服务器用于存储所有节点均可访问的共享数据。
操作命令:
rosparam set parameter value 设置参数值
rosparam get paraeter 获取参数值
rosparam load file 从文件加载参数
rosparam dump file 将参数保存到一个文件
rosparam delete parameter 删除参数
rosparam list 列出所有参数名
