基于激光雷达的无人机相互避障
本框架是基于激光雷达的无人机群自主避障代码:
- 其主体框架利用ORCA算法,他是经典的多智能体相互避障算法,此版本只能规避动态障碍物,不能规避环境形成的静态障碍物
- 我们对ORVA算法稍作修改,使其可以分布式部署,并且将仿真代码修改为uav实测代码
- ORCA算法需要知道其他智能体的绝对位置和速度作为算法输入,因此我们需要模块【1】和【2】来补充完成
- 模块【2】是利用将lidar安装在当前uav上,并用其检测和估计其他无人机的相对位置和速度
- 因为不满足ORVA算法需要绝对位置和速度的条件,因此需要利用模块【1】来估计当前uav的位置进行结合
【配置规范】不同的包安装在不同的工作空间中,方便管理,如catkin_ws_realsense,catkin_ws_vins,catkin_ws_lidar,catkin_ws_orca
1. 基于VIO/LIO的uav自身位置估计
[1] LIO
因为无人机安装了Lidar,所以用LIO比较好
待安装。。。
[2] VIO
VIO使用Vins,是基于D435深度相机的,具体安装参考D435i+vins-Fusion+ego-planner+yolo无人机避障实测中vins部分
roslaunch realsense2_camera rs_camera_vins.launch
rosrun vins vins_node ~/catkin_ws_vins/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml
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.py和lidar2orca.py中的DETECT_UAV_NUM变量,需要根据实际uav个数修改
3. ORCA集群避障算法
代码链接:https://gitee.com/dueen1123/orca
实测代码不同的无人机需要添加不同的node_0_true.cpp,以及相对应的rvo_node_true.launch和node_0_true.sh
(1)rvo_node.h修改copy_num_agent变量,改为本次实测的uav个数
int copy_num_agent = 2; // 复制智能体数量
(2)node_0_true.cpp,修改如下代码
void rvo_true_velCallback(const UAVPosVel::ConstPtr &sub_msg){// ...// 用哪架无人机,序号改成几float x = new_velocities[0]->x();float y = new_velocities[0]->y();float z = new_velocities[0]->z();// ...
}
(3)rvo_node_true.launch更改为当前的 node_0_true节点
(4)node_0_true.sh后面的目标点数量,修改与总uav数量一致,并且是第几架无人机,对应的目标点位置才赋值
#!/bin/bash
rosrun rvo_ros set_goals_client_0 default 1 1 1 0 0 0
sleep 8rosrun rvo_ros set_goals_client_0 default 4 1 1 0 0 0
sleep 6
运行如下:
#启动飞机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);
相关文章:
基于激光雷达的无人机相互避障
本框架是基于激光雷达的无人机群自主避障代码: 其主体框架利用ORCA算法,他是经典的多智能体相互避障算法,此版本只能规避动态障碍物,不能规避环境形成的静态障碍物我们对ORVA算法稍作修改,使其可以分布式部署ÿ…...
Zookeeper基本原理
1.什么是Zookeeper? Zookeeper是一个开源的分布式协调服务器框架,由Apache软件基金会开发,专为分布式系统设计。它主要用于在分布式环境中管理和协调多个节点之间的配置信息、状态数据和元数据。 Zookeeper采用了观察者模式的设计理念,其核心…...
【生日视频制作】西游记孙悟空师徒提笔毛笔书法横幅AE模板修改文字软件生成器教程特效素材【AE模板】
生日视频制作教程西游记孙悟空师徒提笔毛笔书法横幅AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】西游记孙悟空师徒提笔毛笔书法横幅AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE…...
春日美食汇:基于SpringBoot的订餐平台
2 系统关键技术 2.1JSP技术 JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件()。htm,。Html) [1]。 JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行,正因为JSP参照了许多编程语言的特性…...
微信小程序中如何监听元素进入目标元素
Page({onLoad: function(){// 如果目标节点(用选择器 .target-class 指定)进入显示区域以下 100px 时,就会触发回调函数。wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe(.target-class, (res) > {res.inter…...
华为 HCIP-Datacom H12-821 题库 (6)
有需要题库的可以看主页置顶 V群仅进行学习交流 1.转发表中 FLAG 字段中B 的含义是? A、可用路由 B、静态路由 C、黑洞路由 D、网关路由 答案:C 解析: 可用路由用U 表示,静态路由用 S 表示,黑洞路由用 B 表示&#x…...
常见的pytest二次开发功能
pytest框架的二次开发主要是为了满足特定的测试需求或扩展其功能。以下是一些常见的pytest二次开发的功能及其实例,以及如何进行开发的大致步骤: 常见的pytest二次开发功能 定制化测试报告: 功能描述:pytest默认生成的测试报告可…...
Linux下安装MySQL8.0
一、安装 1.下载安装包 先创建一个mysql目录,在将压缩包下载到此 # 下载tar包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz等待下载成功 2.解压mysql8.0安装包 tar xvJf mysql-8.0.20-linux-glibc2.12-x86…...
【Python】CSV文件的简单使用
1.读取CSV文件 import csvpath "123.csv"with open(path) as f: # 打开csv文件csvReader csv.reader(f) # 读文件建立Reader对象listReader list(csvReader) # 将数据转换成列表print(listReader)2.写入CSV文件 import csvpath "123.csv"with ope…...
jobs命令
jobs命令是Unix/Linux shell中的一个内置命令,用于显示当前shell中正在运行的作业(job)的状态。作业是指在后台执行的命令或命令序列。 jobs命令的基本用法 显示所有作业的状态 当你在终端中启动一个命令并在其后加上&符号时ÿ…...
《深入浅出WPF》读书笔记.11Template机制(上)
《深入浅出WPF》读书笔记.11Template机制(上) 背景 模板机制用于实现控件数据算法的内容与外观的解耦。 《深入浅出WPF》读书笔记.11Template机制(上) 模板机制 模板分类 数据外衣DataTemplate 常用场景 事件驱动和数据驱动的区别 示例代码 使用DataTemplate实现数据样式…...
C语言程序设计(算法的概念及其表示)
一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤…...
【最新华为OD机试E卷-支持在线评测】猜数字(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…...
上海亚商投顾:深成指、创业板指均涨超1%,华为产业链反复活跃
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 大小指数昨日走势分化,沪指全天震荡调整,2800点失而复得,深成指、创业板指…...
【H2O2|全栈】Markdown | Md 笔记到底如何使用?【前端 · HTML前置知识】
Markdown的一些杂谈 目录 Markdown的一些杂谈 前言 准备工作 认识.Md文件 为什么使用Md? 怎么使用Md? 编辑 怎么看别人给我的Md文件? Md文件命令 切换模式 粗体、倾斜、下划线、删除线和荧光标记 分级标题 水平线 引用 无序…...
C++17: 用折叠表达式实现一个IsAllTrue函数
前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true。 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C新特性知识,适合对C进阶知识有一定…...
【IPV6从入门到起飞】2-2 获取你的IPV6(Teredo隧道)
【IPV6从入门到起飞】2-2 获取你的IPV6(Teredo隧道) 1 打工人的忧伤2 Teredo介绍2.1 背景2.2 工作原理 3 Linux 服务器获取IPV63.1 安装3.2 设置开机自启动和启动3.3 开放防火墙 UDP 35443.4 查看IPV6以及ping包测试3.5 修改Teredo服务器3.6 重启服务3.7…...
Linux 安全弹出外接磁盘
命令行操作 首先,需要卸载硬盘上的所有分区,可以使用umount来卸载分区 清空系统缓存,将所有的数据写入磁盘 sync 列出已挂载的文件系统 使用lsblk或者df命令来查找要卸载的分区 lsblk or df -h确保没有文件正在使用 使用lsof 命令来…...
面试准备-6
NIO底层是用Selector、Channel和ByteBuffer来实现的。主线程在循环使用select方法进行阻塞等待,当有acceptable(可连接)、readable(可读)或者writable(可写)事件发生的时候,循环就会…...
context canceled 到底谁在作祟?
一、背景 在工作中,因报警治理标准提高,在报警治理的过程中,有一类context cancel报警渐渐凸显出来。 目前context cancel日志报警大致可以分为两类。 context deadline exceeded 耗时长有明确报错原因 context canceled 耗时短无明确报错…...
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句 你有没有过这样的经历?面对一个数据库,明明知道数据就在里面,却因为不懂SQL而束手无策。想查“上个月哪个产品卖得最好”,或者“找出最近三个月复购率最高的客户…...
GitHub界面中文化:如何让全球最大的代码托管平台说中文?
GitHub界面中文化:如何让全球最大的代码托管平台说中文? 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 当我们…...
RePKG技术探索:Wallpaper Engine资源解析工具深度剖析
RePKG技术探索:Wallpaper Engine资源解析工具深度剖析 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 一、认知困境:数字资源的格式壁垒 创意工作者的格式枷…...
`claude code --print` 核心含义与用法指南
claude code --print 核心含义与用法指南 --print(简写为-p)是Claude Code CLI的非交互模式参数,用于执行单个查询后直接输出结果并退出,不进入交互式会话。这是自动化脚本、管道操作和CI/CD集成的核心工具。 一、核心定义与作用 特性 说明 全称/简写 --print / -p 核心功…...
高通平台实战:手把手教你解析和修改CDT中的board-id(附常见报错排查)
高通平台深度实战:CDT中board-id的解析与定制化修改指南 引言:为什么需要关注board-id? 在Android底层开发中,board-id就像设备的"身份证号",它决定了系统如何识别硬件配置并加载对应的设备树和驱动。对于从…...
OpenClaw定时任务:千问3.5-9B实现每日自动化流程
OpenClaw定时任务:千问3.5-9B实现每日自动化流程 1. 为什么需要定时任务自动化 去年冬天的一个深夜,我正熬夜准备第二天的重要汇报材料,突然发现需要从三个不同平台导出数据并整理成统一格式。手动操作到凌晨两点时,我意识到这种…...
ECDH算法避坑指南:OpenSSL和Node.js中的椭圆曲线参数选择
ECDH算法实战避坑指南:跨平台椭圆曲线参数选择与性能优化 在构建现代加密通信系统时,ECDH(椭圆曲线迪菲-赫尔曼密钥交换)算法因其高效性和安全性已成为TLS协议栈的核心组件。然而,当开发者需要在OpenSSL和Node.js等不同…...
大模型预训练中的损失函数:从交叉熵到代码实现的全方位解析
大模型预训练中的损失函数:从交叉熵到代码实现的全方位解析 在深度学习领域,大语言模型的崛起彻底改变了自然语言处理的格局。这些庞然大物的核心驱动力之一,正是预训练阶段精心设计的损失函数。对于decoder-only架构的模型而言,交…...
Swashbuckle.AspNetCore 生产环境部署指南:安全配置API文档的终极方案
Swashbuckle.AspNetCore 生产环境部署指南:安全配置API文档的终极方案 【免费下载链接】Swashbuckle.AspNetCore Swagger tools for documenting APIs built on ASP.NET Core 项目地址: https://gitcode.com/gh_mirrors/sw/Swashbuckle.AspNetCore Swashbuck…...
DYOR 嘉创地产 02421.HK
文章目录1.公司概况1.1 简介1.2 股权结构1.3 核心资质与定位2.业务布局3.财务与市场表现:业绩承压,规模迷你3.1 业绩大幅下滑3.2 市场表现落后3.3 规模在行业中垫底4.核心优势5.潜在风险与隐忧6.小结参考文献1.公司概况 1.1 简介 嘉创地产是一家脱胎于…...
