ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

NUC与RealSense D435机载视觉平台环境搭建实战

NUC与RealSense D435机载视觉平台环境搭建实战 我最早做无人机视觉就是被“会看”这两字钩住的。真把一块机载电脑和一颗深度相机装到飞机上之后才发现最难的不是飞控也不是算法而是把底层环境一趟趟跑通。这篇文章要聊的是我实际组装过程中最折腾、也最值得写的一环——NUC机载电脑与Intel RealSense D435深度相机的环境搭建。我会把从硬件选型、系统安装、驱动编译到深度学习推理环境配置的整个流程完整走一遍里面包含了大量我踩过的坑和修正过的方案。如果你正准备给自己的无人机配上“眼睛”这套流程可以直接照着做。1. 为什么用NUC D435组合做机载视觉平台先说结论NUC做机载计算单元、D435做视觉传感器这个组合在目前的自研无人机项目里属于“稳妥不折腾”的典型方案。但稳妥不代表没有讲究为什么是这个组合而不是树莓派、Jetson或者干脆用笔记本值得展开说。1.1 机载电脑选型为什么是NUC而不是树莓派或Jetson机载电脑要干的事情很明确接相机、跑视觉算法目标检测、深度估计、光流、避障、通过串口或MAVLink和飞控通信、还要在任务中途承受震动、温度变化和意外断电。树莓派当然轻便便宜但GPU算力几乎为零跑YOLO这类目标检测模型只能勉强用非常小的模型或NPU加速版本体验很局促。Jetson系列算力强但价格高、散热压力大而且软件生态和x86平台不完全一致很多深度学习库需要专门为arm架构编译。NUC是x86架构和普通开发机完全同源任何在电脑上能跑通的代码几乎可以无缝搬到机上这省掉了非常多额外调试时间。具体型号上我使用的是NUC 11 Essential Kit也就是代号NUC11ATKC4的那款赛扬N5105四核处理器配了一块64GB eMMC存储板载版本。很多人觉得eMMC性能差但用在机载环境反而是优点不会有SSD在剧烈震动或掉电时“掉盘”的问题功耗也低整个平台的负载很低适合长时间飞。N5105的性能应对D435深度流读取、轻量级目标检测、MAVLink消息转发完全够。如果你的预算更充足、任务更重也可以选NUC 13或最新的NUC 14系列但要注意供电和散热。1.2 D435深度相机它到底“看”到了什么Intel RealSense D435是一颗双目红外结构光深度相机核心能力是同时输出RGB彩色图像和深度图。它的深度感知原理不是靠单目估测而是通过左右两个红外相机拍摄同一场景用视差计算深度再配合红外点阵投射器在弱纹理环境下补足特征。有效深度范围大约是0.2米到10米深度分辨率最高1280x72090fpsRGB分辨率最高1920x108030fps。这个参数覆盖了绝大多数室内外无人机视觉任务避障看3到8米降落定位看0.5到2米目标追踪看3到10米。D435和NUC通过USB 3.0连接驱动层面由Intel的librealsense SDK统一管理所有深度流、RGB流、相机参数曝光、增益、白平衡、深度精度预设都可以通过SDK的API读取和控制。这意味着你不需要自己造轮子去处理视觉数据只需要把精力放在算法和应用上这一点对快速搭建原型机很重要。1.3 这套方案的整体架构与工作流从整体架构看机载视觉系统的数据流大概是D435通过USB线把RGB图和深度图送到NUCNUC上运行的视觉节点后文会搭建的Python程序读取图像、推理出目标位置和深度信息然后把这些结果编码成MAVLink消息通过FTDI串口或USB转TTL线发给飞控。飞控根据这些信息执行悬停、跟随、避障等动作。机载电脑和地面站之间则通过数传模块或WiFi保持遥测连接方便实时观察画面和修改参数。所以环境搭建这条线就分成了三个层次系统层Ubuntu 驱动 权限、依赖层Python、CUDA、OpenCV、PyTorch、应用层librealsense PyRealSense2 目标检测框架。我在后面的章节就是按照这个顺序讲的。任何一个层次出问题都会表现为“相机不出图”或“程序跑不起来”这也是环境搭建篇存在的价值。2. 硬件准备与Ubuntu系统安装硬件这关我卡过一次当时图省事买了一个普通USB Hub给相机供电结果飞行中图像经常丢帧。后来才明白D435对USB带宽非常敏感必须直连主板的USB 3.0口最好是机器背部或侧面的原生接口。所以搞硬件先不要急着装系统理清接口和供电再动手。2.1 完整硬件清单与接口说明我这边最终定型的硬件清单如下NUC 11 Essential KitNUC11ATKC4板载64GB eMMC额外加了一条8GB DDR4笔记本内存Intel RealSense D435 带弹簧的USB 3.0 Type-C数据线注意要质量好的普通手机数据线容易丢带宽无人机组我搭配的是开源PX4飞控 相应的机架和电机电调这部分不影响环境搭建但后面集成时要一起联调串口通信USB转TTL模块用来让NUC和飞控通信显示与输入一个HDMI显示器、USB键盘鼠标只在安装系统时用后续都是SSH远程电源NUC原装电源适配器实际整机待机功耗约10W满载约20W非常友好如果你的无人机供电系统有余量也可以直接从动力电池降压给NUC供电但一定要用高质量的DC-DC模块且输出纹波不能太大否则NUC容易无故重启我在文章后面会专门讲这个坑。2.2 系统镜像选择与U盘启动盘制作系统我用的是Ubuntu 22.04 LTS桌面版。有人觉得机载环境应该用服务器版省资源但我的经验是桌面版更方便调试——第一次校准时可以直接连显示器看图像、改配置跑通了再远程操作也不迟。Ubuntu 22.04的硬件兼容性对NUC和D435都很好内核自带大部分驱动。制作启动盘直接用balenaEtcher把Ubuntu官方ISO烧录到8GB以上U盘里就算完成。注意不要用Rufus的DD模式之外的选项在Etcher里不用设置它会自动处理分区表。烧录完成后U盘插到NUC上开机按F2进BIOS把Boot Priority改成U盘第一。这里有个细节NUC 11 Essential Kit的BIOS默认可能开启了Secure BootUbuntu桌面版默认支持安全启动理论上可以直接引导。但我遇到过一次安装器无法识别eMMC的情况后来在BIOS里把SATA Mode和eMMC的配置重置为默认值才正常。如果你也碰到类似问题先别急着重装进BIOS检查这两项设置。2.3 磁盘划分与系统安装要点磁盘规划方面由于是64GB eMMC空间不大我做了最简单的布局整个eMMC当作根分区不单独分boot和home。因为后续要用到Linux系统、RealSense SDK和深度学习环境单独划分容易造成某块空间不足统一根分区反而灵活。安装过程本身没什么特别选“最小安装”模式安装时勾选“为图形或无线硬件安装第三方软件”。语言选英文这样可以避免之后很多路径和编码问题。用户密码设置完建议记在手机备忘里机载环境经常几个月不动一次忘了密码非常麻烦。安装完成后第一件事就是更新系统sudo apt update sudo apt upgrade -y sudo apt install -y git curl wget vim htop net-tools这里要提醒一点64GB eMMC的写入速度不如SSDapt upgrade如果包很多会等久一点属于正常现象。千万别以为死机了强制断电eMMC在写入中掉电可能损坏文件系统这个教训我一次就够深刻了。2.4 远程SSH连接与固定IP配置服务器装好后我会立刻开启SSH这样以后调试就不用每次都接显示器了。Ubuntu桌面版自带openssh-server不一定默认安装需要手动装一下sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh接下来配置静态IP。机载电脑如果每次重启IP都变SSH连接和地面站通讯都会很痛苦。最简单的方式是在路由器里绑定MAC地址但我更推荐在Netplan里直接写死。Ubuntu 22.04的配置文件是/etc/netplan/01-network-config-all.yaml打开后写入network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.101/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8]然后执行sudo netplan apply。注意eth0是NUC有线网口的名称不同机器可能叫enp1s0先用ip a确认。我实测下来固定IP对后面连接飞控、传输图像、跑ROS2都非常重要。网络环境不稳定的时候地面站和机载电脑的通信断连往往不是数传的问题而是IP变了。3. 机载基础环境Python管理、MAVLink依赖与实用配置系统装好后接下来的重点就是让NUC变成一台“干活的机器”。这一步看似琐碎但每一件事都和后面的相机驱动、视觉推理、飞控通信强相关。我按实际依赖关系一个个来。3.1 Python版本管理别动系统自带的PythonUbuntu 22.04自带Python 3.10这对大多数项目都够用了。但注意系统的很多工具比如gnome-terminal、apt依赖系统Python千万不要直接pip install到系统环境里。正确做法是使用虚拟环境把项目依赖和系统环境隔离。我常用的工具是virtualenv和virtualenvwrapper简单直接。安装方式sudo apt install -y python3-pip python3-venv virtualenv然后给当前用户配置一个环境变量放到~/.bashrc末尾export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh以后新建项目时直接mkvirtualenv drone_vision -p python3 workon drone_vision这样所有依赖都安装在独立环境里即便某个包把环境搞坏了删掉重来即可不影响系统。这里有个经验之谈机载环境的Python不要追求最新版本反而越“陈旧”越稳定。很多视觉库、相机SDK对Python版本有编译期依赖Python 3.10目前是兼容性最好的等Python 3.12普及了再说。3.2 串口权限准备避开dialout组的坑无人机和飞控通信几乎都是走串口的PX4飞控默认用的是USB转串口设备名通常是/dev/ttyUSB0或/dev/ttyACM0。Ubuntu下普通用户默认没有权限访问串口设备如果不处理你的Python程序打开串口会直接报PermissionError。解决方案很简单把当前用户加到dialout组sudo usermod -aG dialout $USER然后注销重新登录或者重启用id命令确认一下如果输出里有dialout就说明生效了。这个问题我一开始就碰到了当时折腾了很久才发现是权限问题。另外如果用的是USB转TTL模块还要确认模块驱动。常见的CH340和CP2102芯片在Ubuntu 22.04内核里都自带驱动插上就能识别不需要额外装驱动。3.3 MAVLink通讯基础pymavlink与MAVProxy无人机机载电脑和PX4飞控之间的通信协议是MAVLink这是ArduPilot和PX4都支持的标准协议。在环境搭建阶段先把MAVLink通讯测通后面的视觉数据才能准确送到飞控。安装Python端依赖workon drone_vision pip install pymavlink pymavlink[standard]为了快速验证通信可以装MAVProxysudo apt install -y python3-wxgtk4.0 pip install mavproxy然后用USB转TTL线连接飞控和NUC执行mavproxy.py --master/dev/ttyUSB0 --baudrate 115200如果能看到心跳消息和飞控参数列表说明串口链路已经通了。PX4的默认波特率是115200ArduPilot也大多一样不要搞错。3.4 SSH键登录与免密操作机载电脑和地面站之间频繁传文件、跑命令每次输密码太影响效率。我建议直接配SSH免密登录。在自己电脑上生成密钥对ssh-keygen -t rsa -b 4096 ssh-copy-id user192.168.1.101之后ssh登录、scp传文件就都不需要密码了。在调试视觉程序、传输模型权重时这个体验提升非常明显。如果你打算后续用ROS2也可以顺手装一些基础包sudo apt install -y ros-dev-tools但我个人觉得如果项目还没确定一定要上ROS2先用纯Python和MAVLink跑通全流程架构更简单也更容易定位问题。4. Intel RealSense D435驱动与SDK安装相机驱动是整个视觉系统里最容易“看上去不复杂但实际处处是问题”的一环。Intel官方提供一条龙安装脚本但我不推荐直接用因为脚本会动系统很多依赖一旦出错很难查。我更推荐源码编译librealsense虽然第一次编译要花二十多分钟但胜在可控、可复现。4.1 源码编译librealsense的思路与前置依赖librealsense是Intel RealSense相机的官方SDK支持Linux、Windows、macOS核心库是C的同时提供Python绑定。源码编译的好处是能选择稳定的版本不会因为系统升级导致SDK失配编译过程可以看日志出问题容易定位生成的库文件可以拷贝到其他机器重复使用。我编译用的是2.54.2版本这是目前官方仓库里一个非常稳定的版本。先安装依赖sudo apt install -y git cmake build-essential pkg-config libusb-1.0-0-dev libglfw3-dev libgtk-3-dev libssl-dev接着克隆源码并切到对应标签git clone https://github.com/IntelRealSense/librealsense.git cd librealsense git checkout v2.54.24.2 编译参数与UVC内核补丁librealsense在Linux下需要使用V4L2驱动访问相机因此要安装Intel提供的udev规则文件sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger然后开始编译mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease -DBUILD_EXAMPLEStrue -DBUILD_PYTHON_BINDINGStrue -DPYTHON_EXECUTABLE$(which python3) make -j$(nproc) sudo make install这里有个关键参数BUILD_PYTHON_BINDINGStrue会同时生成Python接口。但如果你的系统里有多套Python环境cmake默认找的是/usr/bin/python3而不是virtualenv里的Python。解决办法有两种一是在cmake命令里显式指定PYTHON_EXECUTABLE二是编译完Python绑定后把生成的模块手动复制到虚拟环境的site-packages里。我在第一次编译时就因为环境找错导致后来看不到pyrealsense2花了不少时间排查。编译成功并安装后最好执行一遍sudo ldconfig让动态链接库及时生效。然后插上D435运行realsense-viewer如果界面正常弹出并显示两个彩色画面RGB和深度说明驱动已经通了。第一次跑realsense-viewer时它会提示加载固件直接点升级即可。4.3 电源管理与USB带宽排查驱动装好后相机出图不稳定是常见问题。我实际遇到过两种典型情况第一种是USB带宽不足表现为深度流和RGB流同时开启时丢帧严重。解决办法是检查USB连接是否插在3.0口上且线材质量合格。你可以用lsusb -t查看连接速率lsusb -t如果看到5000M的速率就说明是USB 3.0连接。如果显示480M说明走的是USB 2.0需要换线或换口。第二种是电源管理导致相机间歇性掉线。Ubuntu的USB自动挂起会把空闲的相机端口休眠导致程序一跑长时间就没有图像了。必须关闭这个功能sudo sed -i s/GRUB_CMDLINE_LINUX_DEFAULTquiet splash/GRUB_CMDLINE_LINUX_DEFAULTquiet splash usbcore.autosuspend-1/ /etc/default/grub sudo update-grub改完重启。这一步我建议所有做无人机视觉的朋友都做几乎必然会踩。4.4 Python绑定PyRealSense2的验证环境都装好后在虚拟环境里验证Python接口cd ~/librealsense/build find . -name *.so | grep pyrealsense2把找到的pyrealsense2.cpython-310-x86_64-linux-gnu.so复制到虚拟环境的site-packages里cp pyrealsense2*.so ~/.virtualenvs/drone_vision/lib/python3.10/site-packages/然后写个最简单的测试脚本import pyrealsense2 as rs pipeline rs.pipeline() config rs.config() config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) pipeline.start(config) for i in range(5): frames pipeline.wait_for_frames() depth frames.get_depth_frame() color frames.get_color_frame() print(depth:, depth.get_width(), depth.get_height()) print(color:, color.get_width(), color.get_height()) pipeline.stop()如果打印正常说明D435在Python环境里已经彻底跑通了。这个脚本虽然简单但我会一直保留以后排查相机问题先跑它再定方向。5. 视觉AI环境PyTorch与YOLOv8快速跑通相机能出图只是第一步视觉无人机真正核心的是“看懂图像”。我项目里主要用YOLOv8做人、车、障碍物检测深度图负责测距。环境部分要做的就是装好PyTorch和YOLOv8然后跑一个目标检测Demo验证整条链路。5.1 安装CPU版还是GPU版PyTorch这个问题几乎每个人都会问。我的建议是如果预算有限、暂时没有GPU先用CPU版把整条流程跑通把注意力放在代码逻辑和硬件集成上。NUC 11的CPU跑YOLOv8n这种轻量模型大约每帧2到4秒实时性不够但做离线和联调测试足够了。将来升级硬件或者用NUC 13再把GPU版本加上代码几乎不用改。CPU版安装很简单pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu很多中文教程会推荐直接从默认源装但我实测下来从PyTorch官方源装CPU版包体积小且版本更匹配。如果你的NUC带Intel核显想压榨一点性能可以试OpenVINO转换把YOLOv8导出成OpenVINO中间表示在N5105上能提速不少。这个我后面有个单独章节会讲。5.2 安装Ultralytics YOLOv8并下载模型Ultralytics是目前YOLO生态最活跃的维护方YOLOv8用起来非常简单几个pip命令就搞定pip install ultralytics然后下载一个预训练权重。目标检测用yolov8n.pt这是最轻量的版本适合机载环境python -c from ultralytics import YOLO; model YOLO(yolov8n.pt)首次运行会从官方服务器下载权重大概6MB左右很快。如果下载超时可以自己手动下载pt文件放到工作目录YOLO会自动识别。5.3 把D435图像流接进YOLOv8这里是最容易出问题的地方D435的图像是numpy数组格式YOLOv8也吃numpy数组但两者的颜色通道和维度必须对齐。D435的Color流我们通常会配置成BGR8格式YOLOv8内部默认也是BGR格式可以直接喂进去。但如果你用OpenCV读图片默认BGR或者用pyrealsense2自己转换过就一定要确认通道顺序否则检测框会错乱。一个实测可用的检测循环代码import cv2 import pyrealsense2 as rs from ultralytics import YOLO model YOLO(yolov8n.pt) pipeline rs.pipeline() config rs.config() config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) pipeline.start(config) try: while True: frames pipeline.wait_for_frames() color_frame frames.get_color_frame() depth_frame frames.get_depth_frame() if not color_frame or not depth_frame: continue img np.asanyarray(color_frame.get_data()) depth np.asanyarray(depth_frame.get_data()) results model.predict(img, imgsz640, conf0.4, verboseFalse) annotated results[0].plot() for r in results[0].boxes: cls_id int(r.cls[0]) x1, y1, x2, y2 map(int, r.xyxy[0]) center_x (x1 x2) // 2 center_y (y1 y2) // 2 depth_value depth[center_y, center_x] print(f{results[0].names[cls_id]}: {depth_value} mm) cv2.imshow(drone_vision, annotated) if cv2.waitKey(1) 0xFF ord(q): break finally: pipeline.stop() cv2.destroyAllWindows()这个脚本的作用是把RGB检测框画出来同时从深度图的中心点读取距离。你会看到类似“person: 2350 mm”这样的输出这就意味着你的无人机已经能看到东西并测出距离了。5.4 性能优化思路OpenVINO与模型压缩跑通之后自然要面对性能问题。NUC 11的CPU跑YOLOv8n推理一帧要好几秒这在飞行中完全不可用。我实测有效的优化路径是转OpenVINOpython -c from ultralytics import YOLO model YOLO(yolov8n.pt) model.export(formatopenvino, halfTrue) 导出完成后用import os设置环境变量指定插件再重新predict速度能提升2到4倍。如果你想进一步压缩可以训练更小的模型比如yolov8n的裁剪版或者用蒸馏但这已经超出环境搭建的范畴了。我的建议是先把流程跑通性能优化单独开篇。5.5 留给后续的扩展点ROS2与Open3D环境搭建阶段不必把所有组件都装上。但有两个库非常建议顺手安装因为后文做室内避障或三维重建一定会用到。第一个是open3d用于深度点云计算和可视化安装很简单pip install open3d。第二个是ROS2的realsense-ros包如果项目决定用ROS2做架构就得单独编译。这两部分放到“后续功能篇”展开更合适但依赖提前装好能省很多时间。6. 从环境到无人机集成要点、问题排查与避坑心得环境搭建到最后所有独立模块看起来都正常了但放到无人机上就可能被各种综合问题打回原型。这一章我整理了从地面调试到上机前的集成要点以及我在实际项目中遇到的最典型的几个问题。这一部分的经验值可以说是整个环境搭建篇的精华。6.1 飞控与NUC的点对点串口测通串口是很多新手忽略的重灾区。USB转TTL模块接线正确顺序是GND对接GND、TX接RX、RX接TX电源不要接因为飞控串口一般已经有电平了再供电容易烧板子。接好后在NUC上先看设备名ls /dev/ttyUSB*然后直接用Python测试MAVLink心跳from pymavlink import mavutil master mavutil.mavlink_connection(/dev/ttyUSB0, baud115200) master.wait_heartbeat(timeout10) print(heartbeat from system %u % master.target_system)如果能打印心跳说明链路已通。如果没有心跳先检查波特率和接线顺序这两个原因占了80%的情况。我在项目里曾因为USB转TTL模块本身质量问题接上后信号压降严重出现时好时坏的诡异现象换个模块后一切正常。6.2 供电与掉电保护NUC在飞机上“怕什么”NUC装到无人机上最大的威胁来自供电环境。无人机动力电池电压在飞行中会有明显波动尤其在电机加速瞬间输出纹波会瞬间变大。如果直接给NUC供电轻则USB设备掉线重则整机重启。我的解决方法是加上一个多级稳压模块输入接动力电池的稳压电源输出稳定在19V给NUC供电同时在电源输入口并联一个大容量电容比如1000μF吸收瞬时冲击。实测下来这样配置后连续飞行和暴力测试都没有再出现重启。另外一个很容易被忽略的点是eMMC掉电保护。虽然eMMC比SSD更抗掉盘但长时间在文件系统上反复写入还是有可能产生损坏。最好把系统日志和数据写入目录放到内存盘/tmp目录减少eMMC的频繁写操作。比如PyTorch的缓存目录默认会写到~/.cache/torch如果长期运行最好挂载到tmpfs上。6.3 常见问题速查表这里我把环境搭建阶段最容易遇到、且最有共性的问题整理成一张表方便你对照排查问题现象可能原因排查方向realsense-viewer不显示图像USB连接速率不对、电源管理休眠lsusb -t查速率关闭usbcore.autosuspendPython导入pyrealsense2失败编译时Python路径不对、so文件未复制cmake时指定PYTHON_EXECUTABLE确认虚拟环境site-packagesD435图像间歇性丢失USB线质量差、供电不稳换短线、直连主板USB 3.0口、检查电源纹波串口打开无权限用户不在dialout组sudo usermod -aG dialout $USER重登生效MAVLink heartbeat收不到接线顺序错、波特率不匹配确认TX/RX交叉、115200先短测TX/RXYOLO检测结果全是错位框图像通道顺序不对、帧尺寸不对确认BGR格式、imgsz输入和模型一致NUC飞行中自动重启供电电压跌落、散热不足加稳压模块、检查风扇、检测温度6.4 上机前的最后检查清单我习惯在每次飞行调试前按照固定清单走一遍避免漏项。其实很多“诡异问题”最后复盘都是漏了这些基础检查相机和NUC连接是否牢固线材有没有被螺旋桨气流吹松串口模块接线是否固定好会不会在震动中脱落机载电脑是否固定牢固减震泡沫或橡胶垫是否完好电量和电压是否在正常范围NUC的SSH服务是否正常运行IP是否稳定系统时间是否准确时间偏移会影响证书校验和日志对齐重要脚本是否设置为开机自启动是否做了崩溃自动重启时间同步是很多人忽略的一项。无人机飞行时NUC时钟可能会漂移如果涉及多机协同或数据后处理时间戳不一致会导致严重问题。建议装上chrony通过数传或WiFi从地面站同步时间sudo apt install -y chrony6.5 关于“环境搭建”这件事我说点实在的做完整套流程我对机载环境搭建的最大感受是它不酷但它是整个无人机视觉项目里最“磨人”的部分。D435的驱动编译、Python路径配置、USB带宽、串口权限这些看似琐碎的问题会在你真正做到飞行测试时一次性涌出来。如果没有一个可靠的环境基础后面的算法再好也飞不起来。我的习惯是环境搭建阶段就做版本记录。librealsense源码版本、PyTorch版本、YOLO版本、Ubuntu版本、内核版本全部写进项目的README里。几个月后再去复现照着记录就能重建环境这种长期收益在团队协作或项目交接时特别明显。这个项目后续还有很多可以延伸的地方在NUC上跑基于点云的避障算法、把深度图和YOLO结果融合做目标追踪、用OpenVINO做实时推理加速、把整套视觉链路接进PX4的offboard模式实现自动跟随飞行。如果这篇文章对你有帮助后面我会继续写“算法与应用篇”和“飞行集成篇”把这条路上踩过的坑和摸出来的经验都整理出来。
返回列表