主要内容

探索海龟的基本行为

本示例帮助您探索TurtleBot®的基本自主性。所述行为驱动机器人前进,并在遇到障碍时改变其方向。您将订阅激光扫描主题并发布速度主题以控制TurtleBot。

先决条件:与海龟交流

连接到TurtleBot

确保您的TurtleBot通过Gazebo®模拟运行或在真实硬件上运行。请参阅开始使用露台和模拟的高跷机器人从一个真正的翻领机器人开始本例使用Gazebo模拟Turtlebot。

在下载的虚拟机中,单击露台之家酒店开创世界的捷径。

初始化ROS。通过替换ROS连接到TurtleBotIP地址使用TurtleBot的IP地址。

IP地址="http://192.168.178.133:11311";罗西尼(IP地址)
使用NodeURI初始化全局节点/matlab\u全局节点\u 05319http://192.168.178.1:51558/

为机器人的速度创建发布者,并为该主题创建消息。使用结构格式消息进行通信以提高性能。

robot=rospublisher(“/cmd_vel”,“数据格式”,“结构”);velmsg=rosmessage(机器人);

接收扫描数据

如果您正在使用真正的TurtleBot硬件,请确保启动激光雷达和相机。启动激光雷达和相机的命令是:

罗斯兰奇斑鸠turtlebot3_core.launch罗斯兰奇斑鸠turtlebot3_激光雷达发射罗斯兰奇斑鸠turtlebot3_rpicamera.launch

您必须在TurtleBot上的终端上执行该命令。TurtleBot使用LDS-01激光雷达构建激光扫描,并在/扫描对于本例的其余部分,术语激光扫描指就此主题发布的数据。

订阅该主题/扫描.

激光订户(“/扫描”,“数据格式”,“结构”);

等待一条激光扫描信息到达,然后显示它。

扫描=接收(激光,3)
扫描=带字段的结构:消息类型:“传感器/激光扫描”标题:[1×1结构]角度最小值:0角度最大值:6.2832角度增量:0.0175时间增量:0扫描时间:0范围最小值:0.1200范围最大值:3.5000范围:[360×1个]强度:[360×1个]
图2:罗斯图(扫描);

如果您看到错误,则激光扫描主题可能未接收任何数据。如果您正在模拟中运行,请尝试重新启动Gazebo。如果您使用的是硬件,请确保已正确启动激光雷达和相机。

运行以下代码行,绘制实时激光扫描馈送10秒。在TurtleBot前面移动一个对象,并使其足够靠近,直到它不再显示在绘图窗口中。由于硬件限制,激光扫描的范围有限。LDS-01激光雷达的最小探测范围为0.12米,最大探测范围为3.5米。传感器将无法检测到超出这些限制的任何物体。

抽搐;虽然toc<10扫描=接收(激光,3);罗斯普特(扫描);终止

简易避障

根据激光扫描的距离读数,您可以实现一个简单的避障算法。您可以使用一个简单的虽然循环来实现此行为。

设置一些将在处理循环中使用的参数。可以针对不同的行为修改这些值。

自旋速度=0.6;%角速度(rad/s)前进速度=0.1;%线速度(m/s)后向速度=-0.02;%线速度(反向)(m/s)距离阈值=0.6;%转弯距离阈值(m)

运行一个循环将机器人向前移动,并计算距离机器人最近的障碍物。当障碍物位于距离阈值,机器人转动。此循环在运行20秒后停止。CTRL+C(或Mac上的Control+C)也会停止此循环。

抽搐;虽然总有机碳<20%从激光扫描中收集信息扫描=接收(激光);rosPlot(扫描);数据=rosReadCartesian(扫描);x=数据(:,1);y=数据(:,2);%计算最近障碍物的距离距离=sqrt(x.^2+y.^2);Minist=min(距离);%指挥机器人行动如果正念者<距离阈值%如果靠近障碍物,稍微向后仰并旋转velmsg.Angular.Z=自旋速度;velmsg.Linear.X=后向速度;其他的%继续前进velmsg.Linear.X=前进速度;velmsg.Angular.Z=0;终止发送(机器人,味精);终止

断开与机器人的连接

完成发布者、订阅者和其他ROS相关对象的操作后,清除它们的工作区。

清楚的

使用罗斯赫顿完成ROS网络的工作后,关闭全局节点并断开与TurtleBot的连接。

罗斯赫顿
使用NodeURI关闭全局节点/matlab\u全局节点\u 05319http://192.168.178.1:51558/

更多信息

激光扫描有一个最小范围,在这个范围内,它不再能看到阻挡它的物体。这个最小范围距离激光雷达大约0.12米。

激光扫描无法检测到玻璃墙。以下是摄像头的图像:

以下是相应的激光扫描:

垃圾桶是可见的,但你看不到玻璃墙。当你在有窗户或墙壁的区域使用TurtleBot时,TurtleBot可能无法检测到,请注意激光扫描的局限性。

下一步

请参阅下一个示例:用遥操作控制高跷机器人