Turtlebot_follower

Turtlebot_follower 使用记录

为了方便使用,我把turtlebot_apps 中的这个包拷贝到了我的工作目录中,直接编译即可
运行:

roslaunch turtlebot_follower follower.launch

此外,这个包与一般ROS的包不太一样,其他的包中一般都有可执行文件,而这个包中的follower.cpp却是作为库文件加载进去。

add_library(${PROJECT_NAME} src/follower.cpp)

因此,对follower的更改只能对库文件进行改动

连接turtlebot运行的rqt graph

如上图所示,我简单的连接了turtlebot运行了这个launch文件,从rqt图中可以看出这个程序的内部流程,主要就是turtlebot_follower将camera中的RGB-D信息进行处理,然后将控制信息(cmd_vel)发给kobuki 。而follower.cpp中的核心函数

void imagecb(const sensor_msgs::ImageConstPtr& depth_msg)

正是图像部分的回调函数,其他的函数基本上都是为整个程序架外设的。

我想添加的内容就是让这个程序在丢失所跟踪的人时,向其他模块发布一个话题。步骤很简单:
向函数

virtual void onInit()

添加

follow_pub_ = private_nh.advertise(“follow_msgs”,1);

然后在

void imagecb(const sensor_msgs::ImageConstPtr& depth_msg)

需要的位置处添加

std_msgs::String str;
str.data =”someflag”;
follow_pub_ .pub(str);

一切都很顺利,但是当接受话题的时候出现问题

rostopic echo /follow_msgs

所接受的话题中没有任何信息,但是当我在pub后面添加

std::cout << “I have publish this topic!”;
std:;cout << endl;

确实显示到了这一步。

新开一个终端查看话题信息:

rostopic list | grep follow_msgs

这时至少会出现两个话题名:

/camera1/follow_msgs //这个其实事先我也不知道,当时只是随便看一下,结果找到了
/follow_msgs

显示话题具体信息:

rostopic info TOPIC_NAME

结果发现/follow_msgs只有接受的节点,没有发布的节点
而/camera1/follow_msgs中pub的节点正是turtlebot_follower, 然后使用

rostopic echo /camera1/follow_msgs

实时显示我预想中的消息,事情解决。
原因分析:改动的程序中没有任何问题,但是(估计)默认的launch文件中有remap这个动作,而我并没有改动(但但是这是我自定义的话题啊啊啊!),将话题名/follow_msgs变成了/camera1/follow_msgs。

还有就是接收端对接受消息的处理,假设接收端的回调函数在收到消息时候会通过语音模块播放对应的语音,由于接受的消息有start(I will follow you)、following(I am following you)、lost(I have lost you),如果一直接受消息做出反应,语音则会一直播放(I am following you)之类的东西,而我并不能对接受的频率进行控制。
解决方案:
设置变量

follow_flag=”null”

每次调用回调函数时,加入if语句

if (msg.data == “STATE” && follow_flag != “STATE”) //STATE为接受的状态
{…
following_flag = “STATE”;
}

即加入微分式的判断,只有在状态变化时才进行所要执行的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值