• ROStopic 通信方式


    操作演示,对 topic 通信方式的理解请看:点击打开链接

    开启终端,运行 roscore

    新开一个终端(已经安装好(ros-<distro>-ros-tutorials 包,否则运行  sudo apt-get install ros-<distro>-ros-tutorials ,<distro> 为 ROS 发行版本名称),运行 rosrun turtlesim turtlesim_node

    运行 turtle_teleop_key 节点

    rosrun turtlesim turtle_teleop_key

    用键盘控制小乌龟运动。


    1.使用rqt_graph

    安装

    sudo apt-get install ros-kinetic-rqt
    sudo apt-get install ros-kinetic-rqt-common-plugins
    

    运行

    rosrun rqt_graph rqt_graph
    结果:

    如果将鼠标放在/turtle1/command_velocity上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key节点正通过一个名为/turtle1/command_velocity的话题来互相通信。


    2.rostopic介绍


    2.1 使用 rostopic echo

    命令格式:

    rostopic echo [topic]

    查看 turtle_teleop_key 节点在 /turtle1/command_velocity 话题(非hydro版)上发布的数据

    rostopic echo /turtle1/cmd_vel

    在 turtle_teleop_key 节点终端下,每按一下方向键都会输出这样的信息,再次运行

    rosrun rqt_graph rqt_graph


    可以看到 turtlesim_node 和 turtle_teleop_key 节点正通过一个名为 /turtle1/command_velocity 的话题来互相通信。


    2.2 使用 rostopic list

    rostopic list能够列出所有当前订阅和发布的话题。

    新开一个终端,

    rostopic list
    运行结果:


    运行

    rostopic list -v
    列出详细信息:



    3.ros Messages

    3.1使用rostopic type

    rostopic type 命令用来查看所发布话题的消息类型

    命令格式:

    rostopic type [topic]

    运行

    rostopic type /turtle1/cmd_vel

    结果:


    运行

    rosmsg show geometry_msgs/Twist

    查看此消息类型:


    已经知道了消息类型,接下来我们就可以给 turtle 发布命令了。


    4.继续学习 rostopic

    4.1 使用 rostopic pub

    命令格式:

    rostopic pub [topic] [msg-type] [args]

    新运行一个 turtlesim_node 节点,运行:

    rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
    
    结果:

    rostopic pub 这条命令将会发布消息到某个给定的话题

    -1 (单个破折号)这个参数选项使rostopic发布一条消息后马上退出

    /turtle1/cmd_vel 这是消息所发布到的话题名称

    geometry_msgs/Twist 这是所发布消息的类型

    --(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号 -(比如负号)时是必须要添加的

    '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。这些参数其实是按照YAML语法格式编写的,这在YAML文档中有更多的描述。


    turtle已经停止移动了。这是因为turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。

    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'


    再次运行:

    rosrun rqt_graph rqt_graph

    结果:


    可以看到 rostopic 发布器节点正在与 rostopic echo节点进行通信

    4.2 使用 rostopic hz
    rostopic hz命令可以用来查看数据发布的频率

    命令格式:

    rostopic hz [topic]

    运行:

    rostopic hz /turtle1/pose
    看到 turtlesim_node 发布 /turtle/pose 时的速度



    5 使用 rqt_plot

    运行:

    rosrun rqt_plot rqt_plot

    在左上角的文本框分别输入 /turtle1/pose/x,点击 + 号,/turtle1/pose/y 点击 + 号。

    按下减号按钮会显示一组菜单让你隐藏图形中指定的话题。现在隐藏掉你刚才添加的话题并添加/turtle1/pose/theta



    6 编写*.msg

    1. 在 /catkin_ws/src 中创建一个 pkg

    catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

    2. 定义新的消息

    mkdir msg
    echo "int64 num" > msg/Num.msg
    3.接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码: 查看package.xml, 确保它包含一下两条语句
     <build_depend>message_generation</build_depend>
     <run_depend>message_runtime</run_depend>

    如果没有,添加进去。 注意,在构建的时候,我们只需要"message_generation"。然而,在运行的时候,我们只需要"message_runtime",否则会编译/运行失败。


    CMakeLists.txt文件中,利用find_package 函数,增加对message_generation的依赖,这样就可以生成消息了。 可以直接在COMPONENTS的列表里增加message_generation,就像这样

    同样,需要确保设置了运行依赖:

    手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:

    进入 /catkin_ws 编译后应该像这样:


    以下是未修改 package.xml 和 CMakeLists.txt 的编译结果




  • 相关阅读:
    7多态与异常处理的课上作业
    软工概论第十五周总结
    构建之法阅读笔记之三
    小组项目冲刺第六天的个人总结
    书店促销
    小组项目冲刺第五天的个人总结
    找水王
    软工概论第十四周总结
    动态规划——买书问题
    小组项目冲刺第四天的个人总结
  • 原文地址:https://www.cnblogs.com/NikkiNikita/p/9450739.html
Copyright © 2020-2023  润新知