基于gazebo实现多机器人编队仿真(三)——三角编队与一字编队的实现
前言
前文已经阐述了多机器人的编队模型实现与多辆小车跟随的实现,本文以通过tf通信建立相对于领航机器人的虚拟坐标,通过broadercaster发布虚拟坐标,最后使跟随者收听虚拟坐标,再对虚拟坐标进行跟随,这样就把编队问题转换为了跟随着对目标点的追踪问题。
原理简图
代码实现
虚拟坐标的发布
广播发布模板代码可见前文或者古月居ros21讲,这边发布虚拟机器人的坐标只需要设定相对与领航机器人的相对位置,即Vector3(0, -1.0, 0.0)中的内容。
transform0.setOrigin( tf::Vector3(0, 1.0, 0.0) );//初始化 相距1.0米
transform0.setRotation( tf::Quaternion(0, 0, 0, 1) );
transform1.setOrigin( tf::Vector3(0, -1.0, 0.0) );//初始化 相距1.0米
transform1.setRotation( tf::Quaternion(0, 0, 0, 1) );//广播,指明相对关系和数据
br0.sendTransform(tf::StampedTransform(transform0, ros::Time::now(), "tb3_0", "virtual_0"));
br1.sendTransform(tf::StampedTransform(transform1, ros::Time::now(), "tb3_0", "virtual_1"));
rate.sleep();
跟随者消息接收
listerner程序与前文中的大致相同,只需要修改跟随者的跟随目标即可,修改区域代码如下:
listener.waitForTransform("/tb3_2", "/virtual_1", ros::Time(0), ros::Duration(3.0));
listener.lookupTransform("/tb3_2", "/virtual_1", ros::Time(0), transformfl);
总结
当掌握了最基本的tf发布与接听与tf原理之后,实现本文的小车跟随就比较简单。用本文的代码虽然虚拟坐标定义在了领航机器人的两边,但是由于ros发布与机器人的跟随有延迟,当领航车一直在运动时,后车永远不会到目标点,实现的其实是三角编队;若想要实现一字形编队,需要把虚拟坐标设置的领航车的左前方与右前方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)