

前言#
感知模块的配置,往往是无人机开发中最考验人心性的环节。它不像飞控算法那样有确定的数学推导,也不像机械结构那样所见即所得,它更像是一场与软硬件兼容性、通信协议以及物理连接的漫长博弈。通俗的讲这个过程其实并不涉及什么很深奥的原理和推导,更多的其实就是有人手把手的带你走过一遍就可以,然后你就什么都懂了。
在对自主无人机感知模块的搭建过程中,你可能会在“线没插好”和“驱动没装对”之间反复横跳。三小时前,你可能还对着散落在桌面的航空插头、稳压模块和杂乱的线束感到迷茫;三小时后,当 RViz 里终于跳动起第一帧清晰的点云时,那种心跳与帧率共振的喜悦又会让你觉得一切都值得。
这篇文章并不是一份枯燥的参数说明书,而是一份**“心法”与“招式”并重**的实战复盘。我将从最基础的物理连接讲起,贯穿 NUC 环境配置、ROS 驱动安装,直到 Mid-360 跑通 FAST-LIO 建图与 Octomap 栅格化。希望这份记录能成为你我未来的备忘录:在面对纷繁复杂的报错时,不要慌张,按图索骥。
Part 1:硬件组装#
我们先来学习一下各个传感器与主要的算力设备之间是怎样实现通信连接的,让我们先明白每个部分的位置和数据流过程。
NUC 与飞控模块连接#
用飞控连接线(双左弯 0.15m)USB一端接 NUC ,另一端接飞控 Type-C 接口。这样就能实现飞控和机载电脑的通信。接线的话就先不放图了,选对线插上去就行。
双目深度相机(Realsense D435i)与 NUC 连接#
直接使用 USB 转 Type-C 线,把深度相机连到 NUC 上就行,但注意做 VINS 类型的算法的话最好选一根支持 USB 3.0 的线,因为其他协议类型的线在运行 VINS 时可能会出现数据量传输不够的情况,导致定位丢失。

Mid-360 雷达供电与机载电脑连接#
雷达接口时一个12P的航空接头,其中8路为信号线,其中4路为网口线接到机载电脑NUC上,另外预留的4个功能线可接GPS等其他设备(也可不接任何东西),还有2路为电源线,可以根据所选电池电压来选择直接接到电池上还是接到稳压模块上。当然,如果比较有条件的情况下,还是推荐把雷达的航空接头给改一下,这样对机器人的轻量化和供电的方便性上会很有优势,相关的教程在B站上有很多,你可以搜索一下。

Part 2:机载电脑(NUC)配置#
Ubuntu 20.04 系统安装#
拿到一个新的空系统的 NUC,我们首先要解决的就是装系统的问题,这对小白来说听起来好像很复杂,但实际上按照操作来还是很有逻辑的,只要不乱动一些东西步奏还是比较清晰的。没啥好怕的,跟着教程来试试吧。
- 下载 Ubuntu 20.04 镜像
可以从阿里云镜像站 ↗下载 ubuntu-20.04.6-desktop-amd64.iso的.iso镜像文件。

- 烧录镜像到 U 盘
先准备一个空 U 盘,容量尽量在8G以上,在电脑中右键格式化 U 盘(卷标写不写都行),目的其实就是清空 U 盘,如果是一个全新的 U 盘也可以不格式化。

下载 UltraISO ↗软件,用它来将下载好的镜像烧写到U盘中(一定要选中你插入的U盘):

- 安装 Ubuntu
NUC 插上电源、U 盘、鼠标键盘,按电源键开机。

看到安装界面后选择 Install Ubuntu。

在安装过程中,语言建议选择中文,初期为了加快安装速度可以暂时不联网,选择正常安装即可。对于新设备来说,最关键的一步是创建分区,如果你之前没有经验,可以参考 B 站上相关的 Ubuntu 安装教程或者我下面这张图中展示的分区建议来操作。之后按提示选择时区、设置用户名和密码,这里强烈建议勾选自动登录,这样可以省去每次开机输密码的繁琐,对后续跑自动启动脚本也更友好。全部设置完成后等待安装结束,重启进入桌面,你就拥有了一台崭新的 Ubuntu 机器了。

WiFi的连接问题#
因为 Ubuntu 20.04已经出来挺长时间了,并且可能也马上就不在维护了,所以他对Intel AX211的网卡可能会出现不识别的问题,所以刚装好系统后会出现WiFi无法连接的问题。但是不要慌,总是会有办法的,下面我们再来解决这个问题吧。
- 用另一台能上网的电脑从ASUS NUC ↗下载 NUC13 最新的 BIOS 0033,解压缩放在 U 盘后取下 U 盘,然后将 U 盘插到 NUC 上。

-
NUC 开机按 F7 选定 U 盘上 bios 文件 0033 中 < Capsue File forCFlash through F7> 后回车。
-
重启按 F2 进 BIOS,把
Boot → Secure Boot设为 Disable -
用一根USB连接线连接手机和NUC,在手机设置中找到通过USB连接线进行网络共享,使用手机为NUC提供网络才可以进行后续操作(没有网络的话NUC无法与国内服务器进行通信,无法完成任何命令)
-
之后在这个网址 ↗下载驱动 backport-iwlwifi-dkms package : Ubuntu。

下载之后,在文件的同级目录安装该驱动。
sudo dpkg -i backport-iwlwifi-dkms_9858-0ubuntu3_all.debbash安装的时候如果报以下错误:

运行下方的命令。之后再次重复上方步奏,再次安装驱动即可。
sudo apt --fix-broken installbash- 最后跑一次:
sudo apt update和sudo apt upgrade即可。
Part 3:机载电脑 NUC 环境配置#
搞定了硬件连接和系统安装,接下来就是安装一些必不可少的组件,让我们的后续开发更顺利。这一部分可能会涉及到很多终端命令,建议细心拷贝,避免出错。
ROS 安装与测试#
对于 Ubuntu 20.04 系统,我们需要安装的是 ROS Noetic 版本。安装过程其实就是添加源、添加密钥、更新列表然后安装桌面完整版。建议没有 ROS 基础的同学可以根据我的项目ROS机器人开发学习库 ↗的 ROS 教程,跟着每一个小demo边做边学,磨刀不误砍柴工。
依次在终端执行以下命令:
# 添加源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 安装
sudo apt update
sudo apt install ros-noetic-desktop-full
# 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrcbash安装完成后,我们通过经典的小乌龟案例来测试一下。打开三个终端窗口,分别输入 roscore(启动 ROS 主节点)、rosrun turtlesim turtlesim_node(启动乌龟仿真节点)和 rosrun turtlesim turtle_teleop_key(启动键盘控制节点)。如果能用键盘方向键控制小乌龟移动,恭喜你,ROS 安装成功!

Realsense 驱动与 Mavros 安装#
ROS 装好后,我们要让 NUC 能驱动双目相机,并能与飞控通信。这里我们需要安装 Realsense 的 SDK 以及 Mavros 包。
- Realsense 驱动安装
同样是添加密钥和源,然后安装必要的依赖包:
# 添加密钥(如果有报错可以用 || 后面的备选命令)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
# 添加源
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
# 安装库和工具
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbgbash安装完成后,输入 realsense-viewer 启动测试工具。特别注意:查看软件左上角显示的连接状态,必须显示为 USB 3.x。如果是 2.x,请检查你的线材是否支持 3.0,或者是否插在了 NUC 的蓝色 USB 口上(3.0 的线和口都是蓝色的)。

- Mavros 安装
Mavros 是 ROS 与 MAVLink 协议之间的桥梁,将来要通过 Mavros 来连接机载电脑与飞控的通信。
# 执行这些命令可能会要等的时间比较长,请耐心等待
sudo apt-get install ros-noetic-mavros
cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.shbashPart 4:Mid-360 雷达配置 & FAST-LIO 建图#
Mid-360 雷达驱动配置#
- 安装 Livox-SDK2 ↗
这是驱动雷达所必要的 SDK,是必须安装的。
git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd ./Livox-SDK2/
mkdir build
cd build
cmake .. && make -j
sudo make installbash这个驱动包需要 clone 到你的工作空间 [work_space]/src/,你可以新建一个新的工作空间来专门存放雷达相关的运行程序。
git clone https://github.com/Livox-SDK/livox_ros_driver2.git ws_livox/src/livox_ros_driver2
cd livox_ros_driver2
source /opt/ros/noetic/setup.sh
./build.sh ROS1 bash- 连接 Mid-360 与 NUC
先将雷达的连接线分别插到对应的接口上,然后打开系统设置,跟着我下面的图片步奏一步一步做就可以。

之后修改 /src/livox_ros_driver2/config/MID360_config.json 文件中对应的 IP 地址。

- 运行 launch 文件检查是否安装成功
在 [work_space] 的工作空间下,运行下面的 roslaunch 程序,检查是否有点云图生成,则雷达配置成功。

实现 FAST-LIO#
上面的步奏只是让雷达驱动起来,但是他并没有什么很强的实用价值。要想让雷达真正作为机器人的感知设备,那就不得不用大名鼎鼎的 FAST-LIO 算法了,SLAM领域毋庸置疑的皇冠之星。
实现 FAST-LIO 最好不要新建工作空间,为了减少麻烦,建议直接装在雷达配置时使用的工作空间里。首先在 [work_space]/src/ 文件夹中下载 FAST_LIO 源码。
git clone https://github.com/hku-mars/FAST_LIO.git
cd FAST_LIO
git submodule update --init
cd ../..bash现在你就遇到了第一个比较坑的点了,现在 FAST_LIO 源码里使用的还是 livox_ros_driver,但你实际用的是 livox_ros_driver2。所以在 CMake 编译时需要按教程把对应引用改掉。具体修改的点如下几张图所示。

修改完成之后就可以开始编译了。 FAST_LIO 的编译依赖于 livox_ros_driver2 包,因此需要确保 livox_ros_driver2 在编译 FAST_LIO 之前编译,然后再编译整个工程。如果 livox_ros_driver2 还未编译,需要先将 FAST_LIO 移出 src 文件夹,编译 livox_ros_driver2 后再将 FAST_LIO 移回来。
catkin_makebash编译成功之后,进行运行测试,要打开两个终端,先在终端 1 中运行如下命令。
source devel/setup.bash
roslaunch livox_ros_driver2 msg_MID360.launchbash不要关闭这个正在运行的终端,在终端 2 中运行下面的命令。
source devel/setup.bash
roslaunch fast_lio mapping_mid360.launchbash运行成功之后,就会显示出如下的点云效果。

至此对雷达的开发就基本完成,你可以在上面的这些优秀的开源算法上实现许多有意思的工作,真正能让你的机器人动起来。
Part 5:Octomap 栅格建图#
FAST-LIO 跑通后的点云图虽然在视觉上非常酷炫,但在路径规划算法(如 A* 或 JPS)的眼里,那只是一堆离散的、没有明确边界的坐标点。为了让无人机能够进行自主避障和导航,我们需要将这些稀疏的点云转换成机器能理解的语言——占据栅格地图(Occupancy Grid Map)。Octomap 就像是《我的世界》(Minecraft)一样,它通过概率更新的方式,将空间划分成一个个状态明确(占用/空闲/未知)的小方块,这是后续所有规划算法的基础。
为什么要源码安装?#
虽然通过 apt 安装预编译包非常省事,但在 Octomap 的配置上,我建议采用源码安装。实际开发中,我们经常需要调整地图的分辨率(Resolution)、传感器最大量程甚至是由于坐标系定义不同而修改源码中的投影逻辑。预编译的黑盒无法提供这种灵活性。此外,在源码编译时,最好手动检查并修改头文件的引用名称,这虽然繁琐,但能有效避免与系统自带旧版本库发生冲突。
启动与数据流的协奏#
以下是整理好的“起飞”指令序列,建议按照此顺序分终端执行:
- 启动传感器
首先确保雷达正常工作,能在 RViz 中看到原始数据流。
cd catkin_livox_ros_driver2
source devel/setup.sh
roslaunch livox_ros_driver2 rviz_MID360.launchbash- 启动定位算法(位姿解算)
这是系统的核心,FAST-LIO 将为我们提供高频率的里程计信息。
cd catkin_livox_ros_driver2
source devel/setup.bash
roslaunch livox_ros_driver2 msg_MID360.launchbash保持上一个终端运行,开启新终端启动核心算法:
cd catkin_livox_ros_driver2
source devel/setup.bash
roslaunch fast_lio mapping_mid360.launchbash- 生成栅格地图
当定位稳定后,Octomap 节点开始接收点云和位姿,实时构建环境模型。
cd octomap_mapping_ws
source devel/setup.bash
roslaunch octomap_server octomap_mapping.launchbash
结语#
至此,我们完成了从物理世界的接线、系统底层的驱动安装,到数字世界中点云与栅格地图构建的全部流程。
与科研理论的学习相比,这种偏工程实践的魅力在于,它永远不会像教程里写得那样一帆风顺。在未来的调试中,你可能会遇到 USB 供电不足导致的设备掉线,可能会遇到 WiFi 驱动莫名消失的焦虑,也可能会在 TF 坐标系变换中迷失方向。但请记住,每一个红色的 Error 报错,都是系统在试图告诉你它的真实状态。每一次解决问题的过程,都是你对机器人底层逻辑理解的一次升华。
经常有人会这么说,你多看几个报错日志、多查几次文档、多做积累,做一个长期主义的人,总有一天会做到融会贯通的。希望这篇实战记录能成为你起飞前的最后一次检查清单。祝你的无人机,感知精准,飞行稳健。