ROS可以通过在shell环境中输入命令来进行文件系统的使用、源代码编辑、构建、调试和功能包管理等。为了正确使用ROS,除了基本的Linux命令之外,还需要熟悉ROS专用命令。为了熟练掌握ROS的各种命令,我们对每个命令的功能进行了简单的描述.
文件管理工具
程序代码散落在许多ROS包中。使用Linux内置命令行工具(如ls和cd)来进行查找和导航可能非常繁琐,因此ROS提供了专门的命令工具来简化这些操作
rospack
rospack允许你获取软件包的有关信息rospack find [ package_name ]
roscd
roscd是rosbash命令集的一部分,它允许你直接切换目录(cd)到某个软件包或者软件包集当中roscd [ locationname[ /subdir ] ]
roscd log将带您进入存储ROS日志文件的目录。需要注意的是,如果你没有执行过任何ROS程序,系统会报错说该目录不存在
roscd log
- rosls
它允许你直接按软件包的名称执行 ls 命令(而不必输入绝对路径)rosls [ locationname[ /subdir ] ]
ROS节点
节点是一个可执行文件,它可以通过ROS来与其他节点进行通信
roscore
roscore是你在运行所有ROS程序前首先要运行的命令roscore
rosnode
打开一个新终端,可以使用rosnode看看roscore运行时干了些什么…… 记得要保持以前的终端开着,比如打开一个新的标签页,或者最小化之前的窗口
rosnode list命令会列出这些活动的节点rosnode list
rosnode info命令返回的是某个指定节点的信息
rosout在ROS中相当于stdout/stderr(标准输出/标准错误)
rosnode info / rosout
- rosrun
rosrun可以让你用包名直接运行软件包内的节点(而不需要知道包的路径)rosrun [ package_name ] [ node_name ]
使用另外一个rosnode指令,ping,来测试它是否正常
rosnode ping [ node_name ]
ROS话题
节点可以将消息发布到话题,或通过订阅话题来接收消息
使用rqt_graph
rqt_graph用动态的图显示了系统中正在发生的事情rosrun rqt_graph rqt_graph
rostopic
rostopic命令工具能让你获取ROS话题的信息,你可以使用帮助选项查看可用的rostopic的子命令rostopic -h
返回信息如下:
1 | rostopic is a command-line tool for printing information about ROS Topics. |
rostopic echo
rostopic echo可以显示在某个话题上发布的数据rostopic echo [ topic ]
rostopic list
rostopic list能够列出当前已被订阅和发布的所有话题rostopic list -h
返回信息如下:
1 | Usage: rostopic list [/topic] |
rostopic pub
rostopic pub可以把数据发布到当前某个正在广播的话题上
rostopic pub [ topic ] [ msg_type] [ args ]rostopic hz
rostopic hz报告数据发布的速率rostopic hz [ topic ]
ROS消息
话题的通信是通过节点间发送ROS消息实现的。为了使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面消息的类型决定的。使用rostopic type命令可以查看发布在话题上的消息的类型。
rostopic type
rostopic type命令用来查看所发布话题的消息类型。rostopic type [ topic ]
rosmgs
我们可以使用rosmsg查看消息的详细信息rosmgs show [ msg_type]
使用rqt软件包
使用rqt_plot
rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据。例如我们可以使用rqt_plot命令来绘制正被发布到/turtle1/pose话题上的数据rosrun rqt_plot rqt_plot
使用rqt_console
rqt_console连接到了ROS的日志框架,以显示节点的输出信息rosrun rqt_console rqt_console
使用rqt_logger_level
rqt_logger_level允许我们在节点运行时改变输出信息的详细级别,包括Debug、Info、Warn和Error
ROS服务
服务(Services)是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response)。
rosservice 可以很容易地通过服务附加到ROS客户端/服务器框架上。rosservice有许多可用于服务的命令,如下:
1 | rosservice list 输出活跃服务的信息 |
- rosservice type
输出服务类型,返回的服务类型为empty(空),这表明调用这个服务时不需要参数(即,它在发出请求时不发送数据,在接收响应时也不接收数据)rosservice type [ service ]
再让我们看看服务具有参数的情况。例如查看spawn(产卵)服务的信息:
rosservice type /spawn | rossrv show
使用rosparam
rosparam能让我们在ROS参数服务器(Parameter Server)上存储和操作数据。参数服务器能够存储整型(integer)、浮点(float)、布尔(boolean)、字典(dictionaries)和列表(list)等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1是整型,1.0是浮点型,one是字符串,true是布尔型,[1, 2, 3]是整型组成的列表,{a: b, c: d}是字典。
rosparam有很多命令可以用来操作参数,如下所示:
1 | rosparam set 设置参数 |
rosservice get
也可以用rosparam get /来显示参数服务器上的所有内容:rosparam get [param_name]
rosparam get /rosparam set
通过指令修改了参数的值,现在我们需要调用clear服务使得参数的修改能生效:rosparam set [param_name] [ args ]
rosservice call /clearrosservice dump / load
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
ROS命令
使用roslaunch
roslaunch可以用来启动定义在launch(启动)文件中的节点~/catkin_ws
source devel/setup.bash
roslaunch [ package ] [ filename.launch ]使用rosed
rosed是rosbash套件的一部分。利用它可以直接通过软件包名编辑包中的文件,而无需键入完整路径,rosed [ package_name ] [ filename ]
使用roscp
roscp是一个实用的命令行工具,用于将文件从一个包复制到另一个包roscp [ package_name] [ file_to_copy_path] [ copy_path]
使用rosbag
这里我们只是创建了一个临时目录来记录数据,然后运行 rosbag record 带选项-a,表明所有发布的话题都应该积累在一个bag文件中mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a
fd
使用 rosbag info 查看录制bag文件的详细信息
rosbag info < bagfiles_name >
使用 rosbag paly 回放bag文件以再现系统运行过程
rosbag paly < bagfiles_name >
- 使用roswtf工具
roswtf will examine your ROS setup, such as your environment variables, and look for configuration issues. If you have a ROS system online, it will look at it and check for any potential issues.简单来说就是一个问题检测工具
创建ROS消息和服务
具体过程请参考如下
msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。
srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。
msg文件就是简单的文本文件,每行都有一个字段类型和字段名称。可以使用的类型为:int8, int16, int32, int64 (以及 uint*)、float32, float64、string、time,duration、其他msg文件、variable-length array[] 和 fixed-length array[C]、Header,它含有时间戳和ROS中广泛使用的坐标帧信息
srv文件和msg文件一样,只是它们包含两个部分:请求和响应。这两部分用一条—线隔开。下面是一个srv文件的示例,A和B是请求, Sum是响应:
1 | int64 A |
- 创建msg
roscd beginner_tutorials
mkdir msg
echo “int64 num” > msg/Num.msg
使用rosmsg
rosmsg show [message type]
创建svr
roscd [ package_name ]
mkdir srv
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv使用rossrv
rossrv show < server_type >
总结
这里参考了CSDN博主JUNJUN~进行了总结.