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

本框架是基于激光雷达的无人机群自主避障代码:
  • 其主体框架利用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无人机避障实测](https://blog.csdn.net/dueen1123/article/details/126747231?spm=1001.2014.3001.5501)中vins部分 ```bash 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位置和速度 代码下载链接: 新建一个catkin_ws_lidar的工作空间 在其中先配置好激光雷达livox的SDK以及ROS版本的SDK,[参考链接在此](https://hitxjf.github.io/2023/02/12/Mid-360%20%E5%BF%AB%E9%80%9F%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97/) 然后将lidar_esti放在同一工作空间一起编译 代码运行如下: ```bash # 启动激光雷达 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集群避障算法 代码链接: 实测代码不同的无人机需要添加不同的`node_0_true.cpp`,以及相对应的`rvo_node_true.launch`和`node_0_true.sh` (1)`rvo_node.h`修改`copy_num_agent`变量,改为本次实测的uav个数 ```cpp int copy_num_agent = 2; // 复制智能体数量 ``` (2)`node_0_true.cpp`,修改如下代码 ```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数量一致,并且是第几架无人机,对应的目标点位置才赋值 ```bash #!/bin/bash rosrun rvo_ros set_goals_client_0 default 1 1 1 0 0 0 sleep 8 rosrun rvo_ros set_goals_client_0 default 4 1 1 0 0 0 sleep 6 ``` 运行如下: ```bash #启动飞机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自定义消息稍有不同,不能直接引用头文件,然后直接用消息名称使用,如下 ```cpp #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,他生成了一个模板函数,所以使用时应该重新定义 总结如下: ```bash include_directories( include ${catkin_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/include/3d_library # 确保这里包含了3d_library目录 /home/tju/catkin_ws_orca/devel/include/rvo_ros ) ``` ```cpp #include "UAVPosVel.h" typedef rvo_ros::UAVPosVel_> UAVPosVel; void rvo_true_velCallback(const UAVPosVel::ConstPtr &sub_msg); ```

相关推荐
伊H2 小时前
C语言main的参数;argc与argv
linux·c语言·算法
triticale2 小时前
【数论】快速幂
java·算法
爱的叹息3 小时前
【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
java·算法·排序算法
CodeJourney.4 小时前
Python数据可视化领域的卓越工具:深入剖析Seaborn、Plotly与Pyecharts
人工智能·算法·信息可视化
Non importa4 小时前
【初阶数据结构】树——二叉树(上)
c语言·数据结构·学习·算法
Tech Synapse6 小时前
基于Surprise和Flask构建个性化电影推荐系统:从算法到全栈实现
python·算法·flask·协同过滤算法
終不似少年遊*6 小时前
国产之光DeepSeek架构理解与应用分析04
人工智能·python·深度学习·算法·大模型·ds
天天扭码6 小时前
一分钟解决 | 高频面试算法题——最大子数组之和
前端·算法·面试
杰杰批6 小时前
力扣热题100——矩阵
算法·leetcode·矩阵
明月看潮生6 小时前
青少年编程与数学 02-016 Python数据结构与算法 28课题、图像处理算法
图像处理·python·算法·青少年编程·编程与数学