用于非 GPS 导航的 ROS 和 VIO 跟踪摄像头

本维基页面介绍了 VIO 跟踪摄像机英特尔 RealSense T265 可与 ROS 配合使用,为非 GPS 飞行提供便利。

备注

为简洁起见,对系统某些部分的解释将尽量简短。更深入的讨论可参见以下博文 第一部分, 第二部分, 第三部分.

视频

硬件要求

备注

这取决于您对 T265 的需求,配套电脑应配备 USB2 (姿势 或 USB3 (姿势 + 图像 数据)。对于定位和导航,我们只需要捕捉姿态数据,因此 RPi 3B 就足以完成任务。

系统概述

./_images/ros-vio-connection.png

真-罗斯 节点将由 对马夫罗斯的憧憬 节点,并发送至 马夫罗斯 节点通过主题 /mavros/vision_pose/pose. 马夫罗斯 将负责 ENU - NED 帧转换,并通过 MAVLink 发送给 ArduPilot。

安装 librealsense

备注

Realsense T265 通过以下方式提供支持 librealsense 在 Windows 和 Linux 上运行。不同系统的安装过程大不相同。请参考 官方 Github 页面 有关特定系统的说明,如 杰特森, Odroid, Windows操作系统, Raspbian.

以下步骤适用于 Ubuntu Linux。由于 RPi 没有 Debian 软件包、 librealsense 必须从源代码构建。

  • 安装操作系统 (如果您还没有这样做): Ubuntu MATE 16.04 LTS.

  • 增加交换容量:RPi 没有足够的内存来编译 SDK,因此需要增加交换容量。交换大小为 2048(2GB)似乎效果不错,但也可以少一些。

# 关闭交换
苏都 dphys-swapfile 掉期

# 编辑配置文件
苏都 纳米 /etc/dphys-swapfile

# 查找并编辑变量 CONF_SWAPSIZE=2048

# 重新开启交换功能
苏都 dphys-swapfile 黑匣子

# 重新启动树莓
苏都 重新启动

# 重启后,检查交换大小是否发生变化
免费的

# 应该显示类似 Swap: 2097148 的内容
  • 克隆 librealsense 软件源并编译 SDK

# 更新系统
苏都 适切 更新 sudo 适切 升级 -y

# 安装依赖项
苏都 适切 安装 git libssl-dev libusb-1.0-0-dev pkg-config -y sudo 适切 安装 cmake python3-dev raspberrypi-kernel-headers -y

# 克隆你选择目录下的版本库
CD ~ git 复制 https://github.com/IntelRealSense/librealsense.git
CD librealsense

# 安装 udev 规则
苏都 cp config/99-realsense-libusb.rules /etc/udev/rules.d/ sudo udevadm 控制权 --重载规则 &&; udevadm 触发器

# 创建目标目录
mkdir 构建
CD 构建

# 如果不是第一次运行,请删除多余的文件
xarg 苏都 rm <; install_manifest.txt rm CMakeCache.txt
出口 CC=/usr/bin/gcc-6
出口 CXX=/usr/bin/g++-6 cmake -D cmake_build_type="发布";\
-D FORCE_LIBUVC=关于 \
-D build_python_bindings=关于 \
-D 构建示例=关于 ... -j4 sudo 生产 安装 ldconfig

# 最后,重启 pi:
苏都 重新启动
  • 测试 librealsense 安装是否正确:最简单的方法是插入 T265,然后使用 例子工具 包含在 SDK 中。

    • 如果插有显示器,可以打开 英特尔 Realsense 查看器 在终端中输入 真实观众.如果已连接 T265,设备将显示在左侧面板上。点击滑块启动设备并切换到 3D 视图。左右移动 T265,就可以看到它的轨迹。

    • 如果没有连接监视器,也可以从终端启动其他演示,例如 rs-pose, rs-pose-predict, rs-capture 等等

  • 测试 pyrealsense2 python 封装程序:如果启用了构建 Python 包装 (build_python_bindings 标志),编译后的库位于联编文件夹中: ~/librealsense/build/wrappers/python.

    • 更新 飞龙之路 环境变量,将路径添加到 火光 图书馆 出口 PYTHONPATH=$PYTHONPATH:/usr/local/lib.或者,复制构建输出 (librealsense2.sopyrealsense2.so 文件,位于 ~/librealsense/build/) 旁边的脚本。

    • 英特尔提供的基本示例可在文件夹 ~/librealsense/wrappers/python/example.使用 Python3 运行。

出口 飞龙之路=$PYTHONPATH:/usr/local/lib

CD ~/librealsense/wrappers/python/example

# 你应该看到从 T265 传出的数据流。
python3 t265_example.py

备注

使用 USB2 的 RPi 3B 无法处理图像流。尝试显示鱼眼图像可能会导致应用程序崩溃。

安装 真-罗斯

  • ROS 的安装步骤很简单,你可以按照官方软件仓库中的说明进行操作 这里.

  • 启动节点: 玫瑰发射 realsense2_camera rs_t265.launch.所有传感器数据都将作为 ROS 主题发布:

/camera/odom/sample /camera/accel/sample /camera/gyro/sample /camera/fisheye1/image_raw ( 可查看 关于 RPi 3B)
/camera/fisheye2/image_raw ( 可查看 关于 RPi 3B)
  • 在另一个终端,运行 顶级 查看当前 CPU 使用情况。

备注

版本 真-罗斯 需要与 librealsense因此,每次更新 ros/lib 时,另一个也应更新。

安装 马夫罗斯

安装 对马夫罗斯的憧憬

  • 克隆并构建软件包:

# 导航到 catkin 工作区
CD ~/catkin_ws/src

# 克隆并构建 repo
git 复制 https://github.com/hoangthien94/vision_to_mavros.git
CD ... catkin_make
消息来源 ~/.bashrc

# 将源命令添加到 .bashrc 以备将来使用
# echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
  • 根据 T265 摄像机的方向修改参数:默认参数设置为 前置摄像头.在启动文件中 t265_tf_too_mavros.launch, 修改参数 摄像头, 摄像头, 偏航摄像头, gamma_world 从数值列表中选择,或根据自己的设置选择相应的数值。

备注

有一个 已知问题 的偏航角不一致 朝下 方向,并讨论了一些解决方法。截至本文撰写时,以下方法似乎可行:当摄像机开始流式传输姿势时,需要稍微倾斜(即不要完全平放)(启动 真-罗斯 或致电 librealsense的 API 来调用姿势数据。否则,世界坐标的偏航角可能会被随机初始化。

配置 ArduPilot

用地面站(即 Mission Planner)连接飞行控制器,并检查以下参数是否设置如下:

修改参数后,重新启动飞行控制器。

验证所有 ROS 节点是否正常工作

这个设置中有 3 个 ROS 节点在运行: 真-罗斯, 马夫罗斯对马夫罗斯的憧憬.分 3 个终端启动:

  • 真-罗斯 节点: 玫瑰发射 realsense2_camera rs_t265.launch.

    • 主题 /camera/odom/sample//tf 应公布为 200 赫兹。

  • 马夫罗斯 节点: 玫瑰发射 马夫罗斯 apm.launch (与 fcu_url 中的参数和其他参数 apm.launch 根据您的设置进行修改)。

    • 游标 回响 /mavros/state 应显示 FCU 已连接。

    • 游标 回响 /mavros/vision_pose/pose 未公布。

  • 对马夫罗斯的憧憬 节点: 玫瑰发射 对马夫罗斯的憧憬 t265_tf_too_mavros.launch

    • 游标 回响 /mavros/vision_pose/pose 现在应该会显示 T265 的姿势数据。

    • 游标 赫兹 /mavros/vision_pose/pose 应显示该主题的发布频率为 30Hz。

  • 要验证 ArduPilot 是否接收到 视觉位置估计 在Mission Planner地面站上:按 Ctrl+F 并单击 "Mavlink 检查器",就能看到输入的数据。

./_images/ros-vio-check-data.png
  • 一旦所有节点都能成功运行,下次就可以使用 玫瑰发射 对马夫罗斯的憧憬 t265_all_nodes.launch该项目将于

    • rs_t265.launch根据 真-罗斯无需修改。

    • apm.launch您可以根据自己的配置进行修改。

    • t265_tf_too_mavros.launch 根据 T265 的方向设置参数。

地面测试

  • 开机后,启动所有 ROS 节点。

  • 一般情况下(但并非总是如此),一旦 马夫罗斯 运行,并且 FCU 开始接收 视觉位置估计 您将看到 "GPS Glitch "和 "GPS Glitch cleared "信息,确认系统正在识别外部定位数据。

  • 现在,您需要告诉 EKF 载具在世界的哪个位置(即 设置 EKF 主页),否则传入的数据将无法融合。为此,您需要发送 MAVLink 信息 set_gps_global_origin设置起始位置.要做到这一点,有多种选择:

    • 使用Mission Planner地面站:右键单击地图上的任意一点>; 设置 首页 这里 >; 设置 EKF 起源 这里.

      ../_images/zed-set-ekf-origin.png
    • 使用代码脚本:通过 MAVLink 向 FCU 发送所需的信息。在 Python 中,您可以使用以下脚本 set_origin.py.

      • 安装 pymavlink:按照说明操作 这里.

      • 运行脚本: 玫瑰 对马夫罗斯的憧憬 set_origin.py.

  • 您会看到地图上出现一个四旋翼飞行器图标。

  • 拿起载具四处走动,检查载具的位置移动是否显示在地图上。地图上的载具轨迹应反映真实的运动轨迹,不能有太多的失真或偏移。以下是在 2 米 x 2 米的正方形中行走的示例。

./_images/ros-vio-ground-test.png

飞行测试

首次飞行: - 在稳定或高度保持状态下起飞,检查飞行器是否稳定。

  • 移动载具,观察Mission Planner地面站上的位置以及 rviz 查看跟踪是否稳定。

  • 切换到 Loiter,但随时准备在出现意外时切换回 Stabilize/Alt-Hold。

  • 否则,飞行器应能稳定悬停并保持其位置。将飞行器前后移动 2-3 米,确认刻度(在屏幕上更容易查看)。 rviz).

  • 以不同的速度移动载具(平移、旋转),随时准备切换回稳定/备用状态。

如果一切正常,下次就可以在 Loiter 模式下上膛和起飞。

提示

在切换到 "闲置 "模式之前,请务必确认位置反馈运行正常。注意环境中的工作边界,即由于缺乏功能、快速或旋转运动而可能失去跟踪功能的地方。

数据记录

  • 目视里程信息将显示在 面孔 数据闪存日志信息。

参考资料