ROS入门教程(二)

本文为原创博客, 转载请注明出处: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_consoleroslaunch

本节引入用于调试的ros_consolerqt_logger_level以及用于以此启动很多nodes的roslaunch.

8.1 使用rqt_consolerqt_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, ErrorFatal等级的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 msgsrv

本节涵盖如何使用rosmsg, rossrv, roscp创建和编译msgsrv文件.

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, 这个字段包含了timestampcoordinate 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_generationmessage_runtime. 下一步是确认CMakeLists.txt中的find_package中添加了message_generation. 最后一步, 修改CMakeLists.txtadd_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 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)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值