学生休息室

分享技术和现实生活中的例子,学生如何在他们的日常项目中使用MATLAB和Simulink # studentsuccess金宝app

自治系统如何“看”?

塞巴斯蒂安·卡斯特罗回到谈论传感器在自治系统中,由几个例子算法和学生竞赛,使用低成本的硬件平台。金宝app

介绍

世界各地有很多挑战,关注学习自主感知和导航使用低成本地面车辆平台。这里有几个,我们支持由类似的任务:金宝app

我们的以前的博文覆盖了Rose-Hulman高中自主车辆的挑战。在这篇文章中,我们将会深入研究TurtleBot3 AutoRace。这个学生竞争包含一个准备好了仿真包和一个套教程

TurtleBot3也设计成一个教育低成本的平台机器人操作系统(ROS)。活性氧是一个软件框架,许多事情中,让用户可以很容易地模拟和硬件之间切换。我们已经讨论了以前的博文ROS, MATLAB和S金宝appimulink接口。这使我们从AutoRace收集数据模拟和一些快速的例子。

ROS也以包含专门化信息类型表示常见的传感器用于自治系统。与此同时,MATLAB和Simulink工具箱金宝app计算机视觉,运动规划,自动驾驶。所以,在这篇文章的其余部分,我将桥这两个工具探索通用传感器类型几个例子:

  • 视觉传感器:各种类型的相机(mono和立体、色彩与红外线,等等)。
  • 视线传感器:超声波传感器、雷达和激光雷达。

首先,我们可以下载TurtleBot3 AutoRace软件包和启动露台模拟器。

美元roslaunch turtlebot3_gazebo turtlebot3_autorace.launch

然后,我们可以使用ROS MATLAB连接到模拟器。因为我使用Windows主机和Linux虚拟机,我是连接到一个ROS主与一个特定的IP地址如下所示。

rosinit (“192.168.119.129”);

相机的例子:车道检测

让我们得到一个图像从模拟器。

imgSub = rossubscriber(' /相机/图像');imgMsg =接收(imgSub);rgbImg = readImage (imgMsg);

上面列出的所有学生比赛有一个车道检测和组件后,我们使用图像检测车道。一个典型的工作流程是:

  1. 变换图像鸟瞰
  2. 部分图片
  3. 检测车道
  4. 创建一个控制算法(或不遵循)车道

鸟瞰通常用于使车道检测更容易,因为它消除了相机的“视角”效应显示自顶向下的形象。要执行该转换,我们需要计算一个执行旋转变换矩阵和/或翻译在一个图像的像素。要做到这一点,您可以:

  • 获得内在(焦距、失真等)和外部(位置车)上的相机相机参数,然后计算出变换矩阵
  • 估计一个变换矩阵的4点图像映射到4点在现实世界中

获取摄像机内参数,您可以查看数据表或制造商调整到一个已知的模式——通常是一个棋盘。在这个例子中,我把第二种方法涉及手动选择分并将它们映射为一个已知的“真理”价值的鸟瞰图。的estimateGeometricTransform函数在这一步是很关键的。

tform = estimateGeometricTransform(点,真理,“射影”);warpedImg = imwarp (rgbImg tform);次要情节(1、2、1)imshow (rgbImg);次要情节(1、2、2)imshow (flipud (warpedImg));

部分图片,您可以使用颜色阈值。使事情变得更简单,这些学生竞赛用颜色来区分左和右车道边界。AutoRace的车道是黄色和白色,所以我们可以校准和定义两组颜色阈值。

yellowIdx = (warpedImg (:: 1) > 100 & warpedImg (:,:, 3) < 100);whiteIdx = (warpedImg (:: 1) > 100 & warpedImg (:,:, 3) > 100);

最后,您可以使用像素的位置近似道数学方程,一般多项式。直巷可以表示成一条线(或学位1多项式),但弯曲车道受益于高阶多项式,如二次或三次。减少像素的数量曲线拟合,我第一次场大病的行让他们一个像素宽。

polyOrder = 3;[,cy] =找到(bwskel (yellowIdx));yellowPoly = polyfit (, cy polyOrder);

也有多个车道图像的问题。因此,而不是拟合多项式的所有像素满足给定的颜色阈值,您可以应用技术随机样本的共识(RANSAC)消除异常值,产生更好的结果。

polyOrder = 3;numOutliers = 50;[,cy] =找到(bwskel (yellowIdx));yellowPoly = fitPolynomialRANSAC (ry cy, polyOrder numOutliers);

车道检测与普通多项式,显示异常值的影响

车道检测和RANSAC,消除离群值

为更先进的车道检测和应用程序之后,您可能想要看一些例子在自动驾驶系统工具箱:

激光雷达的例子:本地化和映射

与图片不同,从视线测量传感器不含颜色和强度信息。然而,他们更善于直接测量车辆之间的距离和速度和潜在的障碍或地标。

超声波传感器、雷达和激光雷达基本上是类似的,除了他们使用声音、光和无线电波,(分别)。因为光比声音快得多,激光雷达可以产生高分辨率的数据,无论是在2 d和3 d。另一方面,超声波和雷达传感器更便宜、更长的工作范围,更健壮的天气条件。

视线传感器是用于两个主要任务:

  • 障碍检测
  • 本地化和映射

在本例中,我们将演示激光雷达。让我们首先从模拟接收扫描激光雷达传感器和转换它激光雷达扫描对象为了方便。

scanSub = rossubscriber(' /扫描');激光雷达= lidarScan(接收(scanSub));

障碍检测通常涉及到分离的可行驶的地形障碍,如果需要,然后使用机器学习技术,如聚类获得更多关于环境的结构的信息。有关更多信息,请参考这个文档页面

% 2 d扫描转换为三维点云分割并执行障碍使用欧氏距离聚类ptCloud = pointCloud(激光雷达。笛卡尔0(大小(lidar.Cartesian, 1), 1)]);minDist = 0.25;[标签,numClusters] = pcsegdist (ptCloud minDist);

至于本地化,最简单的方法是“航迹推算”,或计算的次数汽车的轮子了。因为这一过程需要整合速度测量估计位置,是高度敏感的车轮滑转和传感器噪声/漂移。基于激光雷达的定位方法更为复杂和计算昂贵,而是因为他们不依赖于传感器读数的整个历史,他们更善于避免漂移的估计车辆的位置。

与激光雷达定位取决于地图是否已经存在:

  • 如果已知的地图,您可以使用概率方法粒子过滤器找出最可能的位置,会产生当前的阅读。
  • 如果不知道地图,您可以使用优化方法扫描匹配找出你移动多远两个连续扫描。
%得到第一次扫描lidar1 = lidarScan(接收(scanSub));% velMsg.Linear移动机器人。X = 0.1;velMsg.Angular。Z = 0.25;发送(velPub, velMsg);暂停(1);velMsg.Linear。X = 0;velMsg.Angular。Z = 0;发送(velPub, velMsg);%得到第二次扫描lidar2 = lidarScan(接收(scanSub));%执行扫描匹配relPoseScan = matchScans (lidar2 lidar1)

扫描匹配另外允许您执行同步定位和映射(大满贯)。通过一系列的激光雷达测量,你可以估计车辆轨迹和障碍的位置在地图上最有可能会生成这些测量。这样做的一个方法是通过建立和优化机器人构成图(位置和姿态)随着时间的推移,这被称为基于大满贯,在机器人系统工具箱

下面是收集的结果价值45秒的数据和估计机器人轨迹,只从激光雷达信息地图。这就是所谓的离线大满贯,而在线大满贯会做同样的事,但以实时数据为车辆驾驶。

%定义LidarSLAM对象maxRange = 2;%米分辨率= 25;%细胞每米大满贯= robotics.LidarSLAM(分辨率,maxRange);大满贯。LoopClosureThreshold = 350;大满贯。LoopClosureSearchRadius = 5;%建立和优化构成图numIters =元素个数(scansSampled);idx = 1: numIters addScan(大满贯,scansSampled (idx));结束%将最终结果导出为一个占用网格[slamScans slamPoses] = scansAndPoses(大满贯); map = buildMap(slamScans, slamPoses, resolution, maxRange);

在实践中,通常执行传感器融合,或将来自多个传感器的数据,使用等技术卡尔曼滤波。这让算法使用各种传感器的相对优势,提供了冗余信息,以防一些传感器产生不准确的读数,并允许更健壮的检测对象的跟踪。

现在,您已经有了一个地图,您可以参考下面的例子,看看如何在这个路径导航:

接下来是什么?

还有很多你可以与这些传感器。这里我们不讨论一个主题是使用机器学习分类和定位感兴趣的其他对象——例如,交通标志、行人或其他车辆。事实上,其他学生竞赛等人工智能驾驶奥运会(AI-DO)鼓励这些解决方案在上述更“传统”的技术。金宝搏官方网站

在上面的例子中,我们使用ROS流传感器数据到一个单独的计算机MATLAB运行,所以处理场外的。小型、低成本平台通常不能运行一个完整的安装的MATLAB。根据您创建的类型的算法和硬件你目标,您可以利用MATLAB的C / c++代码生成和仿真软件,以及它的硬件支持包。金宝app金宝app这允许您使用MATLAB和Simulink原型和设计无需后金宝app来在另一种语言重写你的设计所以它运行在你的目标系统。

TurtleBot3平台例如,有一个覆盆子π3模型B运行Linux和活性氧。所以,如果你的算法编写支持代码生成的功能和语法,你可以遵循一个工作流相似金宝app这个例子和让你的MATLAB代码或仿真软件模型上运行独立的机器人金宝app或自主车辆。

如果你有任何问题在这里讨论任何事情,随时给我们评论或与我们联络电子邮件脸谱网

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。