主要内容

使用TurtleBot和VFH进行避障

本示例演示了如何使用ROS工具箱和带向量场直方图(VFH)的TurtleBot®在环境中驾驶机器人时执行避障。机器人向前行驶,直到障碍物挡住为止。这个控制器FH对象在试图向前行驶时计算转向方向以避开对象。

可选:如果您尚未设置TurtleBot(模拟或真实),请安装带有Gazebo模拟器和TurtleBot软件包的虚拟机。看见开始使用露台和模拟的高跷机器人(ROS工具箱)在露台上安装和安装一个TurtleBot。

使用从安装程序获得的IP地址连接到TurtleBot。

松香('192.168.233.133',11311)
使用NodeURI初始化全局节点/matlab_全局节点_90736http://192.168.233.1:61063/

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

所使用的主题用于模拟TurtleBot。调整特定机器人的主题名称。

laserSub=rossubscriber(“/扫描”); [velPub,velMsg]=rospublisher(“/mobile_base/commands/velocity”);

设置VFH对象以避免障碍物。设定UseLidarScan财产符合事实的.指定机器人规格的算法属性。将目标方向设置为0为了直行。

vfh=controllervh;vfh.UseLidarScan=true;vfh.distance limits=[0.05 1];vfh.RobotRadius=0.1;vfh.MinTurningRadius=0.2;vfh.SafetyDistance=0.1;targetDir=0;

使用设置速率对象费率控制,它可以跟踪循环的计时。此对象也可用于控制循环运行的速率。

比率=比率控制(10);

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

使用ROS订阅服务器收集激光扫描数据。创建利达斯卡纳对象指定范围和角度。根据输入的激光扫描数据计算VFH对象的转向方向。将转向方向转换为所需的线性和角速度。如果找不到转向方向,则机器人停止并通过原地旋转进行搜索。

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

虽然速率.TotalElapsedTime<30%获取激光扫描数据laserScan=接收(laserSub);量程=双量程(激光扫描量程);角度=双角度(激光扫描。读取扫描角度);%从范围和角度创建lidarScan对象扫描=激光雷达扫描(范围、角度);%调用VFH对象到计算机转向方向steerDir=vfh(扫描,目标目录);%计算速度如果~isnan(steerDir)%如果转向方向有效desiredV=0.2;w=exampleHelperComputeAngularVelocity(steerDir,1);其他的%停止并搜索有效的方向期望值v=0.0;w=0.5;终止%分配和发送速度命令velMsg.Linear.X=desiredV;velMsg.Angular.Z=w;velPub.send(velMsg);终止

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

断开与ROS网络的连接

罗斯赫顿
使用NodeURI关闭全局节点/matlab\u全局节点\u 90736http://192.168.233.1:61063/