03.ROS console 和 msg
本文主要参考以下文章:
本文继续上一篇继续进行学习并记录下操作过程:
八、使用 rqt_console 和 roslaunch
本节引入用于调试的 rqt_console 和 rqt_logger_level 以及用于以此启动很多 nodes 的 roslaunch 。
8.1 使用 rqt_console 和 rqt_logger_level
rqt_console 依附于ROS的 log 框架来显示来自 nodes 的输出。rqt_logger_level 可以改变信息输出等级(verbosity level,冗长程度,分别是:DEBUG,WARN,INFO,ERROR)。
-
logging_level 优先级顺序为:Fatal,Error,Warn,Info,Debug,其中 Fatal 为最高优先级,Debug 为最低优先级。通过设置 logging_level ,将可以接收到所有大于等于此优先级的 messages。
-
使用 roslaunch
# 并不一定要建立launch文件夹,甚至可以不用launch这个名字。 # “roslaunch” 命令会自动在给定的package中查找可用的 “launch files”。 # 但是为了阅读方便,建议还是按照常规的方法来。 # /home/jet/catkin_ws/src/beginner_tutorials/launch $ mkdir launch # 我的目录放在了上面的beginner_tutorials中 $ cd launch $ vim turtlemimic.launch # 跟着上面的vim 创建的 turtlemimic.launch 填入下面内容
<!-- 以`launch tag`开始`launch file` --> <launch> <group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node> <!-- 关闭`launch tag` --> </launch>
# 开始练手执行,先处理下环境变量 $ source ./catkin_ws/devel/setup.bash $ roslaunch beginner_tutorials turtlemimic.launch # 下面另外开一个终端 $ rostopic pub /turtulesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0,0.0,0.0]' '[0.0,0.0,-1.8]' ####### 下面这个我没弄成功,报错了,说无效的消息类型 $ rostopic pub /turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
九、使用 rosed 编辑文件
# Usage:rosed 编辑文件
$ rosed [package_name] [filename]
# Example, 需要提前安装vim : sudo apt-get install vim
$ rosed roscpp logger.msg
# Usage: rosed 后面用tab可以补全
$ rosed [package_name] <tab> <tab>
rosed 默认使用的编辑器是 vim,也可以通过指令更改默认配置,使用Ubuntu内置的编辑器,修改方法为:
exort EDITOR='nano -w'
十、创建ROS msg 和 srv
本节涵盖如何使用 rosmsg ,rossrv, roscp 创建和编译 msg 和 srv 文件。
10.1 msg,srv简介
-
msg :msg文件是一种简单的文本文件,用来描述ROS message,用它们来生成不同语言的消息的源代码。msg文件存放在包的msg目录中,其文件字段类型如下。
- int8,int16,int32,int64(plus uint*)
- float32,float64
- string
- time,duration
- other msg files
- variable-length array[] and fixed-length array[C]
还有一个特殊字段:Header,这个字段包含了 timestamp 和coordinate frame 信息。简单示例如下:
Header hear
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
-
srv:srv文件描述一种service,它包括两部分:请求和响应,srv文件存放在包的srv目录中。srv文件除了包含 request 和 response(这两部使用 --- 进行分隔)之外,其他都与msg文件黑类似:
int64 A int64 B --- int64 Sum
A,B为request,Sum为Response。
10.2 使用msg
-
创建一个 msg
$ roscd beginner_tutorials $ mkdir msg $ echo "int64 msg" > msg/Num.msg
在 package.xml (/home/jet/catkin_ws/src/beginner_tutorials/package.xml)中添加:
<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
在CMakeLists.txt(/home/jet/catkin_ws/src/beginner_tutorials/CMakeLists.txt)中添加新的依赖项:
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation #新添加的 )
同时需要修改 CMakeLists.txt 的下面几个项目:
# 工程中如果没有使用是被注释掉的,需要自己自行打开 add_message_files( FILES Num.msg #新添加的 ) generate_messages( DEPENDENCIES std_msgs )
-
使用rosmsg
# Usage $ rosmsg show [message_type] $ rosmsg show beginner_tutorials/Num
这个 message 包含两部分:beginner_tutorials-它被定义的package,Num-消息所在的文件名。如果无法想起此msg是在哪个package中定义的,可以跳过package num,直接给出msg所在的文件名:$ rosmsg show Num
10.3 使用srv
-
创建一个srv
$ roscd beginner_tutorials $ mkdir srv # Usage: $ roscp [package_name] [file_to_copy_path] [copy_path] $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
同样需要确认package.xml 中是否添加了 message_generation 和 message_runtime。下一步是确认CMakeLists.txt 中的 find_package 中添加了 message_generation 。最后一步,修改CMakeLists.txt 中的 add_sevice_files ,如下:
add_sevice_files( FILES AddTwoInts.srv )
-
使用 rossrv
# Usage $ rossrv show <service type> $ rossrv show beginner_tutorials/AddTwoInts # 同样的,可以不指定package,直接给出文件名,他会列出所有的同名文件 $ rossrv show AddTwoInts
10.4 msg 和 srv 的通用操作
# CMakeLists.txt 中修改代码
generate_message(
DEPENDENCIES
std_msgs
)
# 在catkin工作空间中重新编译package
$ roscd beginner_tutorials
$ cd ../..
$ catkin_make
$ catkin_make install
$ cd - # 返回之前的package包目录
msg 目录中的任何 .msg 文件都将生成用于所有支持语言的代码,C++头文件生成在 ~/catkin_ws/devel/include/beginner_tutorials/,Python脚本创建在~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg。类似的,srv目录中的任何.srv都将生成所支持的所有语言的代码,C++头文件和 message的文件路径相同。
10.5 总结
到目前位置已经学习了如下指令:
-
rospack : provides infomation related to ROS packages
-
roscd : changes directory to a ROS package or stack
-
rosls : lists files in a ROS package
-
roscp : copies files from/to a ROS package
-
rosmsg : provides information related to ROS message definitions
-
rosnode :
-
rossrv : provides information related to ROS service definitions
-
catkin_make : makes (compiles) a ROS package
-
rosmake : makes(compiles) a ROS package(if you're not using a catkin workspace)