主要内容

探索TurtleBot的基本行为

这个例子帮助你探索基本自治TurtleBot®。描述行为驱动机器人前进和改变其方向是一个障碍。你会订阅激光扫描主题和发布速度控制TurtleBot话题。

先决条件:与TurtleBot通信

连接到TurtleBot

确保你有一个TurtleBot运行仿真通过露台®或真正的硬件。指从露台和模拟TurtleBot开始开始一个真正的TurtleBot启动程序。下面的例子使用了Gazebo-simulated Turtlebot。

在下载的虚拟机,点击露台的房子启动世界的捷径。

初始化ROS。连接到TurtleBot代替ipaddressTurtleBot的IP地址。

ipaddress =“http://192.168.178.133:11311”;rosinit (ipaddress)
初始化全局节点/ matlab_global_node_05319 NodeURI http://192.168.178.1:51558

为机器人的速度和创建一个出版商创建一个消息的主题。使用结构格式消息进行通信来提高性能。

机器人= rospublisher (“/ cmd_vel”,“DataFormat”,“结构”);velmsg = rosmessage(机器人);

接收扫描数据

确保你开始激光雷达和相机如果你正在与真正的TurtleBot硬件。命令启动激光雷达和摄像头是:

roslaunchturtlebot3_bringupturtlebot3_core.launchroslaunchturtlebot3_bringupturtlebot3_lidar.launchroslaunchturtlebot3_bringupturtlebot3_rpicamera.launch

你必须执行命令在TurtleBot终端。TurtleBot使用LDS-01激光雷达来构造一个激光扫描上发表/扫描的话题。剩下的这个例子中,这个词激光扫描指的是数据发布在这个话题。

订阅的主题/扫描

激光= rossubscriber (“/扫描”,“DataFormat”,“结构”);

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

激光扫描=接收(3)
扫描=结构体字段:MessageType:“sensor_msgs /提升”标题:[1×1 struct] AngleMin: 0 AngleMax: 6.2832 AngleIncrement: 0.0175 TimeIncrement: 0 ScanTime: 0 RangeMin: 0.1200 RangeMax: 3.5000范围:[360×1单]强度:(360×1个)
图rosPlot(扫描);

如果你看到一个错误,可能是激光扫描话题是没有收到任何数据。如果你是在模拟运行,试着重新启动露台。如果您使用的是硬件,确保你正确地开始激光雷达和摄像头。

运行下面的代码行,情节直播激光扫描十秒钟。移动一个对象在TurtleBot面前,让它足够近,直到不再出现在窗口。激光扫描范围有限由于硬件的限制。LDS-01激光雷达有最低传感范围0.12米和3.5米的最大射程。任何对象以外的这些限制不会被传感器探测到。

抽搐;toc < 10扫描=接收(激光、3);rosPlot(扫描);结束

简单的避障

基于激光扫描的距离读数,您可以实现一个简单的避障算法。您可以使用一个简单的循环来实现这一行为。

设置一些参数将用于处理循环。您可以修改这些值不同的行为。

spinVelocity = 0.6;%角速度(rad / s)forwardVelocity = 0.1;%线性速度(米/秒)backwardVelocity = -0.02;%线速度(反向)(米/秒)distanceThreshold = 0.6;%将距离阈值(m)

运行一个循环移动机器人前进和计算最接近障碍机器人。当一个障碍的限制范围内distanceThreshold,机器人。这个循环20秒后停止运行时。CTRL + C(在Mac或控制+ C)也停止了这个循环。

抽搐;toc < 20%收集信息从激光扫描扫描=接收(激光);rosPlot(扫描);data = rosReadCartesian(扫描);x =数据(:1);y =数据(:,2);%计算距离最近的障碍dist =√x。^ 2 + y ^ 2);minDist = min(经销);%命令机器人行动如果minDist < distanceThreshold%如果接近障碍,略有回升,旋转velmsg.Angular。Z = spinVelocity;velmsg.Linear。X = backwardVelocity;其他的%继续前进的道路velmsg.Linear。X = forwardVelocity;velmsg.Angular。Z = 0;结束发送(机器人,velmsg);结束

断开与机器人

清晰的工作区出版商、用户和其他活性氧相关对象当你完成。

清晰的

使用rosshutdown一旦你完成工作与ROS网络。关闭全球节点和从TurtleBot断开。

rosshutdown
关闭全局节点/ matlab_global_node_05319 NodeURI http://192.168.178.1:51558

更多的信息

激光扫描的最小范围不再看到对象的方式。从激光雷达,最低是0.12米左右。

激光扫描不能检测玻璃墙。下面是一个图像的相机:

这是对应的激光扫描:

垃圾桶是可见的,但你不能看到的玻璃墙上。当你使用TurtleBot地区与windows或墙壁TurtleBot可能无法检测,了解激光扫描的局限性。

下一个步骤

指的是下一个示例:控制TurtleBot遥操作