想要搭建一套完整的无人机自主导航系统,硬件选型和系统架构设计是第一步。我去年用这套方案做过一个农业巡检项目,实测下来这套组合性价比很高。核心硬件包括三部分:
主控单元推荐使用Intel NUC12 Pro作为机载电脑,它体积只有11.7x11.2x5.1cm但性能足够跑通所有算法。记得选配至少16GB内存和500GB SSD,我试过8GB内存跑VINS-Fusion时会频繁崩溃。
飞控系统建议搭配Pixhawk 6C,这是目前最稳定的开源飞控之一。它支持PX4和ArduPilot双固件,通过MAVLink协议与机载电脑通信。实际部署时要注意给飞控加装减震棉,我遇到过IMU数据抖动导致定位漂移的问题。
感知套件首选D435i深度相机,它集成了RGB摄像头、深度传感器和IMU模块。相比单目方案,双目深度信息对避障帮助很大。有个小技巧:在室外使用时最好关闭结构光改用自然光模式,阳光直射时结构光会失效。
系统架构设计可以参考这个数据流:
配置开发环境是最容易踩坑的环节,这里分享几个关键步骤和避坑经验。建议先用Ubuntu 20.04 LTS系统,ROS Noetic的兼容性最好。
ROS基础环境安装要注意这些细节:
bash复制sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt update
sudo apt install ros-noetic-desktop-full
安装完成后务必执行rosdep init && rosdep update,我遇到过因为跳过这步导致后面catkin_make报错的情况。MAVROS安装推荐用二进制包:
bash复制sudo apt install ros-noetic-mavros ros-noetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod +x install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
Realsense驱动安装要特别注意版本匹配。实测D435i最适合的搭配是librealsense v2.48.0 + realsense-ros v2.3.1。安装时有个隐藏坑点:需要先卸载预装的uvc驱动:
bash复制sudo apt-get purge librealsense2
sudo apt-get install libssl-dev libusb-1.0-0-dev
git clone -b v2.48.0 https://github.com/IntelRealSense/librealsense
cd librealsense
./scripts/patch-realsense-ubuntu-lts.sh
mkdir build && cd build
cmake .. -DBUILD_EXAMPLES=true
make -j4
sudo make install
安装完成后插上相机测试,如果出现"Frame didn't arrive within 5000"错误,尝试降低分辨率到848x480或者更换USB3.0接口。
VINS-Fusion是整套系统的定位核心,它的安装过程最复杂。我整理了优化后的安装流程,比官方文档节省30%时间。
依赖项安装要先搞定Ceres Solver和OpenCV。这里有个技巧:直接使用Fast-Drone-250项目中提供的3rd_party.zip预编译包,能避免90%的编译错误。解压后按这个顺序安装:
bash复制cd glog-0.4.0
./autogen.sh && ./configure
make -j4 && sudo make install
cd ceres-solver-1.14.0
mkdir build && cd build
cmake .. -DEXPORT_BUILD_DIR=ON
make -j4 && sudo make install
OpenCV 3.4.11需要手动编译,关键配置参数如下:
bash复制cd opencv-3.4.11
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_python3=OFF ..
make -j4
sudo make install
安装完成后一定要配置pkg-config路径,否则VINS编译时会找不到OpenCV:
bash复制echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
source ~/.bashrc
VINS-Fusion编译时要注意修改两处配置:
loop_fusion/CMakeLists.txt中的find_package(OpenCV 3.4.11 REQUIRED)vins_estimator/CMakeLists.txt添加set(CMAKE_CXX_STANDARD 14)测试时建议先用Euroc数据集验证:
bash复制roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play MH_01_easy.bag
Ego_planner的实时性直接影响避障效果,这里分享我的调参经验。首先从GitHub克隆最新代码:
bash复制git clone https://github.com/ZJU-FAST-Lab/Fast-Drone-250.git
cd ~/control/Fast-Drone-250
catkin_make -j4
关键参数调整主要在ego_planner_node.yaml中:
max_vel_x建议设为2.5-3.0m/s,超过这个速度容易发生轨迹震荡acceleration_x最好保持在1.5m/s²以内local_segment_length设置为5-7米效果最佳resolution推荐0.15米,平衡精度和计算量启动前需要先配置好MAVROS连接:
xml复制<arg name="fcu_url" default="/dev/ttyACM0:921600" />
<arg name="gcs_url" default="udp://:14550@" />
<arg name="tgt_system" default="1" />
避障测试时建议先用仿真环境:
bash复制roslaunch ego_planner single_run_in_sim.launch
实际飞行时要特别注意点云质量,如果出现大量噪点,可以修改realsense2_camera/rs_camera.launch:
xml复制<arg name="enable_pointcloud" value="true" />
<arg name="filters" value="pointcloud" />
<arg name="depth_width" value="640" />
<arg name="depth_height" value="480" />
联调阶段最容易出现传感器同步问题,这里有几个实用调试技巧:
时间同步是首要问题,建议用以下命令检查时间戳:
bash复制rostopic hz /camera/color/image_raw
rostopic hz /mavros/imu/data
如果偏差超过50ms,需要配置NTP服务:
bash复制sudo apt install chrony
sudo nano /etc/chrony/chrony.conf
# 添加server 192.168.1.1 iburst
sudo service chrony restart
CPU负载优化很关键,实测发现这三个措施最有效:
bash复制sudo apt install cpufrequtils
sudo cpufreq-set -g performance
bash复制sudo systemctl set-default multi-user.target
xml复制<param name="queue_size" value="2" />
飞行测试建议分三步进行:
遇到轨迹抖动时,优先检查这两个参数:
controller/angle_rate_p增益planner/safe_distance到0.8米以上