AI&机器人需要掌握哪些关键技术

AI1年前 (2023)发布 aixure
68 0 0
导读:主要以机器人载体为例,分享涉及到的一些关键技术。 首先看一个最普通的机器人的问题:从A点导航到B点,模拟一个室外机器人或者室内机器人运动的整个过程。 在运动过程中,就会涉及到几方面的问题:这个机器人必须要知道我在哪?其次我要去哪?这过程我要怎…

主要以机器人载体为例,分享涉及到的一些关键技术。

首先看一个最普通的机器人的问题:从A点导航到B点,模拟一个室外机器人或者室内机器人运动的整个过程。

在运动过程中,就会涉及到几方面的问题:这个机器人必须要知道我在哪?其次我要去哪?这过程我要怎么去?

“我在哪?我要去哪儿? ” 这整个过程中涉及的技术就有感知、定位、建图,机器人首先要感知外部的环境,来知道自己的位置,即感知定位,其次就是构建一个环境的地图。

例如:从A点到B点,要规划出一条无障碍物、相对来说最优的轨迹,让机器人来执行,具体怎么执行,是整个的控制的过程。

这个控制过程,就涵盖了整个机器人领域大部分的技术模块。

首先最开始就是感知,如人一样进入一个新的环境中,要用眼去感知,看到外面的世界,机器人也是一样,通过身上的传感器,比如激光雷达、摄像头,用来感知外部的环境,识别一部分东西。

感知的一些信息会传达至定位建图的模块,也就是SLAM模块。不论是激光雷达还是摄像头、红外传感器,根据这些传感器信息,获得机器人当前的一些位置,同时构建一个环境地图,或者是已知一个环境地图,对这个环境地图进行定位。

通过机器人的定位信息,规划一个过程,比如说规划一个导航,这个导航肯定要依赖于机器人定位的信息或激光雷达等信息,规划出这条路径以后,要执行这条路径,将路径发至我们的控制模块,控制模块跟踪这条路径,从而达到最后的效果。

这就是机器人,特别是移动机器人涉及到的相关的技术。

对于一个臂式机器人或足式机器人,也是类似。但是对于臂式机器人,如机械臂,定位和建图这块可能是没有的,但是需要感知。感知之后,将信息传达给运动规划,进而进行运动控制。

下面我就以以下几个模块及相应的关键算法和技术,做简单的介绍。

感知模块

感知模块是干什么的?举一个运用场景最多的、简单的例子,无人驾驶汽车的感知是非常重要的。感知是一个载体,作为识别环境的第一步,若是没有这一步,那么就没法准确地去做规划控制。

作为无人驾驶汽车,感知可以就分为检测、分类、跟踪、语义分割四块。

检测即分布路面的情况,如交通灯等,找出物体在环境中的位置;

然后进行分类,明确自己检测的东西是什么,比如说警示牌、限速牌等等;

跟踪,随着实践的推移,要观察移动物体,要对前面或者说附近的车辆进行跟踪,注意移动位置;

语义分割,感知图像中有不同的元素,要知晓每个元素是做什么的,与语义类别进行匹配,如道路、汽车、天空等等。

一般通过什么来感知呢?就是摄像头,雷达,如激动雷达,车上的倒车雷达等等。

每一个传感器都有不同的作用。

若是想要执行感知模块的四大版块,涉及什么样的算法呢?

传统算法,已有最近流行的深度学习算法,现在比较流行的,在无人驾驶领域等人工智能领域,常用的网络结构有R-CNN、YOLO、SSD等等,比如说举例无人驾驶汽车感知模块,经过YOLO网络进行物体的跟踪,车道线探测等等。

这涉及很多深度学习算法,还有感知常用的、传统的机器学习算法。

看一下另一个机器人机械臂。机械臂的感知模块与无人驾驶汽车、机器人还有所不同,他的感知大致是相同的,比如说完成机械臂抓取的任务。

这是最常见的一个任务,它的功能有以下几块:相机标定,物体识别、位姿估计。

为什么要进行相机标定呢?机械臂在抓取时,物体是在摄像头下面的一个位姿,要完成抓取任务,还要完成机坐标系等,它要通过一系列坐标系的转化,来完成相机内外参的标定。

还有与无人驾驶常用的类似,即物体识别,要识别这个物体,进行分割,然后完成物体的抓取任务。

最重要一个模块,就是位姿估计,我要抓取物体,获取物体在摄像头之内的位姿,就一定要探测出当前的一个位姿,讲位姿提供给规划模块,才能在此基础上进行抓龋

可以说一下这几块的任务,比如说相机标定,在机械臂抓取过程中,也是非常关键的环节。

相机安装的位置可能有两种:一种是固定在机械臂的外部,或者是摄像头固定在机械臂的手上,一个是眼在手外,一个是眼在手上。标定的方式是类似的,都是通过一系列坐标系的转换,来确定相机的外参和内参等等。

位姿估计在机械臂抓取过程中是非常重要的,目前常用的有2类算法。

一类是基于传统的,首先将物体进行分割,分割后是一系列的点云信息,将分割出的点云信息进行ICP匹配,匹配获得物体的位姿。

另一种是利用神经网络,不经过分割,直接进行位姿估计。

这里的位姿估计指的是6D的位姿估计,因为抓取需要获得它的SYZ,姿态信息、平移的信息都要获得。6D的位姿估计,在目前的3D视觉中,也是研究的热点。

下面呢就是定位与建图模块,这就主要针对移动机器人和无人驾驶这一块来说的,机械臂可能不涉及这一块。

定位与建图,做SLAM的同学可能会非常熟悉,这是定位与建图整体的框架,主要分为前端、后端、回环、建图。

前端和后端也分为很多的模块,比如说使用的传感器,是目前主要的分类方法,比如说以激光为主的SLAM和视觉为主的SLAM,这是一大类分类方法。

还有一种,类似后端,是采用滤波方式还是优化方式,分为基于滤波的,或者是基于优化的,现在大家主要说基于激光的,基于视觉的。

激光SLAM主要是以激光为主,肯定不是用一种传感器,多传感器融合进而获得定位的信息,融合最常见的就是IMU、里程计、GPS,视觉SLAM以视觉为主,也是融合IMU、里程计、GPS等多种传感器。

可以看一下激光SLAM涉及到的一些关键技术,在SLAM领域研究比较热,有很多经典的天然框架,这些框架非常值得大家去学习。

激光SLAM中比较经典的开源框架,Gampping是比较早的,主要是2D的建图,这主要是基于滤波的。

基于粒子滤波的SLAM,现在在3D场景下比较常用的是LOAM系列,在室外的机器人或者无人驾驶汽车中,LOAM使用比较多。

LOAM系列目前延伸出很多,如F-LOAM、A-LOAM。

LOAM主要针对的是3D的点位信息,室外场景的激光SLAM框架。

还有一个非常经典的就是Gartographer,这个如果做室内机器人,包括做室外产品的,会都比较熟悉。

做激光的,这是谷歌开源的非常经典的SLAM框架,有2D版本,也有3D版本。

就室内的来说,Gartographer是目前性能比较好的框架,目前3D版本在室外的场景,算是还可以。

Gartographer的整个的回环、前、后端,都是比较全的,LOMO最原始的,只有一个前端,当然,在后来的工作中也添加了很多。

关于在激光SLAM中,前端和后端是干什么的呢?前端激光里程计,目前方法研究的也很多,比如有基于直接匹配的,这里有两大类,ICP和NDT。

ICP就是两头点评之间进行匹配,求出两头点评之间的旋转位姿,一个R、一个T。ICP又分很多种,一种是点到点的ICP匹配,这种的效率比较低一些。还有就是点到线、点到面的PLICP等等。

NDT系列整体性能要比ICP整体要好一些,把空间划分为一个个的栅格,然后在栅格中求一个高斯分布,两个点中求一个概率分布,求最大值来进行匹配。因为划分为高斯分布,比点到点的效率要高,匹配的效果也要更好一些。

前端还有基于特征的,LOAM系列是基于特征的,会在点之中提取一些边缘,提取一些面信息。会根据这些信息,求出一个函数,进行点云和点云之间的匹配。

还有一些Cartographer是基于栅格的,Cartographer前端是做出了一个map的匹配,就会建立一系列的子图,叫做Submap。

每一坨点云都会和Submap进行匹配,找到栅格的最大值,当前在Submap中当前的位姿,通过Submap的匹配获得当前的位姿。当然,这里面也经过了siris优化。

还有一些,是比较前沿的,比如基于语义的里程计,这里不做详细分析。

后端,刚才也说了,有基于滤波器的,也有基于非线性优化的,目前主流算法都以基于优化为主,因为优化性能要强于滤波器的,现在也有一些因子图优化,这是用得比较多的。

还有就是回环检测,有初始相对位姿,如在室外场景下有GPS,如何能够精确导航,就可以基于这个位姿做一个回环,这样会比较简单,直接拿当前的位姿和逆时针的点位进行ICP或者NDP的匹配,来获得回环的约束。

如果无初始相对位姿,没有一个很好的GPS来提供一个初始位姿,要找一个与历史位姿相近的特征,有非学习的方法和基于学习的方法。非学习的方法,比如说scan context,有一款是可以获得两个点云之间的像素度,从而进行一个打分,当然,还有一个方法,比如说特征直方图等。

下面是视觉SLAM经典的开源框架

对于视觉,就研究的更多一些,它的经典的天然框架只会更多,比如说经典的ORB-SLAM、SVO、DSO,这都是纯视觉。主要以demo为主,额外还有VIO系列。

视觉经常会和IMU来融合,因为纯视觉往往会受环境影响大,加上IMU,会得到融合得比较好的估计。

经典得还有VINS系列、OKVIS等,这是通过IMU的微积分,来获得帧与帧相关的约束,约束加入后端。

关于视觉的前端视觉里程计,主要有特征匹配和直接法。特征匹配可以直接提取特征信息,直接法就是基于光流,做视觉SLAM的同学应该会比较熟悉,后端也是基于优化的方法用得比较多。

对于视觉来说,它的回环激光就不太一样,采集的图像比较丰富,主要基于一个SLAM模型这一块比较多一些,这是视觉SLAM。

之后就是定位与建图中的建图,我们定位的建图有以下几种:2D栅格地图、2D拓扑地图,3D点云地图、3D网格地图。

建图主要是为了给后续的导航来使用,只要定位有了,建图在SLAM中是非常简单的事情,把相关的景观特征组成一个地图。

对机器人来说,比较重要的是Planning规划模块。从框架来看,大致也可以划分为前端和后端,前端就是做一个globe blame全局的规划,这个全局主要是搜索一个初始的路径,这会遇到一些路径搜索的算法。

后端是干嘛的呢?对着路径进行再处理,得到一个可以下发给控制模块的指令,也可以划分为全局和局部,当然,现在也有一些基于端和端的规划模块,但在使用中,这种全局和局部的方式,用得会更多一些,这是一个规划模块的框架。

规划模块涉及的算法,比如说基于搜索的规划算法,这是一大类,这种基于搜索的算法有很多,比较经典的就是Dijkstra、Astar,Dijkstra扩展的效率可以了解要比A*低很多,因为它是无目的性的拓展,而Astar加入了启发函数,因此说,Astar是目前比较主流的一种搜索算法。

当然,Astar也会延伸出很多其他的,基于Astar系列的改进,如Dstar是基于动态障碍物,来进行局部的规划。

最近几年,还提出了JPS的算法,即是跳点搜索。它的效率要比Astar要更高一些,因为Astar在扩展的时候,扩展出很多无用的商品,JPS对扩展的栅格进行一系列的优化。

全局规划算法,除了基于搜索,还有基于采样的规划算法,其中包括两大类:PRM(概率路线图)和RRT(快速搜索随机数)系列。

下面这张图就是RRT快速搜索的过程,它是建立一个随机数,在空间中随机采样,来找到最终的目标。

基于RRT,有一系列的改进。比如说Bi-RRT和RRT-connect,会从两端进行搜索,再一个就是考虑RRT的最优性,会有一个RRT*、InformedRRT*,这都是衍生出来的,对RRT的改进算法。

再进一步说,全局还有考虑运动学约束的规划算法。为什么要考虑运动学约束?A*规划出的算法其实是一些拓展的栅格,是一些折线,不满足机器人实际的运动学约束,在这个情况下就需要进一步的考虑,比如说混合A星,进行拓展的时候,会基于运动学的模型进行拓展,这样就可以搜索出接近于可执行的轨迹,给后面的局部优化,带来更小的压力。

还有一些,StateLatticePlanner,也是基于考虑机器人运动学,还有一个就是RRT、KinodynamiceRRT*,也是考虑RRT的相关算法。

对于局部规划算法来说,局部更多的是进行内部环境的优化,对于全局不满足各种约束的路径,进行局部的优化。优化方法,这里会涉及到基于硬约束和软约束。

常见的在ROS中经常看见的局部优化算法,有DWA、TEB、MPC等,这些很多的思路都是基于优化的思想,如TEB是对前端的轨迹进行拉伸,拉伸后使他出来满足一个约束。

MPC也会做一个关于硬约束的优化,来解决优化问题,求出符合约束的路径。

举一个规划算法的例子:ROS集成室内移动机器人的导航框架。这里分为两极,global planner \local planner ,全局的规划和局部的规划。

考虑到全局规划用于global costmap,local planner用的是local costmap,当然这里还涉及输入信息、定位信息和传感器信息等等。当然,规划失败的时候,也会考虑recovery behaviors,这就是它的两层结构。

在global planner里可以用A* ,RRT等,在local planner里可以用基于优化的算法。

对于机械臂来说,它的规划算法,基本算法与A*、RRT等是类似的,它与移动机器人还是不同的。机械臂是在一个高维空间规划,它的规划显得要更加得困难。它基于优化得算法会用得更广一些,比如说OMPL规划库,这个规划库主要集成得RRT为代表得算法,因为A* 在高维空间中,搜索得压力会更大一些,RRT在这里得效率会更高一些。

还有一些常用得规划算法,如CHOMP、STOMP等。这是在机械臂中常用得一些算法,它的思路与移动机器人的思路是相似的,都是基于优化,从而求出一条可执行的轨迹。

下面就是控制模块,控制模块是在规划出来的轨迹中进行跟踪,控制模块涉及到机器人控制学的机器模型,比如说差速机器人运动学模型,是比较常用,也是比较简单的。

在室外,就是使用的汽车运动学模型,因为前后有转向,有转向角,常用的一些控制算法有PID、LQR等。

在这里主要说一下LQR控制算法,也叫线性二次调节器,比如说这是对汽车红色向的控制。它会建立出汽车这样一个红色向的模型,运动学或者是动力学模型,写成一个线性形式,然后优化代价,代价里有一个跟踪的指标,还有一个控制的指,,最终求出一个反向控制率,来进行一个反馈的控制。

常用的MPC控制算法,MPC是一个滚动优化的策略,基于一个机器人预测模型,会往前预测出这么一个N部,针对这个N部进行滚动优化,每次优化。

因为控制器求出这个N部,当然控制时域与预测时域不一定相等,这个U会第一步发给对象,来做一个反馈的控制,这个过程不停地去迭代,一直不停地去滚动优化。

通过这个预测输出,这种控制算法目前在移动机器人中用得比较多,特别是在在机械臂地滚动优化部分。

赞助本站

© 版权声明

相关文章

暂无评论

暂无评论...