当前位置: 首页 > news >正文

基于激光雷达的无人机相互避障

本框架是基于激光雷达的无人机群自主避障代码:
  • 其主体框架利用ORCA算法,他是经典的多智能体相互避障算法,此版本只能规避动态障碍物,不能规避环境形成的静态障碍物
  • 我们对ORVA算法稍作修改,使其可以分布式部署,并且将仿真代码修改为uav实测代码
  • ORCA算法需要知道其他智能体的绝对位置和速度作为算法输入,因此我们需要模块【1】和【2】来补充完成
  • 模块【2】是利用将lidar安装在当前uav上,并用其检测和估计其他无人机的相对位置和速度
  • 因为不满足ORVA算法需要绝对位置和速度的条件,因此需要利用模块【1】来估计当前uav的位置进行结合

1. 基于VIO/LIO的uav自身位置估计

因为无人机安装了Lidar,所以用LIO比较好
还没安装
VIO使用Vins,是基于D435深度相机的,具体安装参考D435i+vins-Fusion+ego-planner+yolo无人机避障实测中vins部分

2. 利用Lidar检测并估计其他uavs位置和速度

代码下载链接:https://gitee.com/dueen1123/lidar_esti

新建一个catkin_ws_lidar的工作空间
在其中先配置好激光雷达livox的SDK以及ROS版本的SDK,参考链接在此
然后将lidar_esti放在同一工作空间一起编译

代码运行如下:

# 启动激光雷达
roslaunch livox_ros_driver2 rviz_MID360.launch
cd ~/catkin_ws_lidar/src/lidar_esti/scripts
# 运行高反无人机检测
python3 multi_highRreflect_detect.py
# lidar到orca转换脚本
python lidar2orca.py

其中multi_highRreflect_detect.pylidar2orca.py中的DETECT_UAV_NUM变量,需要根据实际uav个数修改

3. ORCA集群避障算法

代码链接:https://gitee.com/dueen1123/orca

实测代码不同的无人机需要添加不同的node_0_true.sh,以及相对应的rvo_node_true.launchnode_0_true.sh

运行如下:

#启动飞机px4飞控
#启动vins绝对定位
#启动lidar相对定位
cd ~catkin_ws_orca/src/rvo_ros/scripts
# 无人机通信
python multirotor_communication.py iris 0
# 无人机悬停
python hover.py iris 1 vel 
# 启动壁障算法
roslaunch rvo_ros rvo_node_true.launch
# 设置目标点
bash node_0_true.sh

============================ 以下可以忽视 ==========================
ORCA是主要的避障算法
ORCA需要一个自定义话题的输入,也就是一个包含速度和位置的消息
但c++和python自定义消息稍有不同,不能直接引用头文件,然后直接用消息名称使用,如下

#include "UAVPosVel.h"
void rvo_true_velCallback(const UAVPosVel::ConstPtr &sub_msg);

首先,#include可能难以直接定位到UAVPosVel.h,需要在cmakelist中的include_directories添加其生成路径,即xxx/devel/include/package_name
其次,UAVPosVel.h中的类不叫UAVPosVel,他生成了一个模板函数,所以使用时应该重新定义
总结如下:

include_directories(include${catkin_INCLUDE_DIRS}${PROJECT_SOURCE_DIR}/include/3d_library  # 确保这里包含了3d_library目录/home/tju/catkin_ws_orca/devel/include/rvo_ros
)
#include "UAVPosVel.h"
typedef rvo_ros::UAVPosVel_<std::allocator<void>> UAVPosVel;
void rvo_true_velCallback(const UAVPosVel::ConstPtr &sub_msg);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux---FTP文件服务器搭建及实战
  • Unity URP支持多光源阴影
  • mpc_local_planner的编译问题
  • 搭建和使用OnFinality?
  • ML16_转移矩阵、平稳分布和详细平衡条件
  • uniapp插槽用法
  • 【出行计划 / 2】
  • 在SpringMVC中用fmt标签实现国际化/多语言
  • Express与SQLite集成教程:轻松实现数据库操作
  • 每周12600元奖金池,邀你与昇腾算力共舞,openMind开发者盛宴启幕!
  • 专利申请全攻略:一步一步详解申请流程
  • “Flash闪存”介绍 及 “SD NAND Flash”产品的测试含例程
  • 手撕Python之散列类型
  • n*n矩阵,输出矩阵中任意两点之间所有路径
  • 代码随想录第六天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • AWS实战 - 利用IAM对S3做访问控制
  • httpie使用详解
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java 内存分配及垃圾回收机制初探
  • jQuery(一)
  • JS+CSS实现数字滚动
  • laravel5.5 视图共享数据
  • Python_网络编程
  • Redis在Web项目中的应用与实践
  • Shadow DOM 内部构造及如何构建独立组件
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vultr 教程目录
  • 安装python包到指定虚拟环境
  • 从0实现一个tiny react(三)生命周期
  • 电商搜索引擎的架构设计和性能优化
  • 订阅Forge Viewer所有的事件
  • 工程优化暨babel升级小记
  • 关于springcloud Gateway中的限流
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 两列自适应布局方案整理
  • 收藏好这篇,别再只说“数据劫持”了
  • 我的业余项目总结
  • 在Unity中实现一个简单的消息管理器
  • 怎么把视频里的音乐提取出来
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ‌JavaScript 数据类型转换
  • !!java web学习笔记(一到五)
  • #NOIP 2014# day.1 T2 联合权值
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)大道至简,职场上做人做事做管理