文件系统:
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest (package.xml): 清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
rospack find [包名称] :返回软件包的位置
roscd [本地包名称[/子目录]] :直接cd到软件包的位置
pwd:查看当前工作目录
roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:
echo $ROS_PACKAGE_PATH
ROS_PACKAGE_PATH环境变量应该包含那些保存有ROS软件包的路径,并且每个路径之间用冒号分隔开来。
roscd log :cd到保存ros运行日志的文件夹
rosls:可以按软件包的名字来执行ls
创建ros程序包
如何使用roscreate-pkg或catkin创建一个新程序包,并使用rospack查看程序包的依赖关系?
一个程序包要想成为catkin程序包必须符合以下要求:
包含catkin compliant package.xml文件:即编译时的package.xml文件
包含一个catkin 版本的CMakeLists.txt文件
每个目录下只能有一个程序包。
开发catkin程序包的一个推荐方法是使用catkin工作空间
如何使用catkin_create_pkg命令来创建一个新的catkin程序包?
切换到之前通过主catkin工作空间中的src目录下:
cd ~/catkin_ws/src
使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
将会创建一个名为beginner_tutorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。
依赖关系:
在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包:
rospack depends1 beginner_tutorials
在很多情况中,一个依赖包还会有它自己的依赖包,比如,rospy还有其它依赖包。
rospack depends1 rospy
编译程序包
事先source你的环境配置(setup)文件:
source /opt/ros/kinetic/setup.bash
使用 catkin_make,在catkin工作空间下(cd catkin_ws)
catkin_make [make_targets] [-DCMAKE_VARIABLES=...] (一般直接catkin_make也行)
节点
Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
rosout: ROS中相当于stdout/stderr。
roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
ROS客户端库允许使用不同编程语言编写的节点之间互相通信:
rospy = python 客户端库
roscpp = c++ 客户端库
roscore 是你在运行所有ROS程序前首先要运行的命令。
使用 rosnode 像运行 roscore 一样看看在运行什么...: rosnode list
rosnode info 命令返回的是关于一个特定节点的信息:rosnode info /rosout
rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
rosrun [package_name] [node_name]:
rosrun turtlesim turtlesim_node
也就是这个包里的node_name执行文件 并不是给节点取个名字,这个名字是初定好的
如果重新配置名称:
rosrun turtlesim turtlesim_node __name:=my_turtle 此处为自定义名字 以后rosnode list下这个节点就被重命名为my_turtle
话题
节点之间是通过一个ROS话题来互相通信的,turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息,使用rqt_graph来显示当前运行的节点和话题。
rosrun rqt_graph rqt_graph
直接使用rqt_graph 也可
rostopic echo可以显示在某个话题上发布的数据。 相当于再新建一个节点来订阅此话题
rostopic echo /turtle1/cmd_vel
rostopic list能够列出所有当前订阅和发布的话题。
rostopic list -v
发布器和订阅器之间必须发送和接收相同类型的消息,话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型
rostopic type [topic]
使用rosmsg命令来查看消息的详细情况:
rosmsg show geometry_msgs/Twist(消息类型)
发布消息
rostopic pub可以把数据发布到当前某个正在广播的话题上。
rostopic pub [topic] [msg_type] [args]:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
其中:-1(单个破折号)这个参数选项使rostopic发布1条消息后马上退出。
-- 接下来的参数部分都不是命令选项
改为 -r 1 按1赫兹的频率持续发消息
rostopic hz
使用 rqt_plot
可以实时显示一个发布到某个话题上的数据变化图形
rosrun rqt_plot rqt_plot
服务和参数
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令,如下所示:
rosservice list 输出可用服务的信息:
得到 例如 /clear
使用rosservice type命令更进一步查看服务的类型
rosservice type [service]: rosservice type clear
得到 std_srvs/Empty
服务的类型为空(empty),这表明在调用这个服务是不需要参数
使用rosservice call命令调用服务:
rosservice call [service] [args]
无参数调用clear :rosservice call clear
对于带参数的服务
使用rosservice type [service]| rossrv show 来展示需要怎样的参数
rosparam 参数服务器
rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。
看看现在参数服务器上都有哪些参数:
rosparam list
修改参数:
rosparam set [param_name] [param]
调用清除服务使其生效
rosservice call clear
获取特定参数的具体值
rosparam get [param_name]
rosparam get / (所有值)
存储参数: 将所有的参数写入
rosparam dump params.yaml (最后一项是文件名,必须是yaml文件)
读取:rosparam load [file_name] [namespace] 最后一项是名空间 如果用copy似乎就可以是全部的值