ROS 常用命令(ROS虽好,只是比较费终端)
前提条件:
安装小乌龟模拟器:
$ sudo apt-get install ros-<<kinetic>>-ros-tutorials
请使用ROS发行版名称(比如 electric、fuerte、groovy、hydro、indigo、kinetic、melodic)替换掉。
a. 文件系统工具
- rospack = ros+pack(age) : provides information related to ROS packages
- rosstack = ros+stack : provides information related to ROS stacks
- roscd = ros+cd : changes directory to a ROS package or stack
- rosls = ros+ls : lists files in a ROS package
- roscp = ros+cp : copies files from/to a ROS package
- rosmsg = ros+msg : provides information related to ROS message definitions
- rossrv = ros+srv : provides information related to ROS service definitions
- rosmake = ros+make : makes (compiles) a ROS package
b. 工作空间
$ source /opt/ros/kinetic/setup.bash $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/ $ catkin_make $ source devel/setup.bash $ echo $ROS_PACKAGE_PATH
一个简单的工作空间也许看起来像这样:
workspace_folder/ -- WORKSPACE src/ -- SOURCE SPACE CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin package_1/ CMakeLists.txt -- CMakeLists.txt file for package_1 package.xml -- Package manifest for package_1 ... package_n/ CMakeLists.txt -- CMakeLists.txt file for package_n package.xml -- Package manifest for package_n
c. 程序包
$ cd ~/catkin_ws/src # 现在使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy: $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp # 一级依赖 $ rospack depends1 beginner_tutorials # 间接依赖 $ rospack depends1 rospy
d. 编译
$ cd ~/catkin_ws/ $ catkin_make # build 目录是build space的默认所在位置,同时cmake 和 make也是在这里被调用来配置并编译你的程序包。devel 目录是devel space的默认所在位置, 同时也是在你安装程序包之前存放可执行文件和库文件的地方。
1. 图概念概述:
Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
rosout: ROS中相当于stdout/stderr。
roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
2. 节点
#roscore运行所有ROS程序前首先要运行的命令。
$ roscore
#rosnode 显示当前运行的ROS节点信息。
$ rosnode -h
Commands:
rosnode | ping | test connectivity to node |
rosnode | list | list active nodes |
rosnode | info | print information about node |
rosnode | machine | list nodes running on a particular machine or list machines |
rosnode | kill | kill a running node |
rosnode | cleanup | purge registration information of unreachable nodes |
#rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
格式:rosrun [package_name] [node_name]
例子:
# 启动小乌龟 $ rosrun turtlesim turtlesim_node # 自定义节点名 $ rosrun turtlesim turtlesim_node __name:=my_turtle # 通过键盘远程控制小乌龟 $ rosrun turtlesim turtle_teleop_key
3. 话题
rostopic命令工具能让你获取有关ROS话题的信息。
$ rostopic -h
Commands:
rostopic | bw | display bandwidth used by topic |
rostopic | delay | display delay of topic from timestamp in header |
rostopic | echo | echo可以显示在某个话题上发布的数据。 |
rostopic | find | find可以查找某个话题 |
rostopic | hz | hz命令可以用来查看数据发布的频率。 |
rostopic | info | info可以打印话题的信息 |
rostopic | list | list能够列出所有当前订阅和发布的话题。 |
rostopic | pub | pub可以把数据发布到当前某个正在广播的话题上。 |
rostopic | type | type 命令用来查看所发布话题的消息类型。 |
例子: # 发布数据到话题 $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' # 以上命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度开始移动。 $ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' # 这条命令以1Hz的频率发布速度命令到速度话题上。
4. rqt程序包
4.1 rqt_graph能够创建一个显示当前系统运行情况的动态图形。
安装:
$ sudo apt-get install ros–rqt
$ sudo apt-get install ros–rqt-common-plugins
命令:
$ rosrun rqt_graph rqt_graph
如果你将鼠标放在/turtle1/command_velocity(kinetic版为/turtle1/cmd_vel)上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key节点正通过一个名为 /turtle1/command_velocity的话题来互相通信。
4.2 rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。
命令:
$ rosrun rqt_plot rqt_plot
5. 消息
rosmsg命令来查看消息的详细情况
$ rosmsg show geometry_msgs/Twist
$ rostopic type /turtle1/cmd_vel | rosmsg show
6. 服务
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)。
rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。
rosservice | list | 输出可用服务的信息 |
rosservice | call | 调用带参数的服务 |
rosservice | type | 输出服务类型 |
rosservice | find | 依据类型寻找服务find services by service type |
rosservice | uri | 输出服务的ROSRPC uri |
例子:
$ rosservice list # 重置(reset), 清除(clear), 再生(spawn), 终止(kill) # 看看clear服务的类型: $ rosservice type clear # std_srvs/Empty说明不需要参数,可以进行无参数调用 $ rosservice call clear # 效果服务清除了turtlesim_node的背景上的轨迹。 # 查看再生(spawn)服务的信息,我们来了解带参数的服务: $ rosservice type spawn| rossrv show # 这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。 $ rosservice call spawn 2 2 0.2 ""
7. 参数
rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮点型, one是字符串, true是布尔, [1, 2, 3]是整型列表, {a: b, c: d}是字典. rosparam有很多指令可以用来操作参数
rosparam | set | 设置参数 |
rosparam | get | 获取参数 |
rosparam | load | 从文件读取参数 |
rosparam | dump | 向文件中写入参数 |
rosparam | delete | 删除参数 |
rosparam | list | 列出参数名 |
例子: # 列出参数名 $ rosparam list # 修改背景颜色的红色通道: $ rosparam set background_r 150 # 调用清除服务使得修改后的参数生效: $ rosservice call clear # 获取背景的绿色通道的值: $ rosparam get background_g # 显示参数服务器上的所有内容: $ rosparam get / # 将所有的参数写入params.yaml文件: $ rosparam dump params.yaml # 将yaml文件重载入新的命名空间,比如说copy空间: $ rosparam load params.yaml copy
8. 日志
# rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。 $ rosrun rqt_console rqt_console # rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。 $ rosrun rqt_logger_level rqt_logger_level # 命令行设置日志级别 $ rosservice call /node_name/set_logger_level ros.package_name DEBUG
9. roslaunch
# 先切换到beginner_tutorials程序包目录下:
$ roscd beginner_tutorials
$ mkdir launch
$ cd launch
# 创建turtlemimic.launch文件,内容如下
# 运行launch文件 $ roslaunch beginner_tutorials turtlemimic.launch
10. 消息和服务
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string
- time, duration
- other msg files
- variable-length array[] and fixed-length array[C]
rosmsg | show | Show message description |
rosmsg | info | Alias for rosmsg show |
rosmsg | list | List all messages |
rosmsg | md5 | Display message md5sum |
rosmsg | package | List messages in a package |
rosmsg | packages | List packages that contain messages |
rossrv | show | Show service description |
rossrv | info | Alias for rossrv show |
rossrv | list | List all services |
rossrv | md5 | Display service md5sum |
rossrv | package | List services in a package |
rossrv | packages | List packages that contain services |
例子:
#~/catkin_ws/src/beginner_tutorials/msg/Num.msg int64 num
# ~/catkin_ws/src/beginner_tutorials/srv/AddTwoInts.srv # srv 文件copy自其他包 # roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv # srv文件分为请求和响应两部分,由'---'分隔。样例如下 int64 a int64 b --- int64 sum
新建msg或srv后,对package.xml和CMakeLists.txt进行修改:
package.xml文件
#确保msg文件被转换成为C++,Python和其他语言的源代码:
<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
CMakeLists.txt文件
# 利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。 find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) # 利用catkin_package函数,确保你设置了运行依赖。 catkin_package( ... CATKIN_DEPENDS message_runtime ... ...) # add_message_files 添加msg文件 add_message_files( FILES Num.msg ) # add_service_files 添加srv文件 add_service_files( FILES AddTwoInts.srv )
11. 录制与回放数据
rosbag | check | Determine whether a bag is playable in the current system, or if it can be migrated. |
rosbag | compress | Compress one or more bag files. |
rosbag | decompress | Decompress one or more bag files. |
rosbag | filter | Filter the contents of the bag. |
rosbag | fix | Repair the messages in a bag file so that it can be played in the current system. |
rosbag | help | |
rosbag | info | Summarize the contents of one or more bag files. |
rosbag | play | Play back the contents of one or more bag files in a time-synchronized fashion. |
rosbag | record | Record a bag file with the contents of specified topics. |
rosbag | reindex | Reindexes one or more bag files. |
栗子:
# 如前,启动小王八 roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key # 录制所有话题 rosbag record -a # 或者录制指定话题 rosbag record -O subset /turtle1/cmd_vel /turtle1/pose # turtle_teleop_key界面动动小王八 # 播放bag文件例的数据 rosbag play *.bag
参考:
ROS文件系统介绍
创建一个工作空间
创建ROS程序包
编译ROS程序包
理解ROS节点
理解ROS话题
理解ROS服务和参数
使用rqt_console 和 roslaunch
创建ROS消息和ROS服务
录制与回放数据