ROS常用命令 & roscpp常用函数
1、查看ROS_PACKAGE_PATH环境变量
$ echo $ROS_PACKAGE_PATH
2、roscore 命令
roscore
命令是你在运行所有ROS程序前首先要运行的命令。
$ roscore
3、rosrun 命令
rosrun
允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
用法:
$ rosrun [package_name] [node_name]
例如:现在我们可以运行turtlesim包中的 turtlesim_node节点,你会看到打开了一个 turtlesim 窗口:
$ rosrun turtlesim turtlesim_node
再次使用下面的命令,即可运用键盘“前后左右”控制海龟运动:
$ rosrun turtlesim turtle_teleop_key
4、rqt_graph 命令
rqt_graph
能够创建一个显示当前系统运行情况的动态图形。rqt_graph
是rqt程序包中的一部分。如果你没有安装,请通过以下命令来安装:
$ sudo apt-get install ros-indigo-rqt
$ sudo apt-get install ros-indigo-rqt-common-plugins
用法:
rqt_graph
5、rosnode 命令
rosnode
显示当前运行的ROS节点信息
rosnode list 获得运行节点列表
rosnode info node-name 获得特定节点的信息
rosnode ping node-name 测试节点是否连通
rosnode kill node-name 终止节点
5.1、rosnode list 子命令
rosnode list
能够列出所有运行节点。
rosnode list
得到:
/rosout
/teleop_turtle
/turtlesim
rosout节点是只要运行了ros就会有的一个节点,其余节点与使用rqt_graph
命令得到的节点一样。
5.2、rosnode info 子命令
rosnode info
命令可以显示特定节点的信息。
$ rosnode info /turtlesim
得到:
--------------------------------------------------------------------------------
Node [/turtlesim]
Publications: (发布者)
* /rosout [rosgraph_msgs/Log]
* /turtle1/color_sensor [turtlesim/Color]
* /turtle1/pose [turtlesim/Pose]
Subscriptions: (订阅者)
* /turtle1/cmd_vel [geometry_msgs/Twist]
Services: (服务)
* /clear
* /kill
* /reset
* /spawn
* /turtle1/set_pen
* /turtle1/teleport_absolute
* /turtle1/teleport_relative
* /turtlesim/get_loggers
* /turtlesim/set_logger_level
contacting node http://wyz-vpc:36233/ ...
Pid: 3033
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound (51933 - 127.0.0.1:43790) [24]
* transport: TCPROS
* topic: /turtle1/cmd_vel
* to: /teleop_turtle (http://wyz-vpc:42245/)
* direction: inbound (53744 - wyz-vpc:40637) [32]
* transport: TCPROS
6、rostopic 命令
rostopic
命令能让你获取有关ROS话题的信息。
可以使用帮助选项查看rostopic的子命令:
$ rostopic -h
或
$ rostopic --help
可以看到:
Commands:
rostopic bw display bandwidth used by topic (显示话题使用的带宽)
rostopic delay display delay of topic from timestamp in header (从标题中的时间戳显示话题的延迟)
rostopic echo print messages to screen (将消息打印到屏幕)
rostopic find find topics by type (按类型查找话题)
rostopic hz display publishing rate of topic (显示话题的发布率)
rostopic info print information about active topic (打印有关运行中的话题的信息)
rostopic list list active topics (列出运行中的话题)
rostopic pub publish data to topic (将数据发布到话题)
rostopic type print topic or field type (打印话题或字段类型)
6.1、rostopic list 子命令
rostopic list
能够列出所有当前订阅和发布的话题。
6.1.1、查看帮助
可以使用帮助选项查看rostopic
的子命令:
$ rostopic list -h
可以看到:
Usage: rostopic list [/namespace]
Options:
-h, --help show this help message and exit(显示此帮助消息并退出)
-b BAGFILE, --bag=BAGFILE
list topics in .bag file(列出.bag文件中的主题)
-v, --verbose list full details about each topic(列出每个主题的完整详细信息)
-p list only publishers(仅列出发布商)
-s list only subscribers(仅列出订阅者)
--host group by host name(按主机名分组)
6.1.2、列出完整信息
在rostopic list
中使用 verbose
选项,这会显示出有关所发布和订阅的话题及其类型的详细信息。
$ rostopic list -v
可以得到:
Published topics:
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /turtle1/pose [turtlesim/Pose] 1 publisher
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
Subscribed topics:
* /rosout [rosgraph_msgs/Log] 1 subscriber
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
6.1.3、仅列出发布者和订阅者:
$ rostopic list
得到:
$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
6.1.4、仅列出发布者:
$ rostopic list -p
得到
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
6.1.5、仅列出订阅者
$ rostopic list -s
得到:
/rosout
/turtle1/cmd_vel
6.2、rostopic echo 子命令
rostopic echo
可以显示在某个话题上发布的数据。
$ rostopic echo /turtle1/color_sensor
6.3、rostopic type 子命令
rostopic type
命令用来查看所发布话题的消息类型。
$ rostopic type /turtle1/color_sensor
turtlesim/Color
$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
6.4、rostopic pub 子命令
rostopic pub
可以把数据发布到当前某个正在广播的话题上。
用法:
rostopic pub [topic] [msg_type] [args]
实例:(打完rostopic pub -1 /turtle1/cmd_vel
命令后即可按TAB
键补全代码)
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
以上命令会发送一条消息给turtlesim,告诉它以沿x轴方向以1.0大小的线速度和沿z轴方向以1.0大小的角速度开始运动。
rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
这条命令以1Hz的频率发布速度命令到速度话题上。
使用 CTRL+C 可以中断发送
6.5、rostopic hz 子命令
rostopic hz
命令可以用来查看数据发布的频率。
用法:
rostopic hz [topic]
实例:
rostopic hz /turtle1/pose
得到:
subscribed to [/turtle1/pose]
average rate: 62.486
min: 0.015s max: 0.017s std dev: 0.00047s window: 60
average rate: 62.476
min: 0.015s max: 0.018s std dev: 0.00045s window: 122
average rate: 62.514
min: 0.014s max: 0.020s std dev: 0.00057s window: 185
average rate: 62.506
min: 0.013s max: 0.020s std dev: 0.00061s window: 248
现在我们可以知道了turtlesim正以大约 60Hz 的频率发布数据给turtle1。我们也可以结合rostopic type
和rosmsg show
命令(这个命令将在后面详细介绍)来获取关于某个话题的更深层次的信息。
rostopic type /turtle1/cmd_vel | rosmsg show
得到:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
到此我们已经完成了通过rostopic来查看话题相关情况的过程。
7、rosmsg 命令
我们可以使用rosmsg
命令来查看消息的详细情况。
rosmsg show geometry_msgs/Twist
得到:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
8、rossrv 命令
我们可以使用rossrv
命令来查看服务的详细情况。
rossrv show std_srvs/Trigger
得到:
---
bool success
string message
其中---
上方的request(请求)的内容,---
下方的response(响应)的内容,并且允许为空。比如上面得到的srv信息中---
上方没有东西,即request内容为空。
9、rosservice 命令
rosservice
命令能让你获取有关ROS服务的信息。
可以使用帮助选项查看rosservice的子命令:
rosservice -h
可以看到:
Commands:
rosservice args print service arguments (打印服务参数)
rosservice call call the service with the provided args (使用提供的参数调用服务)
rosservice find find services by service type (按服务类型查找服务)
rosservice info print information about service (打印服务信息)
rosservice list list active services (列出运行中的服务)
rosservice type print service type (打印服务类型)
rosservice uri print service ROSRPC uri (打印服务ROSRPC uri)
9.1、rosservice list 子命令
rosservice list
命令能够列出所有当前的服务。
rosservice list
9.2、rosservice call 子命令
rosservice call
命令用于请求服务
用法:
rosservice call /service [args...]
实例:(可通过TAB
键补全坐标代码)
$ rosservice call /spawn "x: 2.0
y: 2.0
theta: 0.0
name: 'turtle2'"
以上命令会生成一个小海龟,名字为:turtle2,坐标[2,2],左下角为原点。
之后可通过rostopic
命令控制turtle2运动了。
10、rosbag 命令
10.1、rosbag record 子命令
rosbag record
命令将ROS系统运行过程中的数据录制到一个.bag文件中,然后可以通过回放数据来重现相似的运行过程。退出录制时按Ctrl+C
退出该命令,你应该会看到在当前目录下一个以.bag作为后缀的文件。
用法:
rosbag record TOPIC1 [TOPIC2 TOPIC3 ...]
实例:
rosbag record -a -O cmd_record
其中
-a 选项,表示录制所有发布的话题
-O cmd_record 选项,表示将bag文件命名为cmd_record.bag。
10.2、rosbag play 子命令
rosbag play
命令用于回放一个或多个包文件的内容。
用法:
rosbag play BAGFILE1 [BAGFILE2 BAGFILE3 ...]
rosbag play -r 2 (以某一频率发布消息,即控制bag包播放的频率))
rosbag play -s 2 (从某一时间节点开始播放发布消息)
实例:
rosbag play cmd_record.bag
10.3、rosbag info 子命令
rosbag info
命令用于查看bag文件信息,可以查看到版本、时长、录制时间、文件大小、录制的话题和类型等信息。
用法:
rosbag info [options] BAGFILE1 [BAGFILE2 BAGFILE3 ...]
实例:
rosbag info cmd_record.bag
10.4、录制数据子集
rosbag record
命令支持只录制某些特别指定的话题到单个bag文件中,这样就允许用户只录制他们感兴趣的话题。
在bag文件所在目录下执行以下命令:
rosbag record -O 2018-12.bag /turtle1/command_velocity /turtle1/pose
上述命令中的-O参数表示将数据记录保存到名为 2018-12.bag 的文件中,同时后面的话题参数表示只能录制这两个指定的话题。
可以使用rosbag info 2018-12.bag
命令查看录制时指定话题的信息。
也可以只指定bag包的文件名,录制所有数据:
$ rosbag record -a -O 2018-12.bag
录取指定topic,并且每五分钟分割一次, -e为正则匹配:
$ rosbag record --split --duration=5m -e /radar/back_targets /vehicle_speed /imu_data
11、rosls 命令
rosls
命令是rosbash命令集中的一部分,它允许你直接按软件包的名称而不是绝对路径执行ls命令(罗列目录).
用法:
rosls [ 本地包名称[/子目录] ]
12、roscd 命令
roscd
命令是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。
用法:
roscd [ 本地包名称[/子目录] ]
示例:
$ roscd roscpp
$ pwd
/opt/ros/kinetic/share/roscpp
13、roscd log 命令
使用roscd log
命令可以切换到ROS保存日记文件的目录下。需要注意的是,如果你没有执行过任何ROS程序,系统会报错说该目录不存在。
如果你已经运行过ROS程序,那么可以尝试:
roscd log
14、rosed 命令
rosed
命令是 rosbash 的一部分。利用它可以直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径了。
用法:
rosed [package_name] [filename]
例子:
rosed roscpp Logger.msg
这个实例展示了如何编辑roscpp package里的Logger.msg文件。
15、rospack 命令
rospack
命令允许你获取软件包的有关信息
用法:
rospack <command> [options] [package]
实例:
要找到一个软件包的目录,使用 rospack find命令:
$ rospack find roscpp
/opt/ros/kinetic/share/roscpp
显示出当前的包信息:
$ rospack list
显示当前包的一级依赖:
$ rospack depends1 beginner_tutorials
显示当前包的所有依赖:
$ rospack depends beginner_tutorials
PS:
rospack list
命令的另一中奇妙用法:
有时候自定义了功能包后就算已经修改过环境变量,并且可以找到功能包对应的可执行文件,然而执行rosrun
命令时也无法自动补全功能包名称,这个时候执行一遍rospack list
命令即可。(别问我为什么,我也想知道为啥这么玄学)
16、rosparam 命令
rosparam
命令用于从ROS参数服务器获取、设置和删除参数。
可以使用帮助选项查看rosparam的子命令:
$ rosparam -h
可以看到:
Commands:
rosparam set set parameter (设置参数)
rosparam get get parameter (获得参数值)
rosparam load load parameters from file (从文件中加载参数到参数服务器)
rosparam dump dump parameters to file (将参数服务器中的参数写入到文件)
rosparam delete delete parameter (删除参数)
rosparam list list parameter names (列出参数服务器中的参数)
16.1、rosparam list 子命令
实例:
在运行turtlesim_node
节点后,输入以下命令就可以获取到节点参数信息:
16.2、rosparam get 子命令
rosparam get
子命令用于获取参数的值。
用法:
rosparam get [options] parameter
其中
parameter
应为使用rosparam list
命令得到的参数,如上图所示。
16.3、rosparam set 子命令
rosparam set
子命令用于设置参数。
用法:
rosparam set [options] parameter value
其中
parameter
应为使用rosparam list
命令得到的参数
value
为设置后的值。
下面为修改海龟仿真器的背景颜色:
16.4、rosparam dump 子命令
rosparam dump
子命令用于将参数服务器中的参数写入到文件。
用法:
rosparam dump [options] filename [namespace]
实例:
使用rosparam dump param.yaml
命令可以在终端所处路径创建一个名为param.yaml
的文件:
在ROS系统中,参数读写一般通过 xml 或者 yaml 格式的文件,其中 yaml 用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。
16.5、rosparam load 子命令
rosparam load
子命令用于从文件中加载参数到参数服务器。
用法:
rosparam load [options] filename [namespace]
实例:
使用rosparam dump param.yaml
命令创建一个名为param.yaml
的文件,然后打开文件修改其中的参数后保存,然后使用rosparam load param.yaml
命令加载参数:
17、创建ROS工作空间
mkdir catkin_ws
cd catkin_ws/
mkdir src
cd src/
catkin_init_workspace
以上创建了src文件,放置功能包源码,并在src文件夹中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。
18、编译ROS工作空间
所有编译工作都要在catkin_ws文件夹下编译,编译完成后,会发现catkin_ws中多了两个文件 build 和 devel。
cd ~/catkin_ws/
catkin_make
要想文件夹中包含install文件,则需要再输入
$ catkin_make install
命令。
19、设置环境变量
source devel/setup.bash
也可以将整个ROS系统的环境变量设置到bash脚本中,现在我们需要把我们工作空间的环境变量设置到bash中,并使配置在当前的终端生效:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
可使用以下命令查看环境变量:
$ echo $ROS_PACKAGE_PATH
20、创建功能包
需要在src文件夹中创建:
用法:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
其中,package_name为功能包名称,depend1、2、3为依赖项
实例:
catkin_create_pkg test_pkg std_msgs rospy roscpp
test_pkg:功能包名称
std_msgs:包含常见消息类型
roscpp:使用C++实现ROS各种功能
rospy:使用python实现ROS各种功能
21、编译功能包
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel//setup.bash
22、roscpp 中常用的函数、类以及命名空间
roscpp 中常用的函数、类以及命名空间看这里。