无人机避障——4D 毫米波雷达 SLAM篇(一)

news2025/1/16 20:53:45

做无人机避障相关工作,3D毫米波避障测试顺利后,开始做4D毫米波雷达无人机避障遇到4D雷达点云需要进行处理的问题,查阅文献,发现以下这篇文章中的建图方法应该为后续思考的方向,特此将这个开源项目进行复现和学习:

A 4D Imaging Radar SLAM System for Large-scale Environments based on Pose Graph Optimization

代码地址:

GitHub - zhuge2333/4DRadarSLAM

Ubuntu版本:

1、安装准备阶段的库文件

// Eigen3安装:
sudo apt update
sudo apt install libeigen3-dev
// OpenMP安装:
sudo apt install build-essential
// PCL安装:
sudo apt install libpcl-dev
// g2o安装
// 安装依赖项
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3

g2o库文件下载:

GitHub - RainerKuemmerle/g2o: g2o: A General Framework for Graph Optimization

Ubuntu20.04LTS上运行4Dradar_slam_20.04 4dradar-CSDN博客

4DRadarSLAM 方案部署_4d radarslam-CSDN博客

// 在g2o-master文件目录下,把g2o-master文件夹名字改成g2o
mkdir build
cd build
cmake ..
make -j4        #-j8会快一点
sudo make install

下载下来以后是将g2o-master文件名修改为g2o文件名,而不是在g2o-master下面的文件夹中进行操作,会报错,这个可以看第二篇文章比较详细,第一篇可能会误导。

报错:

/home/nvidia/g2o/g2o/stuff/filesys_tools.cpp:29:10: fatal error: filesystem: 没有那个文件或目录
#include <filesystem>
^~~~~~~~~~~~
compilation terminated.
g2o/stuff/CMakeFiles/stuff.dir/build.make:117: recipe for target 'g2o/stuff/CMakeFiles/stuff.dir/filesys_tools.cpp.o' failed
make[2]: *** [g2o/stuff/CMakeFiles/stuff.dir/filesys_tools.cpp.o] Error 1
CMakeFiles/Makefile2:1123: recipe for target 'g2o/stuff/CMakeFiles/stuff.dir/all' failed
make[1]: *** [g2o/stuff/CMakeFiles/stuff.dir/all] Error 2
Makefile:155: recipe for target 'all' failed
make: *** [all] Error 2

原因:

当前安装的GCC版本是7.5.0,这是Ubuntu 18.04 LTS版本自带的默认GCC版本。虽然GCC 7支持大部分C++17特性,但不是全部。为了完全支持C++17,建议至少使用GCC 8或更高版本。

尝试了很多办法,发现更新g++比较好:

# 查看当前版本
g++ --version

版本是7.5,不太行

安装新版本

// Toolchain测试PPA提供了最新版本的GCC编译器
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
// 安装GCC 9或更高版本,这里以GCC 9为例:
sudo apt install gcc-9 g++-9
// 如果你已经尝试了更新GCC到新版本,但系统仍然显示旧版本(如7.5.0)
g++ --version
// 确认新版本是否已安装
g++-9 --version

发现已经安装了

如果新版本的GCC已经安装,但默认的g++命令仍然指向旧版本,你可以使用update-alternatives来更新默认设置:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 60
sudo update-alternatives --config g++

设置成功

重新编译:编译通过

安装

sudo make install

安装完显示:

2、ROS软件包的安装

Ubuntu20.04 用

sudo apt-get install ros-noetic-geodesy ros-noetic-pcl-ros ros-noetic-nmea-msgs ros-noetic-libg2o

Ubuntu18.04用

sudo apt-get install ros-melodic-geodesy ros-melodic-pcl-ros ros-melodic-nmea-msgs ros-melodic-libg2o

把fast_apdgicp、barometer_bmp388、ndt_omp源码下载下来,等下catkin_make需要用到。
fast_apdgicp下载: https://github.com/zhuge2333/fast_apdgicp
barometer_bmp388下载: https://github.com/zhuge2333/barometer_bmp388
ndt_omp下载:https://github.com/koide3/ndt_omp

3、对4D毫米波雷达文件进行编译

创建工作空间:

将刚刚的压缩包解压放入到src文件夹中

再把核心的SLAM代码压缩包也解压到src文件中:

GitHub - zhuge2333/4DRadarSLAM

最后的情况就是:

编译报错01:

c++: error: unrecognized command line option ‘-msse’

c++: error: unrecognized command line option ‘-msse’
c++: error: unrecognized command line option ‘-msse2’
c++: error: unrecognized command line option ‘-msse3’
c++: error: unrecognized command line option ‘-msse4’
c++: error: unrecognized command line option ‘-msse4.1’
c++: error: unrecognized command line option ‘-msse4.2’
c++: error: unrecognized command line option ‘-msse’
c++: error: unrecognized command line option ‘-msse2’
c++: error: unrecognized command line option ‘-msse3’
c++: error: unrecognized command line option ‘-msse4’
c++: error: unrecognized command line option ‘-msse4.1’
c++: error: unrecognized command line option ‘-msse4.2’
ndt_omp-master/CMakeFiles/ndt_omp.dir/build.make:75: recipe for target 'ndt_omp-master/CMakeFiles/ndt_omp.dir/src/pclomp/voxel_grid_covariance_omp.cpp.o' failed
make[2]: *** [ndt_omp-master/CMakeFiles/ndt_omp.dir/src/pclomp/voxel_grid_covariance_omp.cpp.o] Error 1
CMakeFiles/Makefile2:3034: recipe for target 'ndt_omp-master/CMakeFiles/ndt_omp.dir/all' failed
make[1]: *** [ndt_omp-master/CMakeFiles/ndt_omp.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....

原因:

x86系统架构下的linux系统与arm64位架构的linux系统区别。

[注意] :上面的错误,理论上只会在arm64系统编译的情况下才会出现。

解决方法:

将4DRadarSLAM与ndt_omp-master中的CMakeLists.txt文件中的有关于msse相关的注释掉

4DRadarSLAM:

ndt_omp-master:

编译报错02:

4DRadarSLAM/apps/scan_matching_odometry_nodelet.cpp:21:10: fatal error: tf_conversions/tf_eigen.h: 没有那个文件或目录

/home/nvidia/4Dradar_slam_test/src/4DRadarSLAM/apps/scan_matching_odometry_nodelet.cpp:21:10: fatal error: tf_conversions/tf_eigen.h: 没有那个文件或目录
   21 | #include <tf_conversions/tf_eigen.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
4DRadarSLAM/CMakeFiles/scan_matching_odometry_nodelet.dir/build.make:75: recipe for target '4DRadarSLAM/CMakeFiles/scan_matching_odometry_nodelet.dir/apps/scan_matching_odometry_nodelet.cpp.o' failed
make[2]: *** [4DRadarSLAM/CMakeFiles/scan_matching_odometry_nodelet.dir/apps/scan_matching_odometry_nodelet.cpp.o] Error 1
make[2]: *** 正在等待未完成的任务....
/home/nvidia/4Dradar_slam_test/src/4DRadarSLAM/apps/radar_graph_slam_nodelet.cpp:28:10: fatal error: tf_conversions/tf_eigen.h: 没有那个文件或目录
   28 | #include <tf_conversions/tf_eigen.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
4DRadarSLAM/CMakeFiles/radar_graph_slam_nodelet.dir/build.make:75: recipe for target '4DRadarSLAM/CMakeFiles/radar_graph_slam_nodelet.dir/apps/radar_graph_slam_nodelet.cpp.o' failed
make[2]: *** [4DRadarSLAM/CMakeFiles/radar_graph_slam_nodelet.dir/apps/radar_graph_slam_nodelet.cpp.o] Error 1
make[2]: *** 正在等待未完成的任务....

原因:

在 ROS Melodic 中,tf_conversions 包已经被集成到 geometry 包中,因此你不需要单独安装 tf_conversions。如果你在编译时遇到了找不到 tf_conversions/tf_eigen.h 文件的错误,你应该确保已经安装了 geometry 包。

解决方法:

安装完geometry 包再编译

sudo apt-get install ros-melodic-geometry

编译通过

数据集下载:

https://drive.google.com/drive/folders/14jVa_dzmckVMDdfELmY32fJlKrZG1Afv

把下载的数据集放入到新建的一个文件夹名为carpark_400下

4、运行

将刚刚的数据集名重新命名对应launch文件;

路径也需要进行修改。使得home/nvidia/carpark_400/下面的路径能够引用到

运行:

nvidia@Xavier-NX:~/4Dradar_slam_test$ source devel/setup.bash 
nvidia@Xavier-NX:~/4Dradar_slam_test$ roslaunch radar_graph_slam radar_graph_slam.launch 

运行报错:

[FATAL] [1727090098.886460184, 1645868413.487595858]: Failed to load nodelet '/scan_matching_odometry_nodelet` of type `radar_graph_slam/ScanMatchingOdometryNodelet` to manager `radarslam_nodelet_manager'
[FATAL] [1727090098.886614074, 1645868413.487595858]: Failed to load nodelet '/radar_preprocessing_nodelet` of type `radar_graph_slam/PreprocessingNodelet` to manager `radarslam_nodelet_manager'
[radarslam_nodelet_manager-2] process has died [pid 21373, exit code 127, cmd /opt/ros/melodic/lib/nodelet/nodelet manager __name:=radarslam_nodelet_manager __log:=/home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/radarslam_nodelet_manager-2.log].
log file: /home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/radarslam_nodelet_manager-2*.log
[radar_preprocessing_nodelet-3] process has died [pid 21375, exit code 255, cmd /opt/ros/melodic/lib/nodelet/nodelet load radar_graph_slam/PreprocessingNodelet radarslam_nodelet_manager __name:=radar_preprocessing_nodelet __log:=/home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/radar_preprocessing_nodelet-3.log].
log file: /home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/radar_preprocessing_nodelet-3*.log
[scan_matching_odometry_nodelet-4] process has died [pid 21376, exit code 255, cmd /opt/ros/melodic/lib/nodelet/nodelet load radar_graph_slam/ScanMatchingOdometryNodelet radarslam_nodelet_manager __name:=scan_matching_odometry_nodelet __log:=/home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/scan_matching_odometry_nodelet-4.log].
log file: /home/nvidia/.ros/log/0edf6d1a-799d-11ef-8a78-48b02d3d6e4a/scan_matching_odometry_nodelet-4*.log

结果:

不显示点云的图像,只有左下角的区域在动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react crash course 2024(2) 创建项目及vscode插件

使用vite创建react项目 npm create vitelatest react-crash-2024 跳到那个项目 cd .\react-crash-2024 打开那个项目 code . 在vite.config.js中设置端口 安装依赖 npm i 运行 npm run dev vs code插件 rafce //在底部导出的react箭头函数组件

计算机毕业设计 基于Python医院预约挂号系统 Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【AI】深度学习的数学--核心公式

1 梯度下降 f ( x Δ x , y Δ y ) ≃ f ( x , y ) ∂ f ( x , y ) ∂ x Δ x ∂ f ( x , y ) ∂ y Δ y f(x\Delta x,y\Delta y) \simeq f(x,y)\frac{\partial f(x,y)}{\partial x}\Delta x\frac{\partial f(x,y)}{\partial y}\Delta y f(xΔx,yΔy)≃f(x,y)∂x∂f(x,y)​…

聚观早报 | 豆包视频生成大模型发布;华为纯血鸿蒙将开启公测

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月25日消息 豆包视频生成大模型发布 华为纯血鸿蒙将开启公测 高德地图将发放百亿补贴 12306上线“车内换座”新…

RK3568笔记六十三:基于LVGL的Linux相机

若该文为原创文章,转载请注明原文出处。 记录移植韦老师的基于LVGL的Linux相机项目,主要是想学习如何在LVGL下显示摄像头数据。 此项目是基于老师的源码框架移植的,地址是lv_100ask_linux_camera: 基于LVGL的Linux相机 (gitee.com) 个人使用的是RK3568,正点原子板子,所以…

CTF-PWN方向自学习笔记

基础知识 栈的结构 熟悉如下寄存器 db 定义的是1Byte的变量 也就是8位 define byte dd 定义的通常是4字节的变量 也就是32位 Define Double Word dw 定义一个16位 也就是2字节的变量 Define Word dq 定义一个8字节 也就是64位的变量 多少位的机器就表示一个字是多少位 x86…

GO网页自动回复机器人源码

源码名称&#xff1a;网页自动回复机器人源码 源码介绍&#xff1a;一款网页自动回复机器人源码&#xff0c;是一款集自动回复、默认消息设置、自定义 API 接口调用于一体的智能网页机器人。它采用高效稳定的 Golang 作为后端开发语言&#xff0c;运行时内存占用极小&#xff…

RNN模型学习

RNN模型 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种用于处理序列数据的神经网络。**RNN具有内部状态&#xff08;或称为记忆&#xff09;&#xff0c;这允许它在处理序列中的每个元素时考虑之前的信息。**这种特性使得RNN非常适合于自然语言处…

【CSS】鼠标 、轮廓线 、 滤镜 、 堆叠层级

cursor 鼠标outline 轮廓线filter 滤镜z-index 堆叠层级 cursor 鼠标 值说明值说明crosshair十字准线s-resize向下改变大小pointer \ hand手形e-resize向右改变大小wait表或沙漏w-resize向左改变大小help问号或气球ne-resize向上右改变大小no-drop无法释放nw-resize向上左改变…

ISA Server配置https踩坑全过程

首先普通的http配置请参考 【ISA Server 2006发布Web网站】 https://www.bilibili.com/video/BV1qc411v75w/?share_sourcecopy_web&vd_sourcef35b2f2d0d34140bcba81b8b6f8c1b69 本文只一笔带过&#xff0c;讲一下https部分。 正解 由于我维护的是windows server 2003的…

付费进群V5版本首发源码

付费进群V5版本首发 最新分站大屏 更新三个模板 仿官方模板等等 最新防注入技术 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89797314 更多资源下载&#xff1a;关注我。

Postgresql怎么查询数据库中所有的表,odoo17数据库最依赖表整理

今天遇到了一个需求,需要梳理odoo中数据库表的分类,所以想要知道怎么查询当前数据库中所有的表,特此记录. 一个简单的SQL语句: select * from pg_tables;得到的结果如下: 显然这个有点杂乱,我们换一个SQL语句: select tablename from pg_tables where schemanamepublic不过…

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 鉴权直播-》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#x…

(四)悟说几个特殊矩阵及矩阵函数

上一期介绍了矩阵的出现源于解线性方程组。但是&#xff0c;矩阵出现之后&#xff0c;就犹如打开了潘多拉的盒子&#xff0c;会产生许多魔法。 1 旋转矩阵 我们知道用矩阵左乘某个向量&#xff0c;相当于对该向量做线性变换。那么是否有一种矩阵&#xff0c;能让向量旋转&…

前端项目代理到本地调试

我们在项目开发中&#xff0c;有时mock数据不能满足我们的需求&#xff0c;可以考虑把线上地址运行在本地代码上进行开发调试&#xff0c;也就是所谓的代理 这里推荐使用的工具是 whistle SwitchyOmega 1. 首先在chrome浏览器中安装插件SwitchyOmega 下载地址 CrxDL - 下载…

Git - 初识版本库

版本库也叫仓库&#xff0c;英文名 repository。 ‍ 创建版本库 之前我们说了版本库的概念&#xff1a; 存储版本的地方&#xff08;存放各个版本之间差异的地方&#xff09;&#xff0c;通常称为版本库。通常版本库是以文件&#xff08;夹&#xff09;的形式存放在磁盘上&a…

【数据结构初阶】排序算法(上)插入排序与选择排序

文章目录 1.排序概念及运用1. 1 概念1. 2 运用1.3 常见排序算法 2. 插入排序2. 1 直接插入排序2. 2 希尔排序2. 2. 1 希尔排序的时间复杂度 3. 选择排序3. 1 直接选择排序3. 2 堆排序3. 3 Top-K问题 1.排序概念及运用 1. 1 概念 排序&#xff1a;所谓排序&#xff0c;就是使一…

小米2025届软件开发工程师(C/C++/Java)(编程题AK)

选择题好像也是25来个 编程题 T1 题目描述 小明喜欢解决各种数学难题。一天&#xff0c;他遇到了一道有趣的题目:他需要帮助他的朋友们完成一个排序任务。小明得到两个长度为 n 的数组a[]和b[]。他可以在两个数组对应位置进行交换&#xff0c;即选定一个位置 i &#xff0c…

PCL 求八叉树的体素中心

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 八叉树构建 2.1.2 获取体素中心 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

注意力机制篇 | YOLOv8改进之在C2f模块引入EffectiveSE注意力模块 | 基于SE注意力

前言:Hello大家好,我是小哥谈。EffectiveSE(Effective Squeeze-Excitation) 是一种改进的通道注意力模块,其目的是在保持模型性能的同时减少计算复杂性和信息丢失。它基于原始的 Squeeze-Excitation (SE) 模块,但通过一些关键的改进来提高效率。🌈 目录 🚀1.基…