ROS学习路(篇一)

ROS学习路


在学习订阅消息时,先编写好订阅者的cpp程序:

/*
	该例程将订阅/turtle/pose话题,消息类型turtle::Pose
*/
#include <ros/ros.h>
#include "turtlesim/Pose.h"

//接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
	//打印接收到的消息
	ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}

int main(int argc,char **argv)
{
	//初始化ros节点
	ros::init(argc,argv,"pose_subscriber");

	//创建节点句柄
	ros::NodeHandle n;

	//创建一个subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
	ros::Subscriber pose_sub=n.subscribe("/turtle/pose",10,poseCallback);

	//循环等待回调函数
	ros::spin();

	return 0;
}

然后在工作空间目录下编译,正常编译通过,编译命令:

~$ cd ~/catkin_ws
~$ catkin_make

编译完成后启动ros服务:

~$ roscore

打开新的终端,启动小乌龟:

~$ rosrun turtlesim turtlesim_node

打开新的终端,启动订阅(如果没有把环境变量设置为全局的还需要在本终端设置环境变量):

~$ source ~/catkin_ws/devel/setup.bash

启动订阅:

~$ rosrun learning_topic pose_subscriber

执行订阅后终端无反应,没有任何数据输出,执行命令:

~$ rqt_graph

发现turtle和订阅pose_subscriber是相互独立的,也就是说pose_subscriber并没有订阅到小乌龟的运动信息,详细检查源程序发现在pose_subscriber.cpp中创建订阅者时,订阅信息" /turtle/pose"漏写了一个1,导致订阅信息错误,更正为" /turtle1/pose"后,重新编译,重新启动各项服务, 订阅信息成功。
在这里插入图片描述
此时重新查看节点关系,节点关系正常:

~$ rqt_graph

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值