系列文章目录
北科天绘 16线3维激光雷达开发教程
基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图
Nvidia Jetson Nano学习笔记–串口通信
Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出
Autolabor ROS机器人教程
前言
最近期间开始学习Linux嵌入式,ROS,激光SLAM,学的很杂,学的很乱,学习的过程中愈发地想造一台ROS小车,小车的最终要实现的功能是实现自动导航运动。经过一段时间的学习,已经初步实现了导航功能。
下面我将记录一下实现的过程。
整个智能车主要由 主控制器(我用的是NVIDIA Jetson AGX Xavier 简称为Nvidia),一个二维雷达,一个小车底盘等组成。本文只是做一个概述,详细的实现过程和代码我将会写在后面的博客。
目前是实现一个比较简单的导航功能,整个实现过程大部分也是按照Autolabor机器人的教程来做的。
一、小车底盘
智能车的底盘一般采用四轮差速底盘,通常Nvidia通过串口或者CAN协议来控制底盘的运动,也可以获取小车的编码器数据等等,在我的车里面采用的是四轮底盘,Nvidia通过串口发送数据给底盘来控制其运动。
二、激光雷达
激光雷达是激光SLAM中非常重要的一个传感器,可以通过激光雷达+cartography算法来建图,也可以通过激光雷达+amcl来实现定位功能,也可以用在move_base功能包中来实现避障功能。
三、建图
在现实生活中,当我们需要实现导航时,可能会首先参考一张全局性质的地图,然后根据地图来确定自身的位置、目的地位置,并且也会根据地图显示来规划一条大致的路线… 对于机器人导航而言,也是如此,在机器人导航中地图是一个重要的组成元素,当然如果要使用地图,首先需要绘制地图。 在激光SLAM中 建图的算法有很多,但是对于二维雷达来说效果比较好的建图算法就是Cartography。
四、定位
导航伊始和导航过程中,机器人都需要确定当前自身的位置,如果在室外,那么 GPS 是一个不错的选择,而如果室内、隧道、地下或一些特殊的屏蔽 GPS 信号的区域,由于 GPS 信号弱化甚至完全不可用,那么就必须另辟蹊径了,比如前面的 SLAM 就可以实现自身定位,除此之外,ROS 中还提供了一个用于定位的功能包: amcl。
说白了定位就是在地图中让机器人确定自己所在的位置,可以采用激光雷达+amcl来实现定位功能。
amcl(adaptiveMonteCarloLocalization)自适应的蒙特卡洛定位,是用于2D移动机器人的概率定位系统。它实现了自适应(或KLD采样)蒙特卡洛定位方法,该方法使用粒子过滤器根据已知地图跟踪机器人的姿态。
五、导航
导航就是机器人从A点运动至B点的过程,在这一过程中,机器人需要根据目标位置计算全局运动路线,并且在运动过程中,还需要时时根据出现的一些动态障碍物调整运动路线,直至到达目标点,该过程就称之为路径规划。在 ROS 中提供了 move_base 包来实现路径规则,该功能包主要由两大规划器组成:
全局路径规划(gloable_planner)
根据给定的目标点和全局地图实现总体的路径规划,使用 Dijkstra 或 A* 算法进行全局路径规划,计算最优路线,作为全局路线
本地时时规划(local_planner)
在实际导航过程中,机器人可能无法按照给定的全局最优路线运行,比如:机器人在运行中,可能会随时出现一定的障碍物… 本地规划的作用就是使用一定算法(Dynamic Window Approaches) 来实现障碍物的规避,并选取当前最优路径以尽量符合全局最优路径
全局路径规划与本地路径规划是相对的,全局路径规划侧重于全局、宏观实现,而本地路径规划侧重与当前、微观实现。
总结
整个智能车的组成部分就上面所介绍,后面我将一一介绍智能车的每一个部分。