微空科技无人机视觉导航教程系列包含:
机载电脑环境配置(树莓派4B+T265)
双目VIO算法实现与应用(树莓派5+D435i)
拓展应用案例
《机载电脑环境配置(树莓派4B+T265)》以 微空MVD35(T265 版)飞行平台为例,视觉传感器采用 T265,机载电脑采用 树莓派4B,介绍机载电脑的配置过程;MVD35飞行平台支持 Ardupilot 及 PX4 固件,本篇统一进行介绍,配置过程 Ardupilot 和 PX4 的不同之处会分别指出;关于 MVD35(D435i 版)飞行平台的机载电脑配置过程,参考《双目VIO算法实现与应用(树莓派5+D435i)》
MVD35 套件购买
硬件准备
T265 及 USB A - Micro USB 3.0 数据线
树莓派 4B (4GB RAM 版本)
32G TF 存储卡及读卡器
WIFI 网络条件(无需科学上网)
软件准备
Raspberry Pi Imager,官方下载链接:https://www.raspberrypi.com/software/
MobaXterm,官方下载链接:https://mobaxterm.mobatek.net/download-home-edition.html
使用技巧
MobaXterm,鼠标右键为粘贴快捷键
Ctrl + C
结束进程;或在需要输入密码处取消 sudo
指令
vim 编辑器 i
或 insert
键进入编辑,ESC
键进入命令模式 :wq
命令保存并退出
工具:Raspberry Pi Imager,官方下载链接:https://www.raspberrypi.com/software/
将 TF 卡通过读卡器接入电脑,安装并打开 Raspberry Pi Imager:
Raspberry Pi Device 选择 RASPBERRY PI 4;
操作系统选择 Other general-purpose OS -> Ubuntu -> Ubuntu Server 20.04.5 LTS (64-bit);
储存卡选择插入的 TF 卡;
点击 NEXT,在弹出的窗口中选择 编辑设置:
设置账号及密码(微空MVD35 飞行平台统一账号:micoair 密码:12345678)
配置 WIFI 名称及密码
点击 保存 ,并按照默认提示选择 是 写入镜像
工具:MobaXterm,官方下载链接:https://mobaxterm.mobatek.net/download-home-edition.html
获取树莓派 IP
将烧录好镜像的 TF 卡插入树莓派,接入电源即启动树莓派(启动树莓派后 30 秒内,树莓派会自动搜索并连接到步骤 1. 中配置的 WIFI)
进入 WIFI 管理后台找到并复制名称为 raspberrypi 设备的 IP 地址
局域网登录树莓派
安装并打开 MobaXterm
在上方工具栏点击 Session,弹出的界面选择 SSH,在 Remote host 填入树莓派的 IP 地址,勾选 Specify username 并填入步骤 1. 中设置的用户名(MicoAir3.5'视觉版 飞行平台统一账号:micoair 密码:12345678),点击 OK 进行连接
输入密码登录到树莓派(微空MVD35 飞行平台统一账号:micoair 密码:12345678)
更新库文件
sudo apt-get update
sudo apt-get upgrade -y
官方安装文档:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md
librealsense SDK 没有树莓派的预编译安装包,需要通过板上编译源代码进行安装
安装依赖库、编译工具
sudo apt-get install -y libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev
sudo apt-get install -y git wget cmake build-essential
sudo apt-get install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev at
下载 librealsense2 源代码
git clone https://github.com/IntelRealSense/librealsense.git
切换到支持 T265 的分支
cd librealsense
git checkout v2.53.1
运行权限配置脚本
./scripts/setup_udev_rules.sh
按照提示断开 T265 并按下任意键运行配置脚本
编译 librealsense2 SDK
mkdir build && cd build
cmake ../
下面开始编译 librealsense SDK,编译过程耗时较长,本教程中使用的树莓派是 4G RAM 版本,可直接进行编译;若使用的树莓派是 2G RAM 版本,需要设置交换空间以避免编译过程内存不足而卡死,设置 2G 大小的交换空间,设置过程可参考:https://www.myfreax.com/how-to-add-swap-space-on-ubuntu-20-04/
make -j4
安装及测试
sudo make install
realsense-viewer
安装完成后,realsense-viewer
指令会打开软件窗口(软件运行在树莓派上,并通过 SSH 连接将软件界面传回,并非运行于本地电脑,所以操作灵敏度不高)。注意:启动 Intel RealSense Viewer 后才能将 T265 插入树莓派 USB3.0 接口;
软件会检测 T265 设备并在左侧边栏显示识别到的设备:
将识别到的 T265 Tracking Module 滑块由 off 切换到 on;
2D 界面显示 T265 鱼眼图像,IMU 和姿态数据;3D 界面显示设备实时姿态及轨迹;可通过右上角按键切换 2D 和 3D 界面;
软件正确识别到 T265 设备且数据显示正常,则 librealsense SDK 安装成功
官方安装文档:https://wiki.ros.org/noetic/Installation/Ubuntu
添加 sources.list 和 keys
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 -y ros-noetic-desktop-full
更新环境配置
source /opt/ros/noetic/setup.bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装 rosdep
sudo apt-get install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
执行 sudo rosdep init
时,若显示连接不上 githubusercontent,可通过手动添加 host 解决,方法如下:
sudo vim /etc/hosts
在文档最后添加新行
151.101.84.133 raw.githubusercontent.com
保存并退出后,从 sudo rosdep init
处继续执行安装过程
启动 ros 验证是否成功安装
roscore
显示以下信息则说明成功安装
官方安装文档:https://github.com/IntelRealSense/realsense-ros/blob/ros1-legacy/README.md
参考官方安装文档,采用 Method 2: The RealSense distribution,需要先安装好上文步骤 3. 中的 librealsense SDK 及步骤 4. 中的 ROS
创建 catkin 工作环境
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
下载 Intel RealSense ROS 源代码并切换分支
git clone https://github.com/IntelRealSense/realsense-ros.git
git clone https://github.com/pal-robotics/ddynamic_reconfigure
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`
cd ..
编译并安装
catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
配置环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
官方安装文档:https://github.com/mavlink/mavros/tree/master/mavros#installation
参考官方安装文档,官方提供了预编译文件,可使用二进制安装,需要先安装好上文步骤 4. 中的 ROS
下载脚本并通过脚本安装
cd ~
sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod a+x install_geographiclib_datasets.sh
sudo bash ./install_geographiclib_datasets.sh
若 wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
指令提示连接不上 githubusercontent,参考上文步骤 4. 中安装 ROS rosdep 的解决方法;
安装过程没有详细日志输出且耗时不稳定,若长时间没有进展,尝试结束进程并重新执行 sudo bash ./install_geographiclib_datasets.sh
修改连接波特率
Ardupilot 固件,修改 apm.launch
sudo vim /opt/ros/noetic/share/mavros/launch/apm.launch
将文档中第五行波特率由 57600 改为 230400 (为保证飞控与树莓派通信带宽充足,推荐波特率为 115200 以上,根据实际使用需求确定,微空MVD35 飞行平台采用 230400 )
PX4 固件,修改 px4.launch
sudo vim /opt/ros/noetic/share/mavros/launch/px4.launch
将文档中第五行波特率由 57600 改为 460800 (为保证飞控与树莓派通信带宽充足,推荐波特率为 115200 以上,根据实际使用需求确定,微空MVD35 飞行平台采用 460800 )
Ardupilot 固件
roslaunch mavros apm.launch
树莓派能接收到飞控状态信息,则连接成功
也可通过查看 mavros 连接状态,确定是否连接成功,在另一终端输入下面指令查看连接状态,回传飞控状态则连接成功
rostopic echo /mavros/state
PX4 固件
roslaunch mavros px4.launch
树莓派能接收到飞控状态信息,则连接成功
也可通过查看 mavros 连接状态,确定是否连接成功,在另一终端输入下面指令查看连接状态,回传飞控状态则连接成功
rostopic echo /mavros/state
坐标系及 mavros 发布主题参考:https://github.com/thien94/vision_to_mavros
创建 catkin 工作环境
mkdir -p ~/vision_ws/src
cd vision_ws/src
下载坐标转化包源码
git clone https://github.com/thien94/vision_to_mavros.git
编译工作环境
catkin_init_workspace
cd ..
catkin_make
配置环境变量
echo "source ~/vision_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
参考博客:https://blog.csdn.net/qq_51491920/article/details/123361881
T265 连接状态下树莓派开机会导致设备识别和数据读取异常,需要重新拔插 T265 以恢复正常,或通过安装 uhubctl (软件重启 USB 口)以解决 T265 需要硬件插拔的问题
微空MVD35 飞行平台已安装 uhubctl,且配置了开机自动初始化脚本,开机自动重启 USB 口,可直接使用 T265(见下文 方法三)
安装依赖库
sudo apt-get install libusb-1.0-0-dev
下载源代码
cd ~
git clone https://github.com/mvp/uhubctl
编译与安装
cd uhubctl
make
sudo make install
重启 USB
方法一:通过指令直接重启 USB 口
sudo uhubctl -l 2 -a cycle -p 1-4
方法二:设置启动终端时自动重启 USB ;打开多个终端时,只需重启 USB 一次
sudo vim /etc/profile
在文档最后添加新行
sudo uhubctl -l 2 -a cycle -p 1-4
保存并退出,重新连接终端时生效
方法三:通过开机自动化脚本重启 USB 口,开机即可直接使用 T265
sudo vim /etc/rc.local
输入开机启动脚本
#!/bin/bash -e
sleep 1
sudo uhubctl -l 2 -a cycle -p 1-4
exit 0
保存并退出,重新启动树莓派生效
官方安装文档:https://github.com/ArduPilot/pymavlink
Pymavlink 通过 Python 语言实现 MAVLink 协议,可用于实现 python 脚本进行飞控通信控制等功能
MicoAir3.5'视觉版 飞行平台已安装 pymavlink,支持扩展 Python 应用
创建 python 软连接
sudo ln -s /usr/bin/python3 /usr/bin/python
安装 python pip
sudo apt-get install -y python3-pip
使用 pip 安装依赖库
sudo python -m pip install --upgrade future lxml
使用 pip 安装 pymavlink
sudo python -m pip install --upgrade pymavlink
在 MobaXterm 上打开四个终端,连接到树莓派,分别在四个终端中测试不同节点
T265 节点
roslaunch realsense2_camera rs_t265.launch
mavros 节点
Ardupilot 固件
roslaunch mavros apm.launch
PX4 固件
roslaunch mavros px4.launch
vision_to_mavros 节点
roslaunch vision_to_mavros t265_tf_to_mavros.launch
查看数据及状态
位置与方向数据
rostopic echo /mavros/vision_pose/pose
数据帧频率
rostopic hz /mavros/vision_pose/pose
飞控连接状态
rostopic echo /mavros/state
一次启动所有节点
Ardupilot 固件
t265_all_nodes.launch 脚本可同时启动 T265, mavros, vision_to_mavros 节点,默认启动 mavros 节点为 apm.launch
确认 t265_all_nodes.launch 脚本 mavros 节点为 apm.launch
vim vision_ws/src/vision_to_mavros/launch/t265_all_nodes.launch
启动 t265_all_nodes.launch 脚本
roslaunch vision_to_mavros t265_all_nodes.launch
PX4 固件
t265_all_nodes.launch 脚本可同时启动 T265, mavros, vision_to_mavros 节点,默认启动 mavros 节点为 apm.launch
修改 t265_all_nodes.launch 脚本 mavros 节点为 px4.launch
vim vision_ws/src/vision_to_mavros/launch/t265_all_nodes.launch
启动 t265_all_nodes.launch 脚本
roslaunch vision_to_mavros t265_all_nodes.launch
通过 rviz 机器人可视化工具,可以实时监测无人机飞行姿态与轨迹等
启动 T265,mavros,vision_to_mavros 节点
roslaunch vision_to_mavros t265_all_nodes.launch
在 rviz 中查看姿态与轨迹
启动 rviz (此时 rviz 运行于树莓派上,并通过 SSH 连接将软件界面传回,并非运行于本地电脑,所以操作灵敏度不高)
rosrun rviz rviz
将 Fixed Frame 设置为 camera_odom_frame,添加想要查看的数据,常见有 Axes Path Pose 等
在添加的 Axes 中,将 Reference Frame 设置为 camera_odom_frame,Length 及 Radius 可根据空间场景设置大小
在添加的 Pose 中,将 Topic 设置为 /mavros/vision_pose/pose,Queue Size 设置为 1,Shape 设置为 Axes,Axes Length 及 Axes Radius 可根据机架大小设置
在添加的 Path 中,将 Topic 设置为 /body_frame/path,Queue Size 设置为 1
移动无人机或控制飞行过程中,rviz 将会实时显示无人机姿态和轨迹
树莓派4B+T265 机载电脑环境配置完成,后续内容请参考微空科技无人机视觉导航教程系列《镜像迁移使用篇》