避障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