【ROS】实操_话题订阅

需求描述: 已知turtlesim中的乌龟显示节点,会发布当前乌龟的位姿(窗体中乌龟的坐标以及朝向),要求控制乌龟运动,并时时打印当前乌龟的位姿。

结果演示:

img

实现分析:

  1. 首先,需要启动乌龟显示以及运动控制节点并控制乌龟运动。

  2. 要通过ROS命令,来获取乌龟位姿发布的话题以及消息。

  3. 编写订阅节点,订阅并打印乌龟的位姿。

实现流程:

  1. 通过ros命令获取话题与消息信息。

  2. 编码实现位姿获取节点。

  3. 启动 roscore、turtlesim_node 、控制节点以及位姿订阅节点,控制乌龟运动并输出乌龟的位姿。

编写launch文件【启动乌龟GUI和键盘控制节点】

 

<!-- 启动乌龟GUI 和 键盘控制节点 -->
<launch>
    <!-- 乌龟GUI -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
    <!--键盘控制节点 -->
       <node pkg="turtlesim" type="turtle_teleop_key" name="key" output="screen"/>
</launch>
source ./devel/setup.bash
roslaunch plumbing_test start_turtle.launch

1.话题与消息获取

获取话题:/turtle1/pose

rostopic list

获取消息类型:turtlesim/Pose

rostopic type /turtle1/pose 
或
rostopic info /turtle1/pose

获取消息格式:

rosmsg info turtlesim/Pose

响应结果:

float32 x
float32 y
float32 theta      #平行x轴,左转加【最大是pi】,右转减【最小值是-pi】 
float32 linear_velocity
float32 angular_velocity

先以命令的方式获取乌龟的位姿

rostopic echo /turtle1/pose

2.实现订阅节点

创建功能包需要依赖的功能包: roscpp rospy std_msgs turtlesim

实现方案A: C++

配置文件

package.xml

CMakeLists.txt

#include "ros/ros.h"
#include "turtlesim/Pose.h"

/*
    需求:订阅乌龟的位姿信息,并输出到控制台
            1 包含头文件
            2 初始化ros节点
            3 创建节点句柄
            4 创建订阅对象
            5 处理订阅到的数据(回调函数)
            6 spin()


*/

//回调函数【处理订阅到的数据】
void doPose(const  turtlesim::Pose::ConstPtr &pose)
{
    ROS_INFO("乌龟的位姿信息是:坐标(%.2f,%.2f),朝向(%.2f),线速度(%.2f),角速度(%.2f)",
                        pose->x,pose->y,pose->theta,pose->linear_velocity,pose->angular_velocity);
}



int main(int argc, char  *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"sub_pose");
    ros::NodeHandle nh;
    ros::Subscriber sub = nh.subscribe("/turtle1/pose",100,doPose);

    ros::spin();
    return 0;
}

编译

启动launch文件中封装的乌龟GUI和键盘控制节点

source ./devel/setup.bash
roslaunch plumbing_test start_turtle.launch

运行节点

source ./devel/setup.bash
rosrun plumbing_test test02_sub_pose 

总结:

本案例采用的是发布/订阅方式,发布方乌龟显示节点,发布乌龟的位姿,订阅方是test02_sub_pose。

首先查看话题【rostopic list 】,通过话题查看消息类型【rostopic type 话题名 或rostopic info 话题名】,通过消息类型查看消息格式【rosmsg info 消息类型】

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值