开源地址:点击该链接

参考自: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文件除了包含requestresponse(这两部分使用---进行分隔)之外, 其他都与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
)

10.4 msgsrv的通用操作

#修改代码为
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)