03.ROS console 和 msg

作者: 爪爪熊 | 来源:发表于2019-08-08 15:31 被阅读0次

    本文主要参考以下文章:

    CSDN ROS入门教程(二)

    ROS官方wiki教程

    本文继续上一篇继续进行学习并记录下操作过程:


    八、使用 rqt_console 和 roslaunch

    本节引入用于调试的 rqt_consolerqt_logger_level 以及用于以此启动很多 nodesroslaunch

    8.1 使用 rqt_console 和 rqt_logger_level

    rqt_console 依附于ROS的 log 框架来显示来自 nodes 的输出。rqt_logger_level 可以改变信息输出等级(verbosity level,冗长程度,分别是:DEBUG,WARN,INFO,ERROR)。

    • logging_level 优先级顺序为:FatalErrorWarnInfoDebug,其中 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

    本节涵盖如何使用 rosmsgrossrvroscp 创建和编译 msgsrv 文件。

    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,这个字段包含了 timestampcoordinate frame 信息。简单示例如下:

    Header hear
    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 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_generationmessage_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 msgsrv 的通用操作

    # 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)

    相关文章

      网友评论

        本文标题:03.ROS console 和 msg

        本文链接:https://www.haomeiwen.com/subject/sjmxjctx.html