本文为原创博客, 转载请注明出处:https://blog.csdn.net/q_z_r_s
机器感知 一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 |
开源地址:点击该链接
参考自:http://wiki.ros.org/ROS/Tutorials
【Beginner Level】ROS入门教程(一)
【Beginner Level】ROS入门教程(二)
【Beginner Level】ROS入门教程(三)
【Beginner Level】ROS入门教程(四)
【Beginner Level】ROS入门教程(五)
【Beginner Level】ROS入门教程(二)
8. 使用rqt_console
和roslaunch
本节引入用于调试的ros_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
. 例如, 设置等级为Warn
, 那么, 你讲接收到Warn
,Error
和Fatal
等级的messages
. -
使用
roslaunch
#并不一定非要建立launch文件夹,甚至都可以不用launch这个名字,`roslaunch`命令会自动的在给定的package #中查找可用的`launch files`,不过还是建议这样做. mkdir launch cd launch
<!-- 创建一个名为`turtulmimic.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>
#分别用一个终端执行指令 $ roslaunch beginner_tutorials turtlemimic.launch $ rostopic pub /turtlesim1/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
9. 使用rosed
编辑文件
#Usage: rosed编辑文件
$ rosed [package_name] [filename]
#Example, 此指令如果无法正常执行, 安装`Vim`
$ rosed roscpp Logger.msg
#Usage:rosed tab 补全
$ rosed [package_name] <tab><tab>
rosed
默认使用的编辑器是vim
, 也可以通过指令更改默认配置, 使用Ubuntu内置的编辑器, 修改方法为:
export EDITOR='nano -w'
10. 创建ROS msg
和srv
本节涵盖如何使用rosmsg
, rossrv
, roscp
创建和编译msg
及srv
文件.
10.1 msg
, srv
简介
-
msg
: msg文件是一种简单的文本文件, 用来描述ROS message
, 用它们来生成使用不同语言的消息的源代码. msg文件存放在包的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 header 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 num" > msg/Num.msg
在
package.xml
中添加:<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
在
CMakeLists.txt
中添加新的依赖项# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
修改如下程序:
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 name
, 直接给出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_service_files
, 如下:add_service_files( FILES AddTwoInts.srv )
-
使用
rossrv
#Usage: $ rossrv show <service type> $ rossrv show beginner_tutorials/AddTwoInts #同样的, 可以不指定package, 直接给出文件名, 它会列出所有的同名文件 $ rossrv show AddTwoInts
10.4 msg
和srv
的通用操作
#修改代码为
generate_messages(
DEPENDENCIES
std_msgs
)
# In your catkin workspace, 重新编译package
$ roscd beginner_tutorials
$ cd ../..
$ catkin_make install
#`cd -`返回进入此目录之前所在的目录;
$ cd -
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 总结
到目前为止已经学习的指令如下:
- rosnode = ros+node: displaying debug information about ROS Nodes
- rospack = ros+pack(age) : provides information related to ROS packages
- 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
- catkin_make : makes (compiles) a ROS package
- rosmake = ros+make : makes (compiles) a ROS package (if you’re not using a catkin workspace)