主要内容

避障TurtleBot和VFH

这个例子展示了如何使用ROS工具箱和TurtleBot®与向量场直方图(VFH)进行避障驾驶机器人的环境。通过推动机器人游荡,直到障碍妨碍。的controllerVFH对象计算指导方向,以避免对象在试图推动前进。

可选:如果你不已经有一个TurtleBot(模拟或真实)设置,安装一个虚拟机和露台模拟器TurtleBot包。看到从露台和模拟TurtleBot开始(ROS工具箱)安装和设置一个TurtleBot露台。

使用的IP地址连接到TurtleBot获得设置。

rosinit (“192.168.233.133”,11311)
初始化全局节点/ matlab_global_node_90736 NodeURI http://192.168.233.1:61063

创建一个共享信息的发布者和订阅者VFH类。订阅者接收激光扫描数据的机器人。出版商向机器人发送速度命令。

主题是用于模拟TurtleBot。调整主题名称为您的特定的机器人。

laserSub = rossubscriber (“/扫描”);[velPub, velMsg] = rospublisher (“/ mobile_base /命令/速度”);

设置为避障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;

设置一个对象使用rateControl,它可以跟踪你的时间循环。这个对象可以用来控制心率循环运作。

率= rateControl (10);

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

使用ROS用户收集激光扫描数据。创建一个lidarScan对象指定范围和角度。计算转向方向与VFH对象基于激光扫描数据的输入。指导方向转换为所需的线性和角速度。如果没有找到一个指导方向,机器人停止和搜索旋转。

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

率。TotalElapsedTime < 30%获得激光扫描数据提升=接收(laserSub);范围=双(laserScan.Ranges);角=双(laserScan.readScanAngles);%的创建一个lidarScan对象范围和角度扫描= lidarScan(范围、角度);%调用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
关闭全局节点/ matlab_global_node_90736 NodeURI http://192.168.233.1:61063