结合无人机室内导航谈谈3DVFH+算法

2023-05-16

无人机室内导航路径规划——障碍规避

在浏览PX4开发手册过程中看见里面提到的一种障碍规避算法——3DVFH+。该算法在之前做本科毕设时候有所接触,不过当时是进行了2D的Matlab仿真,down个代码改改障碍物形状,飞机当做质点考虑,没有深入了解这个算法在实际中该怎么应用。今天找到了论文的原文《3DVFH+:Real-Time Three_Dimensional Obstacle Avoidance Using an Octomap》,从头到尾仔细看了看,发现比较适合无人机在室内导航中做障碍规避,尤其是在低速时的无人机状态可以简化为(x,y,z,yaw)时。更方便的 是这个算法被集成到ROS的功能包中,不过程序还没来得及看,Github上有源码,可以直接下载浏览。下面给出原文和一些自己的理解。

摘要

在之前解决三维高密度障碍的方法中多数是从3D地图中建立2D地图,或者是有多层高度的2D地图,在实际三维空间的飞行中,这些方法效果不佳。本文提出使用了基于2D的VFH+和octomap表示三维环境的方法。该方法从octomap中生成一个2D极坐标直方图来指引机器人运动。并且计算量极小,实时性很好。

简介

1.机器人对环境中的密集障碍物的定位可以通过laser或者depth camera实现,并且用octomap表示。
2.目前2D机器人在3D环境中导航通过建立2.5D高度地图或者2D地图来规避障碍。解决3D的路径规划使用A或D,但这两种方法耗费计算资源。
3.作者的方法为基于2DVFH+,从octomap中生成一个2D极坐标直方图来进行3D导航。(贴出原文)
在这里插入图片描述

相关工作

简单说就是之前的导航算法针对的都是2D运动机器人,3D环境使用A和D计算太慢。作者将自己的算法分成五个部分进行说明。

Octomap

Octomap是一种表示3D环境的有效方法。只要传感器能给出深度信息(点云信息)就可以生成,基本单位是voxel(体素),voxel的大小也可称为分辨率,体积越大计算量越小但是精度越大。voxel定义网上有很多,我截个图直观的展示一下,然后附带着原文简要说一下octomap的表示方法。
在这里插入图片描述
octomap框架是一个基于八叉树结构的3D占用网格映射,每个体素(也称节点)都是一个正方体。每个体素可以包含8或0个子节点,当八个子节点均被占用时,便可缩成一个父节点,全部空闲时同理。传感器中有一些不确定信息,octomap的叶子体素中包含一个概率,也就是octomap有一个环境的概率表示,这个值来表示体素占据或者空闲的概率。八叉树框架没有直接包含体素的位置信息,但是位置可以在八叉树下降时计算得到,根体素有一个固定的位置,子体素的数量决定了子体素的位置。
![在这里插入图片在这里插入图片描述
在这里插入图片描述

3DVFH+

第一步:八叉树地图探索

机器人的传感器感知范围有限,并且考虑到精度和计算载荷,在机器人运动过程中,仅对一个小边界范围内进行地图探索。里面还提到一些简化运算的技巧,不展开谈。

第二步:二维原始极坐标直方图

将体素中得到的信息添加到2D原始极坐标直方图中,一个有效的体素由两个角度决定。
在这里插入图片描述
然后对体素进行处理,一些不符合要求的体素别剔,对剩下的有效的体素进行位置(距离和角度)计算。具体数学过程就是基本的几何知识,不难理解。图四中还考虑到飞机的安全包络,机体半径等因素影响。
在这里插入图片描述
算法对范围内体素的权重进行了分配,根据欧氏距离和被占有的概率,体素的权重值在第四步的二值极坐标直方图有很大作用。
在这里插入图片描述

第三步:物理特性

这部分讲到了机器人在运动过程中的动力学问题,有时候需要调整航向进行转弯的机动,这些动作和机器人当前状态有关。当然在无人机速度不快的时候,我们可以将其运动分为旋转和平移两个独立的部分。后半部分主要讲了转弯半径和爬升的机动策略。

第四步:2D二值化极坐标直方图

此部分减少了原直方图的信息来生成一种新的直方图。
在这里插入图片描述

第五步:路径检测和选择

在2D二值化极坐标直方图中进行窗口扫描,如果空隙大于飞机包络,记作一条可选路径。对于多条候选路径,本文给出了一个代价函数来对路径进行选择。
在这里插入图片描述
我的理解,第一个因素是看各条候选路径“绕远量”,第二个因素看各条候选路径的“旋转代价”,第三个因素可以理解为“机动代价”,对于双轮车和慢速无人机,我们可以先转向再行驶,因此第二三个因素貌似是等价的。当然速度过快的无人机就不能作此简化。

实验和总结展望

实验给了一个gazebo的仿真,没有实际的测试。后面内容略掉。

准备以后拿飞机上结合自己的任务试一试,有结果继续更。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结合无人机室内导航谈谈3DVFH+算法 的相关文章

  • C++学习笔记 之 数组使用注意事项(持续补充ing)

    我是目录 在不知道数组长度时 xff0c 想要声明数组 数组名相当于指针常量 xff08 即 type const xff09 数据名在作为函数的参数时将失去其数据结构内涵 在不知道数组长度时 xff0c 想要声明数组 xff08 例如想要
  • C++学习笔记 之 常量指针与指针常量

    常量指针 形式 xff1a const int pt 特点 xff1a 防止通过该指针修改指向的值 指针的指向可以改 Int age 61 23 Const int pt 61 amp age 表明 pt 的值不能被修改 xff0c 或者说
  • Pytorch学习笔记 之 主体训练流程

    目录 数据读取部分DatasetDataLoader 模型训练优化器设置损失函数设置设备设置模型训练保存 加载模型 数据读取部分 pytorch官方文档链接 xff1a 这里 Dataset 数据类 xff0c 需要自己实现 xff0c 后
  • C++学习笔记 之 lower_bound & upper_bound

    用于查找有序序列中目标值的上下界 使用时需要包含头文件 include lt algorithm gt 内部实现是二分查找 xff0c 时间复杂度为 O l o g n
  • Git 学习笔记

    目录 教程链接常用命令 教程链接 廖雪峰Git教程 Git官方教程 常用命令 工程准备 git init git clone 新增 删除 移动文件到暂存区 git add git rm git mv 查看工作区 git diff git s
  • 对vector元素取址 时出现的问题

    一般不建议对vector里的元素进行取址 xff0c 除非vector已经填充完毕 xff0c 即size不再变化时才可取址 因为如果vector未填充完毕时 xff0c 此时把某一元素地址赋给一个指针p xff0c 后续如果对vector
  • maskrcnn_benchmark使用过程 错误记录

    在使用maskrcnn的benchmark框架的时候训练突然报错 xff1a Non existent config key MODEL ROI BOX HEAD NUM CLASSES 39 之前还能正常运行的 xff0c 突然就报错 x
  • CMakeLists.txt书写规则记录

    编写自己的CMakeLists txt 1 一个CMakeLists txt的基本内容2 项目包含多个文件或文件夹时添加方式3 添加链接库 1 一个CMakeLists txt的基本内容 span class token comment 编
  • 1-FreeRTOS入门指南

    本专栏是根据官方提供的文档进行FreeRTOS的各个功能函数的说明 xff0c 以及函数的使用 本专栏不涉及动手操作 xff0c 只是对原理进行说明 xff0c FreeRTOS基础知识篇更新完成会对如何在开发板上进行上手实战操作 这里不会
  • 2-FreeRTOS编码标准、风格指南

    1 编码标准 FreeRTOS源文件 对所有端口通用 xff0c 但对端口层不通用 符合MISRA编码标准指南 使用pc lint和链接lint配置文件检查遵从性 由于标准有很多页长 xff0c 并且可以从MISRA处以非常低的费用购买 x
  • 4-FreeRTOS队列、互斥、信号量

    1 队列 队列 xff08 我对队列的理解就是上体育课 xff0c 排队这种 xff09 是任务之间通信的一种方式 队列可以用于任务和任务之间或者中断和任务之间消息的接收与发送 在多数情况下 xff0c 他们消息缓冲是按照FIFO xff0
  • QT教程demo之串口助手代码设计实现

    关注WeChat Official Account 南山府嵌入式获取更多精彩 我创建了一个群关注V号后加入 因为这里不允许添加二维码 代码 xff1a QT Pr 1 QT开发串口助手需要的基本文件 在QT6开发串口助手时 xff0c 通常
  • 自己动手写全套无人驾驶算法系列(四)机器人2D SLAM

    自己动手写全套无人驾驶算法系列 xff08 四 xff09 机器人2D SLAM 目录 一 概述 1 1 系列整体概述 二 传感器层 2 1 轮式里程计 2 2 IMU 2 3 激光雷达 2 4 视觉VO 三 建图层 3 1 静态二值贝叶斯
  • 深入理解如何不费吹灰之力搭建一个无人驾驶车(一)2D-小车底盘部分

    一 搭建综述 无人驾驶最新很流行 xff0c 但是很多人都觉得这东西蛮高大上的 xff0c 因为CSDN还没有一个完整的介绍无人驾驶车如何做的博文 xff0c 都很零散或者简略 其实有了ROS xff0c 这东西一个小学生都可以搭 xff0
  • 深入理解如何不费吹灰之力搭建一个无人驾驶车(五)2.5D-汽车自主部分(从无到有自己写一个主流无人驾驶框架如apollo)(CSDN独创)

    五 从无到有自己动手写个主流无人驾驶汽车框架 xff08 如apollo xff09 xff08 CSDN独创 xff09 注1 xff1a 必须先看完前四章再看这一章 xff0c 如果想看得轻松请看 概率机器人 与 机器人学状态估计 完再
  • ORB_SLAM系列总结

    1 最早的特征点法 xff0c 并把定位与跟踪分为两个线程是PTAM Parallel Tracking and Mapping for Small AR Workspaces 可以说是特征点法SLAM的起源之一 论文 xff1a http
  • vmware下ubuntu18.04 安装ROS Melodic+gazebo9+PX4并roslaunch运行+QGroundConrtol控制

    官方推荐ubuntu18 04的对应ROS和gazebo版本为ROS Melodic 和 gazebo9 官方指导 xff1a ROS安装 xff1a http wiki ros org Installation Ubuntu gazebo
  • PX4自定义pkg包roslaunch

    创建pkg 首先在Ros工程目录src下 xff0c 创建新的功能包ref catkin create pkg span class token operator lt span pkg name span class token oper
  • PyTorch中FLOPs计算问题

    最近看了很多关于FLOPs计算的实现方法 xff0c 也自己尝试了一些方法 xff0c 发现最好用的还是PyTorch中的thop库 xff08 代码如下 xff09 xff1a device 61 torch device 34 cuda
  • Docker Prometheus(普罗米修斯)监控系统+grafana可视化

    目录 一 Prometheus 概述1 概述2 监控系统作用及Prometheus的特点3 Prometheus 基本服务与作用4 概念 二 Prometheus exporter cadvisor 的部署1 docker部署prometh

随机推荐

  • 收藏的博客 -- Qt有关的GitHub/Gitee开源项目

    收藏的博客 Qt有关的GitHub Gitee开源项目 置顶 libaineu2004 2017 08 18 14 50 30 5843 已收藏 68 分类专栏 xff1a 精品资源推荐 文章标签 xff1a qt github g
  • 【海康摄像头】海康摄像头SDK下载与使用

    文章目录 一 海康摄像头SDK官网下载二 海康摄像头SDK在WinForm WPF中使用三 常用接口函数 xff0c 封装调用函数 一 海康摄像头SDK官网下载 1 进入海康ws官网 xff0c 下载官网SDK和相关文档 2 根据自己应用程
  • 嵌入式面试知识点总结 -- STM32篇

    一 MCU对比 问题 xff1a 问题一 xff1a STM32F1和F4的区别 xff1f 解答 xff1a 参看 xff1a STM32开发 STM32初识 内核不同 xff1a F1是Cortex M3内核 xff0c F4是Cort
  • Linux递归访问文件目录

    Linux递归访问文件目录 include lt iostream gt include lt cstring gt include lt cstdlib gt include lt sys types h gt include lt di
  • 非阻塞connect实现代码

    非阻塞connect实现代码 使用非阻塞IO连接服务端 xff0c 可将sleep替换要执行的任务 xff0c 客户主循环利用epoll监听事标准输入和socket上的事件 xff0c 利用管道将标准输入写入socket 有个问题请教大家
  • make:file not recognized: file format not recognized

    学艺不精 xff0c 在Makefile规则中包含了头文件 xff0c 导致make编译时出现标题错误 去掉Makefile中的 h文件即可 特此记录下
  • C++ accumulate 采坑记录

    C 43 43 accumulate 大数下的采坑记录 总结问题 总结 accumulate 的返回值的类型是第三个参数的类型 xff0c 大数的时候需要注意 问题 具体的思路自行查阅 xff0c 题目给定的数据范围是10 18 xff0c
  • FreerRTOS中的链表概述

    FreerRTOS中的链表概述 一 链表简介二 FreeRTOS中定义过的链表三 任务块中的链表项 一 链表简介 1 FreeRTOS中的链表是结构体模拟的双向链表 xff0c 其链表的内容为 xff1a xff08 1 xff09 lis
  • 【 MDK keil5 生成 .hex文件 .bin文件 stm32】

    MDK keil5 生成 hex文件 bin文件 stm32 1 生成hex文件2 生成bin文件2 1第一种方法2 2高级方式 1 生成hex文件 hex文件的生成通常是默认不选择生成的 xff0c MDK这个IDE对于hex生成还是很友
  • Ubuntu 18.04 拨号上网 PPPoE

    Ubuntu 18 04 拨号上网 PPPoE 解决办法 校园网是深澜系统 xff0c 使用拨号上网进行认证 xff0c 之前在Ubuntu 16 04下拨号比较方便 xff0c 但是到了Ubuntu 18 04下和Ubuntu 16 04
  • IROS2019多传感器融合SLAM方向

    Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping Abstract Simultaneous Localization and Mapping SLAM i
  • C++字符数组中的‘\0’问题

    string 对象没有 0 char text 字符串数组若没有 39 0 39 xff0c 只能当做数组处理 xff0c 若有 39 0 39 xff0c 可以看做字符串 xff0c 可以cou lt lt text xff0c 否则不可
  • IROS2020:全局位置量测与基于优化的VIO紧耦合融合

  • Ubuntu 测试两台电脑之间的网速

    Ubuntu 测试两台电脑之间的网速 前言安装使用服务器端客服端 后续 前言 在Linux下面可以使用命令ping测试两台电脑之间的延迟 类似于下面这样 span class token function ping span 192 168
  • PX4使用FPV DShot电调

    Pixhawk 4使用T MOTOR FPV DShot电调接线教程 前言DShot的优点 接线参数设置开启FMU输出启用 DShot 测试后续 由于种种原因 xff0c 博客停更了好久 xff0c 从现在开始准备把停更许久的博客更新起来
  • 解决rosdep update一直timeout的问题

    解决rosdep update一直timeout 错误内容解决办法 最近在配cartographer的时候需要 rosdep update xff0c 但是一直显示timeout xff0c 简直都要崩溃了 xff0c 一行命令跑一天 xf
  • qgc通过mavros连接到飞控

    qgc通过mavros连接到Pixhawk飞控 mavros设置QGC设置 mavros确实是一个不错的工具 xff0c 在机载电脑上进行无人机开发的时候 xff0c 有时候想调飞控的参数看一下飞控的一些信息 xff0c 但是直接接飞控又不
  • pixhawk使用WiFi模块

    pixhawk使用WiFi 前期准备刷固件安装刷固件软件进入刷固件模式下载固件刷固件 使用接线飞控参数更改使用方法 在使用pixhawk的时候有时候在无人机上不方便搭载处理器 xff0c 这个时候进行外部控制 或者QGC有线方式连接无人机不
  • cartographer+pixhawk飞控+px4固件+ros kinetic+HOKUYO utm-30lx实现无GPS下的起飞

    cartographer 43 pixhawk飞控 43 px4固件 43 ros kinetic实现无GPS下的起飞 cartographer配置launch文件建立更改配置文件 飞控设置测试 前面的博客讲了cartographer和ma
  • 结合无人机室内导航谈谈3DVFH+算法

    无人机室内导航路径规划 障碍规避 在浏览PX4开发手册过程中看见里面提到的一种障碍规避算法 3DVFH 43 该算法在之前做本科毕设时候有所接触 xff0c 不过当时是进行了2D的Matlab仿真 xff0c down个代码改改障碍物形状