1.文件系统
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest (package.xml): 清单,是对软件包相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
1.1文件系通工具
rospack:获取软件包的有关信息
$ rospack find roscpp
roscd:切换(cd)工作目录
$ roscd roscpp
rosls:直接按软件包的名称而不是绝对路径执行ls命令(罗列目录)。
$ rosls roscpp_tutorials
Tab:自动代码补全和ubuntu自带的补全一样的效果
工具命令和系统命令很相似都只是加了前缀 ROS
2.ROS程序包
2.1包的组成:必须包含catkin compliant package.xml文件
注意:程序包必须在catkin空间中才行,空间目录中必须包含src目录用于存放程序包
2.2 创建
$ cd ~/catkin_ws/src
$ catkin_create_pkg <包名> <依赖环境>
2.3 依赖查询
$ rospack depends1 <包名> 一级依赖
$ rospack depends1 <一级依赖> 间接依赖
2.4 编译
# 在catkin工作空间下
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
下面开始学习打脑壳的东西: 节点
我们先来看一下概念:
- Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
-
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
-
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
-
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
-
rosout: ROS中相当于stdout/stderr。
-
roscore: 主机+ rosout + 参数服务器 (ros的主要服务,每次都要提前打开)。
ros运行起来后,我们需要查看系统的相关参数:
- rosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点。rosnode info 命令返回的是关于一个特定节点的信息
- rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
ROS话题:系统中节点之间的通讯是依靠话题完成的,例如节点A发布数据到话题B且C要接受这个数据的话,就需要订阅话题B
我们使用rqt_graph工具来记录查看系统运行情况:$ rosrun rqt_graph rqt_graph (如果没有就装一下)
工具中红色为话题,蓝色,绿色为节点
rostopic命令工具能让你获取有关ROS话题的信息:
- $ rostopic -h 帮助选项
- $ rostopic echo [topic] 查看发布数据到某个话题
- $ rostopic list -v 查看所发布和订阅的话题及其类型的详细信息
ROS Messages:话题之间的通讯是在节点之间完成,所以必须保持相同类型的消息
$ rostopic type /turtle1/cmd_vel 查看所发布话题的消息类型
$ rosmsg show geometry_msgs/Twist 查看所发布话题的消息类型
$ rostopic pub [topic] [msg_type] [args] 把数据发布到当前某个正在广播的话题上
$ rostopic hz [topic] 查看数据发布的频率
$ rosrun rqt_plot rqt_plot 发布到某个话题上的数据变化图形
下次学点新的ROS服务和参数