主要内容

使用TurtleBot和VFH躲避障碍

这个例子展示了如何使用带有矢量场直方图(VFH)的TurtleBot®在环境中驾驶机器人时进行避障。机器人向前行驶,直到有障碍物挡住。的controllerVFH(导航工具箱)物体计算方向,以避免物体时,试图驾驶前进。

可选:如果您还没有设置TurtleBot(模拟的或真实的),请安装一个带有Gazebo模拟器和TurtleBot包的虚拟机。看到开始凉亭和一个模拟的乌龟机器人在露台上安装和设置一个TurtleBot。

使用从setup获得的IP地址连接到TurtleBot。

rosinit (“192.168.178.133”, 11311)
使用NodeURI http://192.168.178.1:63605/初始化全局节点/matlab_global_node_05320

创建发布者和订阅者以与VFH类共享信息。用户从机器人接收激光扫描数据。发布者向机器人发送速度指令。

使用的主题是模拟的乌龟机器人。调整特定机器人的主题名称。使用结构格式消息进行通信,以获得更好的性能。

laserSub = rossubscriber (“/扫描”“DataFormat”“结构”);[velPub, velMsg] = ropublisher (“/ cmd_vel”“DataFormat”“结构”);

设置VFH对象避障。设置UseLidarScan财产真正的.指定机器人规格的算法属性。设置目标方向为0为了直行。

vfh = controllerVFH;vfh。UseLidarScan = true;vfh。DistanceLimits = [0.05 1];vfh。RobotRadius = 0.1;vfh。MinTurningRadius = 0.2;vfh。SafetyDistance = 0.1; targetDir = 0;

使用设置一个Rate对象rateControl(导航工具箱),它可以跟踪循环的时间。该对象也可以用来控制循环的运行速率。

率= rateControl (10);

创建一个循环,收集数据,计算方向,并驱动机器人。设置循环时间为30秒。

使用ROS用户收集激光扫描数据。创建一个lidarScan对象,通过指定范围和角度。根据输入的激光扫描数据,计算VFH对象的转向方向。将转向方向转换为所需的线速度和角速度。如果没有找到方向,机器人就会停下来,原地旋转进行搜索。

通过使用ROS publisher发送包含角速度和所需线速度的消息来驱动机器人。

率。TotalElapsedTime < 30获取激光扫描数据并创建一个lidarScan对象scanMsg =接收(laserSub);扫描= rosReadLidarScan (scanMsg);调用VFH对象指向计算机的方向steerDir = vfh(扫描,targetDir);%计算速度如果~ isnan (steerDir)%如果转向方向有效desiredV = 0.2;w = exampleHelperComputeAngularVelocity (steerDir, 1);其他的%停止并搜索有效方向desiredV = 0.0;w = 0.5;结束分配和发送速度命令velMsg.Linear.X = desiredV;velMsg.Angular.Z = w;velPub.send (velMsg);结束

这段代码展示了如何使用导航工具箱™算法来控制机器人,并对其环境中的动态变化作出反应。目前环路在30秒后结束,但可以根据ROS网络上的信息(如机器人位置或激光扫描消息数)设置其他退出环路的条件。

断开ROS网络连接

rosshutdown
使用NodeURI http://192.168.178.1:63605/关闭全局节点/matlab_global_node_05320