智能无人机开发教程(一)在无人机上跑slam之hector slam

前言

在使用了肖坤老师的xtdrone教程加上我自己的研究之后,可以在无人机+激光雷达的硬件基础上使用了slam算法,并且彻底掌握怎么使用与搭配的方法
本文的基础是xtdrone的例程,但是不局限于此例程,而是添加程序控制与自动运行的部分,并且讲清楚其内部逻辑。
我假定阅读者都有良好的ros基础(熟悉通讯方式、TF、仿真等),不会对基础的地方做详细说明,如果阅读者未有良好ros基础,请自行学习

框架概述

一点注意事项

可能很多人跟随古月居或者赵虚左老师的教程跑过一些激光slam的东西,比如说gmapping什么的,大家可能好奇,无人机是在三维空间中运动的,不像基础版本的无人车是在二维空间中运动的(这里指的是地图是二维的),会不会不匹配?答案是肯定的,不会特别匹配,尤其是在复杂三维环境下,二维激光slam与二维激光雷达的方法完全不适合无人机。
因为二维激光雷达一般旋转然后不断测距,这样就可以扫描到一个平面上各个障碍物到雷达中心点的距离,但是在复杂三维空间环境下,这种方法就不怎么合适了,比如说在树林里面,可能在激光雷达所扫描的平面里面并没有障碍,但是实际上在这个平面的下面就有一个树枝,这种情况会发生什么大家就应该清楚,会容易炸鸡的。
所以如果想在三维空间中使用二维激光slam方法,就需要简单的三维空间环境,什么叫简单的三维空间环境呢?比如说在无人机飞行高度内,各个高度的横截面形状基本上一致,这种就适合二维激光slam运行(毕竟三维激光雷达也贵很多,不是人人买得起的)
在这里插入图片描述
这是肖坤老师的一个例程里面的仿真环境,大家可以发现,这个环境就很符合简单的定义,如果无人机不飞过墙的高度,那么在同一个地点的任何一个高度所扫描到的数据都是一样的,这种情况下我们完全可以使用二维激光slam。
这里有人会问,无人机运动的时候会有倾斜,不会导致扫描到的数据不准确吗?实际上这个是会有的,比如说无人机俯仰的时候,前后方扫描到的距离就会变长,如果想纠正这个误差,那么只能想办法让激光雷达维持水平或者让它具备自动校准功能,在我印象里面思岚某款四千多的雷达可以有自动倾斜补偿功能,在小角度的倾角的情况下可以自动补偿,使得数据准确,但是这个贵,另一种不算方法的方法就是减小无人机的运动加速度和速度的最大值,这样就可以限制无人机运动时候的倾角,从而减小误差,这种技巧在简单三维环境下是可行的,毕竟经费有限的情况下要什么自行车对不对(超小声),如果有更高要求那就只能上三维激光雷达和三维slam算法了。

框架选择原因

因为无人机的里程计是三维形式的,目前还不知道能不能直接用在二维算法上,就选了一个不需要里程计的slam算法,那就是hector slam,这个算法虽然不适合复杂环境和高速运动,但是考虑我们也不会让无人机运动太快和大地图里面跑,这个算法就相当于没有缺点了。

配置slam

安装hector

我是ros melodic版本,所以进行如下安装

sudo apt install ros-melodic-hector-slam*

hector配置与注意事项

首先注意一下,hector slam是不需要里程计的,所以我们要把其launch文件里面的odom_frame和base_frame都修改为机器人坐标系中的base_link
这里参考了另一位博主的博文
速腾聚创Robosense16线激光雷达SLAM建图(一)————Hector建图
我的TF树如下
在这里插入图片描述
虽然不知道为什么mavros节点发布了一堆变换,但是我们只需要注意map->base_link-> (lidar frame)就可以,这里的(lidar frame)大家要换成自己的雷达坐标系,比如说在这个例程里面就是iris_0/lidar_2d
好像xtdrone的例程里面没有机器人基础坐标系到雷达坐标系的转换,这样大家根据雷达的相对位姿自己发布一个变换即可,我这里发布的变换中,只有z是0.1(表示激光雷达在机器人中心的正上方0.1m),其他的参数都是0,如果在实际无人机飞行中,大家自行测量激光雷达相对于无人机中心(应该是飞控)的位姿然后进行发布。

未完待续

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: SLAM (Simultaneous Localization and Mapping) 是指在不依赖外部定位设备的情况下,同时完成自主机器人的定位和环境地图的构建的一种技术。ROS2 是一种流行的机器人操作系统,提供了丰富的 SLAM 算法和工具库,以下是一些基于 ROS2 的常见 SLAM 算法: 1. Cartographer:Google 推出的一种实时 2D/3D SLAM 算法,可用于车辆、机器人和无人机等平台。 2. Gmapping:一种基于激光雷达的 SLAM 算法,通过对激光雷达数据进行建图和定位实现自主机器人的导航。 3. Hector SLAM:一种使用单个 2D 激光雷达进行建图和定位的SLAM 算法,特别适用于室内环境。 4. ORB-SLAM2:一种基于单目/双目/RGB-D 摄像头的 SLAM 算法,可用于室内和室外环境。 5. LOAM:一种使用激光雷达的实时 SLAM 算法,能够快速生成高精度的 3D 点云地图。 这些 SLAM 算法都有各自的优缺点,开发者需要根据具体应用场景选择适合的算法。 ### 回答2: 在基于ROS2开发SLAM算法中,有以下几种常见的算法: 1. 松耦合SLAM(LSD-SLAM):LSD-SLAM是一种基于视觉的SLAM算法,通过单目相机实时建模和定位。它能够实时地跟踪摄像机的运动,同时构建并维护一个地图模型。 2. 视觉惯性里程计(VINS-Mono):VINS-Mono是一种基于单目相机和惯性测量单元(IMU)的SLAM算法。它通过融合相机和IMU的数据,实现高精度的相机位姿估计和地图构建。 3. 激光SLAM(Cartographer):Cartographer是一种基于激光雷达的SLAM算法。它能够通过激光雷达扫描地图环境,实时定位并构建二维或三维的地图模型。 4. 深度学习SLAM(DeepTAM):DeepTAM是一种基于深度学习的SLAM算法。它利用深度神经网络从图像中预测相机的位姿和地图的结构,实现实时的SLAM定位和地图构建。 这些基于ROS2开发SLAM算法都具有不同的特点和适用场景。用户可以根据实际需求选择合适的算法进行开发和应用。 ### 回答3: 在基于ROS 2开发SLAM算法中,有几种常见的算法: 1. 点云SLAM算法:这种算法通过使用传感器产生的点云数据来进行环境建模和定位。常见的点云SLAM算法包括LOAM(Lidar Odometry and Mapping)和LeGO-LOAM(Lightweight and Ground-Optimized Lidar Odometry and Mapping)。 2. 视觉SLAM算法:这种算法使用摄像头捕捉的图像进行环境建模和定位。常见的视觉SLAM算法包括ORB-SLAM2(Oriented FAST and Rotated BRIEF-Simultaneous Localization and Mapping)和LSD-SLAM(Large-Scale Direct Monocular SLAM)。 3. 深度学习SLAM算法:这种算法结合了深度学习技术和SLAM算法,使用传感器数据进行场景理解,并实现环境建模和定位。常见的深度学习SLAM算法包括DeepSLAM、DynaSLAM和Depth-VO-Feat。 在开发基于ROS 2的SLAM算法时,可以使用ROS 2提供的功能来处理消息传递和节点通信,同时可以通过ROS 2的Package和库来实现算法的开发和集成。此外,ROS 2的分布式架构也提供了更好的可扩展性和灵活性,使得SLAM算法在多机器人系统中更容易部署和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值