一些基本概念
- ros功能包(package)
- ros功能包清单(package manifest):package.xml
- ros消息(message):在ros框架中,节点(node)之间通过将消息发布到话题(topic)中实现彼此的异步通信,话题是一种简单的数据结构。消息文件的扩展名为
.msg
,位于功能包的msg文件夹中,其中的内容是一些类型字段 - ros服务(service):ros节点通过系统服务的调用来同步交换请求(request)和响应(response)消息。这些请求和响应消息位于SRV文件夹中,扩展名为
.srv
- ros元功能包清单(metapackage manifest)
- ros元功能包(metapackage)
工作空间
# ros正在使用的工作空间
echo $ROS_PACKAGE_PATH
# 初始化工作空间(在catkin_ws/src文件夹下)
catkin_init_workspace
# 编译工作空间(在catkin_ws文件夹下)
catkin_make
# 编译功能包
catkin_make --pkg <package name>
# 配置,激活工作空间
source devel/setup.bash
# 对全局进行配置,在~/.bashrc脚本末尾添加一下命令
echo "source /opt/ros/melodic/setuo.bash" >>~/.bashrc
echo "source /home/username/catkin_ws/devel/setup.bash" >>~/.bashrc
在文件系统中导航的命令行工具
rospack profile
:向我们提供新添加都ros中功能包的信息(在安装新功能包时非常有用)rospack find [功能包]
:找到某条功能包路径rospack depends [功能包]
:检索某个功能包的依赖项rosls [功能包]
:用来显示功能包的内容roscd [功能包]
:更改工作目录
例如:
# 查找turtlesim功能包位置
rospack find turtlesim
# 查找已安装的元功能包
rosstack find ros_comm
# 列出功能包或元功能包中的文件
rosls turtlesim
# 进入其他工作目录
roscd turtlesim
pwd
创建功能包
可以在ros中手动创建功能包,但是推荐使用 catkin_creat_pkg
在命令行中完成。
该命令语法如下:
catkin_creat_pkg [packgage_name] [dependency1] [dependency2]
例如:
cd ~/catkin_ws/src
catkin_creat_pkg chapter2_tutorials std_msgs roscpp
# std_msgs 功能包:公共消息类型和其他基本消息类型
# roscpp 功能包:ros的c++实现,提供客户端库
ros各功能的工作方式
节点管理
-
rosbash
:用于ros节点进行自检 -
rosnode
:显示关于节点的信息,例如列出当前正在运行的节点
例如:
# 打印有关节点的信息
rosnode info [node]
# 结束一个正在运行的节点或发送一个给定的信号
rosnode kill [node]
# 列出所有的活动节点
rosnode list
# 列出在特定机器上运行的节点或列出机器
rosnode machine hostname
# 用来测试节点的连通性
rosnode ping [node]
# 清除不可达节点的注册信息
rosnode cleanup
话题管理
- 一个话题可以有多个订阅者和多个发布者,但是多个不同节点发布相同主题时,有可能冲突
- ros节点默认使用基于tcp/ip的TCPROS传输方法。另一种传输方式是UDPROS
rostopic
:处理话题工具
例如:
# 显示话题使用的带宽
rostopic bw /topic
# 将消息打印到屏幕上
rostopic echo /topic
# 根据类型查找话题
rostopic find message_type
# 显示话题的发布频率
rostopic hz /topic
# 打印有关话题的信息,如消息类型、发布者和订阅者
rostopic info /topic
# 打印有关话题的列表信息
rostopic list
# 向一个话题发布指定类型的消息
rostopic pub /topic type args
# 显示给定话题的消息类型
rostopic type /topic
消息管理
- ros节点通过向话题发布消息来实现相互之前的通信
- 消息类型遵循标准ros命名约定:包的名称,然后是
.msg
文件的名称。 rosmsg
用来获取ros消息的信息
例如:
# 显示消息描述
rosmsg show [message]
# 列出所有消息
rosmsg list
# 显示消息的MD5校验和
rosmsg md5 [message]
# 列出功能包中的消息
rosmsg package [package_name]
# 列出包含消息的功能包
rosmsg package [package_1][package_2]
服务管理
- ros话题是单向的,而服务是双向的
- ros服务使用srv文件中的一对消息,请求(request)数据类型和响应(response)数据类型来定义
- ros服务中还有一个用来检验节点的MD5校验和,如果校验和是相等的,那么服务器才会响应客服端
- ros有两个和服务相关命令行工具,
ROSRV
和ROSService
。
ROSRV
,类似于ROSMSG,用于获取服务类型的信息
RosService
,用以列出服务列表和查询正在运行的ROS服务
例如
# 使用给定的参数调用服务
rosservice call /service_args
# 根据给定服务类型查找服务
rosservice find service_type
# 打印有关给定服务的信息
rosservice info /service
# 列出系统上运行的活动服务
rosservice list
# 打印给定服务的服务类型
rosservice type /service
# 打印服务的PORPC URI
rosservice uri /service
ros参数服务器
rosparam
可对ros参数服务器上的参数进行操作
# 为给定参数设置值
rosparam set [parameter_name] [value]
# 获取给定参数的值
rosparam get [parameter_name]
# 从保存的yaml文件加载参数
rosparam load [YAML file]
# 将现有ROS参数转存到YAML文件中
rosparam dump [YAML file]
# 删除给定参数
rosparam delete [parameter_name]
# 列出现有参数名称
rosparam list
ros消息记录包
- 消息记录包是ros中用于存储消息、话题和服务的文件格式,扩展名为
.bag
rosbag
记录数据
例如
# 将指定的话题记录到命令中给出的消息记录包文件中
rosbag record [topic_1][topic_2] -o [bag_name]
# 记录全部内容
rosbag -a [bag_name]
# 回放已有的消息记录包文件
rosbag play [bag_name]
话题、服务的一些指令
发布话题
rostopic pub [topic] [msg_type] [args]
调用服务
rosservice call [service] [args]
保存参数服务器的内容
rosparam dump [file_name]
加载参数服务器的内容
rosparam load [file_name] [namespace]