解决Fast-Drone-250编译相关错误

官方参考教程:

bash 复制代码
https://github.com/ZJU-FAST-Lab/Fast-Drone-25

解决ceres包没有安装的问题,安装ceres与glog与ddyanmic-reconfigure

bash 复制代码
  Could not find a package configuration file provided by "Ceres" with any of
  the following names:

    CeresConfig.cmake
    ceres-config.cmake

解压3rd_party.zip压缩包

进入glog文件夹打开终端

bash 复制代码
sudo chmod +x autogen.sh
sudo chmod +x configure
./autogen.sh && ./configure && make && sudo make install
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev

如果遇到liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev这些安装不了,那么就执行:

bash 复制代码
# 1. 创建并进入下载目录
mkdir -p ~/drone_deps && cd ~/drone_deps

# 2. 下载所有包(走 IPv6 清华源)
# --- 基础数学库 ---
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/l/lapack/liblapack-dev_3.9.0-1build1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/a/atlas/libatlas3-base_3.10.3-8ubuntu7_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/m/metis/libmetis5_5.1.0.dfsg-5_arm64.deb

# --- SuiteSparse 及其全套依赖 ---
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libsuitesparse-dev_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libcxsparse3_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libamd2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libcamd2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libbtf1_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libccolamd2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libcholmod3_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libgraphblas3_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libklu1_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libldl2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libmongoose2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libumfpack5_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/librbio2_5.7.1+dfsg-2_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/main/s/suitesparse/libspqr2_5.7.1+dfsg-2_arm64.deb

# --- Ceres Solver ---
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/c/ceres-solver/libceres1_1.14.0-4ubuntu1.1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/c/ceres-solver/libceres-dev_1.14.0-4ubuntu1.1_arm64.deb

# --- 辅助库 (Gflags, Glog, Gtest) ---
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/g/gflags/libgflags2.2_2.2.2-1build1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/g/gflags/libgflags-dev_2.2.2-1build1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/g/google-glog/libgoogle-glog0v5_0.4.0-1build1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/g/google-glog/libgoogle-glog-dev_0.4.0-1build1_arm64.deb
wget https://mirrors6.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/g/googletest/libgtest-dev_1.10.0-2_arm64.deb
sudo dpkg -i --force-all *.deb

进入ceres文件夹打开终端

bash 复制代码
mkdir build
cd build
cmake ..
sudo make -j4
sudo make install
sudo apt-get install ros-noetic-ddynamic-reconfigure

如果执行这个报错:sudo apt-get install ros-noetic-ddynamic-reconfigure,那么执行:

bash 复制代码
sudo apt --fix-broken install -y

解决 realsense2 CMake 配置错误:fastcdr/fastrtps 缺失问题

在编译集成 Intel RealSense 相机的 ROS 项目时,遇到了一个极具迷惑性的 CMake 错误,本文记录问题排查过程、根因分析及最终解决方案,避免大家走弯路。

一、问题现象

编译项目时出现如下 CMake 警告和错误:

复制代码
CMake Warning at realflight_modules/realsense-ros/realsense2_camera/CMakeLists.txt:44 (find_package):
  Found package configuration file:
 
    /usr/lib/x86_64-linux-gnu/cmake/realsense2/realsense2Config.cmake
 
  but it set realsense2_FOUND to FALSE so package "realsense2" is considered
  to be NOT FOUND.  Reason given by package:
 
  The following imported targets are referenced, but are missing: fastcdr
  fastrtps
 
CMake Error at realflight_modules/realsense-ros/realsense2_camera/CMakeLists.txt:48 (message):
 
   Intel RealSense SDK 2.0 is missing, please install it from https://github.com/IntelRealSense/librealsense/releases

二、错误排查的坑:被表象误导

看到错误提示中明确提到 fastcdrfastrtps 缺失,第一反应是需要安装这两个依赖库,于是尝试下载源码编译安装,但过程中发现:

  1. 这两个库主要用于 ROS 消息的转发,和 RealSense 相机功能本身无直接关联;
  2. 新版本的 fastcdr/fastrtps 源码编译后不生成 .pc 文件,即使安装完成,项目依然无法索引到,问题根本无法解决;
  3. 这两个库没有官方的 apt 安装方式,源码编译路径越走越偏。

三、问题根因

实际问题并非真的缺失 fastcdr/fastrtps,而是 librealsense2 v2.56.4+ 版本的已知 Bug :其 CMake 配置文件中错误地引入了 fastcdrfastrtps 作为依赖,但这两个依赖并未被正确处理,导致即使安装了完整的 RealSense SDK,CMake 仍判定 realsense2 未找到。

四、解决方案(推荐方案一)

方案一:降级 librealsense2 至稳定版本

v2.50.0 及以上版本存在该 Bug,降级到 v2.48.0 可彻底解决问题,步骤如下:

1. 重新安装 RealSense SDK v2.48.0
bash 复制代码
# 克隆指定版本的源码
cd ~
git clone -b v2.48.0 https://github.com/IntelRealSense/librealsense

没有科学上网环境的话,下载可能会很慢。

后面我尝试用有线网络从之前虚拟机中复制到香橙派中,这个速度很快:

下载完成之后,进入刚刚克隆的目录:

bash 复制代码
cd librealsense
bash 复制代码
# 安装编译依赖
sudo apt-get install -y libudev-dev pkg-config libgtk-3-dev
sudo apt-get install -y libusb-1.0-0-dev pkg-config
sudo apt-get install -y libglfw3-dev
sudo apt-get install -y libssl-dev
bash 复制代码
# 配置 USB 规则(解决相机权限问题)
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger 
bash 复制代码
# 编译安装
mkdir build
cd build
bash 复制代码
cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true
sudo make uninstall  # 卸载旧版本
make clean && make -j8  # 若编译卡住,改用 -j4 或增大内存至 8G
sudo make install

编译会花费大量时间,因为是移动端上编译:

出现报错:make2: *** CMakeFiles/libcurl.dir/build.make:92: libcurl/src/libcurl-stamp/libcurl-download Error 1

部分机型,编译到80%时会卡住:

bash 复制代码
fatal: unable to access 'https://github.com/curl/curl.git/': Failed to connect to github.com port 443: No route to host
Cloning into 'libcurl'...
fatal: unable to access 'https://github.com/curl/curl.git/': Failed to connect to github.com port 443: No route to host
Cloning into 'libcurl'...
fatal: unable to access 'https://github.com/curl/curl.git/': Failed to connect to github.com port 443: No route to host
-- Had to git clone more than once:
          3 times.
CMake Error at /home/tibos/code/librealsense/build/libcurl/tmp/libcurl-gitclone.cmake:31 (message):
  Failed to clone repository: 'https://github.com/curl/curl.git'


make[2]: *** [CMakeFiles/libcurl.dir/build.make:92: libcurl/src/libcurl-stamp/libcurl-download] Error 1
make[1]: *** [CMakeFiles/Makefile2:1090: CMakeFiles/libcurl.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

为解决这个librealsense 中的 curl 功能依赖,改功能仅用于「固件自动下载」「远程设备管理」等非核心功能,禁用后不影响相机的基础使用(如深度流、彩色流采集),完全适配嵌入式场景的核心需求。

方法一(推荐):

回到build文件夹:

bash 复制代码
cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF -DBUILD_FW_UPDATER=OFF -DDOWNLOAD_FW_FILES=OFF -DENABLE_CURL=OFF -DUSE_SYSTEM_LIBS=ON -DENABLE_OPENGL=OFF -DCMAKE_CXX_FLAGS="-march=armv8-a"    

或者

bash 复制代码
cmake .. -DCHECK_FOR_UPDATES=false

然后

bash 复制代码
make -j8
sudo make install

原理是禁用掉curl相关的编译依赖。

方法二:

此时我们需要下载另外一个东西:

直接去 https://github.com/curl/curl 下载curl.zip。

注释掉 ~/librealsense/CMake 文件下的 external_libcurl.cmake 的 GIT_REPOSITORY "git://github.com/curl/curl.git" 。即在 GIT_REPOSITORY "git://github.com/curl/curl.git"前加#。

bash 复制代码
cd CMake/
vim external_libcurl.cmake

并将提前下载后的 curl.zip 解压后 改名为 libcurl ,放入到 ~/librealsense/build/third-party。

由此可跳过git clone libcurl 失败的问题。

感觉直接下载zip比git clone快。

2. 测试 SDK 是否安装成功

将屏幕查到香橙派上,此时可以运行命令打开realsense-viewer

bash 复制代码
realsense-viewer

若能正常打开 RealSense 可视化工具,说明 SDK 安装无误。

或者没有屏幕的话,通过 ldconfig 查看已加载的库版本

bash 复制代码
ldconfig -p | grep realsense2
3. 修改 ROS 项目中 RealSense 的版本配置
bash 复制代码
# 清理旧编译文件
cd ~/Fast-Drone-250
catkin_make clean
catkin_make

此时会报错提示 SDK 版本不匹配,并指向对应的 CMakeLists.txt 文件路径:

接下来修改版本:

bash 复制代码
sudo vim Fast-Drone-250/src/realflight_modules/realsense-ros/realsense2_camera/CMakeLists.txt

将文件中对应的 2.50.0 改为 2.48.0

保存后重新编译:

bash 复制代码
cd ~/Fast-Drone-250
catkin_make clean
catkin_make

方案二(不推荐):源码编译 fastcdr/fastrtps

不建议采用此方案,原因:

  • 新版本库无 .pc 文件,编译后项目无法索引;
  • 需手动补丁配置,步骤繁琐且易引入新问题;
  • 本质是解决表象而非根因,后续升级 SDK 可能复现问题。

方案三:删除realsense-viewer的包

如果不需要用realsense的相机,在src文件里面有两个包,一个是VIN-Fusion,另一个是realsense-ros,这两个都是要用SDK驱动的。不用相机的友友们可以把这两个包给删掉后再编译。

五、参考资料


总结

  1. fastcdr/fastrtps 缺失是 librealsense2 v2.50.0+ 的 Bug 表象,而非真实依赖缺失;
  2. 最优解决方案是降级 librealsense2 至 v2.48.0,并同步修改 ROS 项目中对应的版本配置;
  3. 避免单独编译 fastcdr/fastrtps,该路径无法解决核心问题且徒增复杂度。
相关推荐
liulilittle2 小时前
过冲:拥塞控制的呼吸与盲行
linux·网络·c++·tcp/ip·计算机网络·tcp·通信
无足鸟ICT2 小时前
【RHCA+】三种工作模式
linux
Dlrb12112 小时前
Linux系统编程-会话、守护进程与系统日志
linux·守护进程·会话·进程组·系统日志
赵民勇2 小时前
Linux strings命令详解
linux·运维
GongzZz2 小时前
Linux 内存分配差异:用户空间 vs 内核空间
linux
敲代码的瓦龙3 小时前
操作系统?Android与Linux!!!
android·linux·运维
YOLO数据集集合3 小时前
智慧林业无人机巡检 松材线虫病害树木实例分割数据集 | 森林枯木识别 深度学习视觉
人工智能·深度学习·目标检测·计算机视觉·无人机
xiaoye-duck3 小时前
《Linux系统编程》Linux 进程信号深度解析(上):信号的产生方式、本质和闹钟
linux
Dxy12393102163 小时前
BAT 窗口不输出日志:三种静默方案,从半隐藏到完全消失
linux·运维·服务器