主要内容

追踪和跟踪对象

在本例中,您探索自主行为包含了Kinect®相机。这个算法涉及到TurtleBot®寻找一个蓝色球,然后球呆在一个固定的距离。你把安全功能,如肿块和传感的悬崖。

运行这个示例需要图像处理工具箱™。

先决条件:与TurtleBot通信,探索TurtleBot的基本行为,控制TurtleBot遥操作,避障TurtleBot和VFH

为TurtleBo万博1manbetxt硬件支持包

本示例概述TurtleBot使用其本地ROS的工作界面。的ROS工具箱™支持包基于T万博1manbetxurtleBot机器人提供了一个更具流线型TurtleBot接口。它允许您:

获取传感器数据和发送控制命令,而无需显式地调用ROS的命令

透明的沟通与模拟机器人在露台或物理TurtleBot

安装包的支持,开放万博1manbetx附件>硬件支持包万博1manbetx在MATLAB®选项卡并选择ROS工具箱™支持包基于T万博1manbetxurtleBot机器人。另外,使用roboticsAddons(机器人系统工具箱)命令。

连接到TurtleBot

确保你有一个TurtleBot运行仿真通过露台®或真正的硬件。指从露台和模拟TurtleBot开始开始一个真正的TurtleBot启动程序。如果您使用的是硬件,找到一个蓝色球用于跟踪。如果您使用的是露台®,蓝色的球必须在世界面前的机器人(确保您正在使用露台的办公室世界)。

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

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

确保你已经开始Kinect摄像头如果你正在与真正的TurtleBot硬件。命令启动相机:

roslaunch turtlebot_bringup 3 dsensor.launch。

你必须在终端中输入这个TurtleBot。

创建用户颜色相机,悬崖传感器,传感器。创建出版商发出声音和控制机器人速度信息。使用消息进行通信结构格式更好的性能。

句柄。colorImgSub = exampleHelperTurtleBotEnableColorCamera;
成功启用相机(原始图像)
useHardware = exampleHelperTurtleBotIsPhysicalRobot;如果useHardware处理。cliffSub = rossubscriber(“/ mobile_base /事件/悬崖”,“BufferSize”5,“DataFormat”,“结构”);句柄。bumpSub = rossubscriber (“mobile_base /传感器/ bumper_pointcloud”,“BufferSize”5,“DataFormat”,“结构”);句柄。soundPub = rospublisher (“mobile_base /命令/声音”,“kobuki_msgs /声音”,“DataFormat”,“结构”);句柄。velPub = rospublisher (“/ mobile_base /命令/速度”,“DataFormat”,“结构”);其他的%悬崖传感器,保险杠发射器还只出现在传感器和声音%真实TurtleBot硬件句柄。cliffSub = []; handles.bumpSub = []; handles.soundPub = []; handles.velPub = rospublisher(“/ cmd_vel”,“DataFormat”,“结构”);结束

调优蓝色球检测

设置参数图像过滤。将它们添加到一个数据结构,将用于算法。

blueBallParams.blueMax= 120;%最大允许偏离纯粹的蓝色blueBallParams.darkMin= 30;%黑暗最低可接受值

试着想象球以确保ball-finding参数可以找到它。运行exampleHelperTurtleBotFindBlueBall函数如果找到一个圆。如果是这样,c分配值。黑暗是一个二进制图像由应用蓝色和过滤器的形象。视图蓝色球是否妥善隔离:

latestImg = rosReadImage (handles.colorImgSub.LatestMessage);[c ~球]= exampleHelperTurtleBotFindBlueBall (latestImg, blueBallParams useHardware);

使用这个例子辅助显示真正的和二进制映像图和画一个红色+球的中心。

exampleHelperTurtleBotPlotObject (latestImg,球,c);

如果没有找到球,试着增加或减少blueBallParams.blueMaxblueBallParams.darkMin。查看直到找到球的阴谋。这个方法是一个很好的方式来微调ball-finding算法在使用控制器。

在露台,所使用的参数可能找不到球,因为阈值太慷慨。露台的图像(左)的数据包括部分白色的墙和其他对象的空间。真正的图像(右)的数据看起来很饱和与白色。试着改变的参数,以便他们更严格:

blueBallParams.blueMax= 200;%最大允许偏离纯粹的蓝色blueBallParams.darkMin= 220;%黑暗最低可接受值latestImg = rosReadImage (handles.colorImgSub.LatestMessage);[c ~球]= exampleHelperTurtleBotFindBlueBall (latestImg, blueBallParams useHardware);

使用这个例子辅助显示的数字。

exampleHelperTurtleBotPlotObject (latestImg,球,c);

现在的参数限制太多。球的一部分甚至不出现在露台的形象,你看不见真正的形象。如果你进一步调优参数你可以找到一个中间立场。在露台,以下参数应该很好地工作。与硬件、环境照明可能需要花更多的时间来调整参数。

blueBallParams.blueMax= 30;%最大允许偏离纯粹的蓝色blueBallParams.darkMin= 90;%黑暗最低可接受值latestImg = rosReadImage (handles.colorImgSub.LatestMessage);[c ~球]= exampleHelperTurtleBotFindBlueBall (latestImg, blueBallParams useHardware);

使用这个例子辅助显示的数字。

exampleHelperTurtleBotPlotObject (latestImg,球,c);

调整颜色阈值是具有挑战性的优化相比,他们在一个模拟的环境像露台。

调整参数后,将它们添加到处理对象,它将使用球跟踪算法。

句柄。参数个数= blueBallParams;

固定的距离测试控制器

设置控制器TurtleBot收益。TurtleBot使用PID控制器呆在一个常数距离球。

第一组控制器收益有利于TurtleBot露台。第二组是好的TurtleBot在真实硬件。当你认为合适的调整收益。

这是一个紧凑的方式分配结构的值。

有效收益露台仿真:

收益。林=结构(“pgain”,1/100,“dgain”,1/100,“igain”0,“maxwindup”0,“选点”,0.65);收益。ang =结构(“pgain”,1/400,“dgain”,1/500,“igain”0,“maxwindup”0,“选点”,0.5);

有效收益TurtleBot硬件:

收益。林=结构(“pgain”,1/100,“dgain”,1/1000,“igain”0,“maxwindup”0,“选点”,0.75);收益。ang =结构(“pgain”,1/100,“dgain”,1/3000,“igain”0,“maxwindup”0,“选点”,0.5);

确保添加收益结构体的处理变量。

句柄。收益= gains;

定义一个计时器通过回调执行球跟踪行为。定义停止函数关闭ROS。包括定时器回调函数的处理:

timer2 =计时器(“TimerFcn”{@exampleHelperTurtleBotTrackingTimer、句柄useHardware},“期”,0.1,“ExecutionMode”,“fixedSpacing”);timer2。StopFcn = {@exampleHelperTurtleBotStopCallback};

使用以下命令启动计时器。你看全世界TurtleBot开始移动,寻找球。当它发现它在Kinect形象,机器人将使用控制器呆在一个固定的距离。

开始(timer2);暂停(1);

在模拟碰撞传感器不激活,所以TurtleBot可能不会恢复的时候撞了墙。

如果你想移动的蓝色球,使用以下命令施加一个力:

g = ExampleHelperGazeboCommunicator ();ballhandle = ExampleHelperGazeboSpawnedModel (“unit_sphere_1”、g)持续时间= 2;forceVector = [0 4 0];applyForce (ballhandle“链接”、持续时间、forceVector)

如果你想进一步探索露台的控制仿真参考在露台添加、建立和删除对象

机器人停止运动

停止计时器和自主行为,使用以下命令:

停止(timer2);

如果计时器清除工作区前停了下来,你必须删除它的另一种方式。停止所有计时器(甚至在后台计时器)执行以下命令:

删除(timerfindall)

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

清晰的

更多的信息

注:代码在本节不是MATLAB命令行执行

在这个例子中,组织支持文件允许您定制有很大的灵活性和重新定义代码。万博1manbetx你可以改变ball-finding参数和控制器通过改变值处理结构体。这个例子包含一个计时器管理所有方面的控制算法。这个计时器exampleHelperTurtleBotTrackingTimer。这个定时器的名称-值对ExecutionMode将确定多长时间定时器回调。此外,停止使用回调。如果你希望你可以把额外的回调函数。

处理传入的计时器参数个数ball-finding和收益的控制器。

的结构exampleHelperTurtleBotTrackingTimer很简单。这是一个基本的状态机和一些初始化的步骤。初始化函数决定了该跟踪算法和使用哪个控制器在悬崖或保险杠复苏状态。函数是:

函数[objectTrack imgControl] = initControl () % initControl——初始化函数来确定哪些控制%和目标检测算法使用objectTrack = @exampleHelperTurtleBotFindBlueBall;imgControl = @exampleHelperTurtleBotPointController;

在这个例子中跟踪功能exampleHelperTurtleBotFindBlueBall和控制器exampleHelperTurtleBotPointController你可以换这个函数和控制器与任何用户定义的函数,具有相同的输入和输出参数结构。的输入参数exampleHelperTurtleBotFindBlueBall是一个彩色图像和ball-finding的结构参数。输出参数是一个中心,大小和寻求对象的二进制图像。的输入参数exampleHelperTurtleBotPointController级对象中心,大小(尽管不是在示例中使用),图像大小,和控制器增益(结构)。线速度和角速度输出参数。

的基本状态机中使用exampleHelperTurtleBotTrackingTimer是:

开关状态情况下ExampleHelperTurtleBotStates.Seek%对象搜索状态(中心、规模)= findObject (handles.Tbot.ImColor handles.params);%如果没有找到圆漫步,目标圆如果它存在如果isempty(中心)[linearV angularV] = exampleHelperTurtleBotWanderController ();其他的[linearV, angularV] = imageControl(中心、规模、大小(handles.Tbot.ImColor) handles.gains);setSound (handles.Tbot 2);结束状态= ExampleHelperTurtleBotStates.Seek;情况下ExampleHelperTurtleBotStates.Bumper%保险杠接触状态情况下ExampleHelperTurtleBotStates.Spin%的自旋状态情况下ExampleHelperTurtleBotStates.Cliff%悬崖回避结束

您可以添加或删除的情况下状态机。如果你想改变国家名称、使用ExampleHelperTurtleBotStates类。

ball-finding算法模块化和可改变的。它使用两个图像过滤器(蓝色)一个在黑暗中,一个蒙面一起孤立的蓝色球。你可以改变面具找到红色或绿色球。如果你想探索其他形式的shape-tracking的基本工作流程是相同的。

蓝色通道隔离(一些扩展因素)和一个阈值应用于产生一个二进制图像掩模。

blueImg = img (:: 1) / 2 + img (:,: 2) / 2 - img (:,:, 3) / 2;blueThresh = blueImg < params.blueMax;

这些命令隔离的逆蓝色(用不同的比例)和强调黑暗。一个阈值。

darkIso = img (:: 1) / 2 - img (:,: 2) / 2 + 3 * img (:,:, 3) - 2 * rgb2gray (img);darkThresh = darkIso > params.darkMin;

掩盖了两个二进制图像一起孤立的深蓝色的球。

ball1 = blueThresh & darkThresh;

常数和尺度因素对图像user-determined隔离一个特定的颜色。你可以尝试不同的组合。

你也可以找到在过滤图像使用的区域regionprops,这是图像处理工具箱的一部分。

s = regionprops (ball1, {“重心”,“区域”,“EquivDiameter”});

有额外的步骤找到球从这个地区,你可以找到exampleHelperTurtleBotFindBlueBall

exampleHelperTurtleBotPointController函数使用ExampleHelperPIDControl类保持指定点(在本例中球的中心)的位置在图像中的精确位置。

示例代码的模块化和灵活性让你尝试你自己的算法和功能。