用于非 GPS 导航的 ROS 和 Hector SLAM

本页介绍如何设置 ROS 和 赫克托 SLAM 使用 RPLidarA2 激光雷达 为 ArduPilot 提供本地位置估计,使其可以在没有 GPS 的情况下运行。

这些指令在一台 NVidia TX2 闪烁着 APSync 然后是 ROS 和 MAVROS 按此处所述安装.

它们还在一个 RaspberryPi 3 B+ 已安装 ROS 和 MAVROS 按此处所述安装.

备注

这些页面正在制作中

安装 RPLidar 和 Pixhawk

../_images/ros-pixhawk-rplidara2-orientation.png

应调整 RPLidar 的方向,使其 USB 电缆线与飞行控制器上的箭头方向一致。

USB 电缆应插入运行 ROS 的配套计算机的 USB 端口。

检查 RPLidar 的串行端口

  • 将 RPLidarA2 插入配套计算机。如果使用安装在 AUVidea J120 电路板上的 TX2,请确保将激光雷达插入下方的 USB 端口。

ls -l /设计/tty*
  • 激光雷达应显示为 /dev/ttyUSB0 或 /dev/ttyACM0。

  • 如果您键入 "lsusb",该设备还应被列为 "Cygnal Integrated Products, Inc.CP210x UART 桥接器/myAVR mySmartUSB 灯"

  • 根据上面找到的串行端口,任何人只需输入以下两条命令中的一条,即可读取设备信息

sudo usermod -a -G dialout $USER

安装更多软件包

  • 完整安装 ROS 桌面:

苏都 适切-获取 安装 玫瑰-动力学-桌面-全部
  • 或安装这些单独的软件包(此列表尚不完整):

苏都 适切-获取 安装 玫瑰-动力学-tf 玫瑰-动力学-tf-转换 玫瑰-动力学-激光器-形状
苏都 适切-获取 安装 玫瑰-动力学-cv-桥牌 玫瑰-动力学-图像-运输
苏都 适切-获取 安装 qt4-qmake qt4-设计-工具
苏都 适切-获取 安装 原语-编者

创建柔荑工作空间

在你的主目录中:

CD $HOME
mkdir -p catkin_ws/src
CD catkin_ws catkin_init_workspace

安装 RPLidar 节点和 Hector SLAM

在工作区安装 RPLidar 节点和 Hector SLAM 软件

cd $HOME/catkin_ws/src git clone https://github.com/Slamtec/rplidar_ros.git git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

使用您最喜欢的编辑器打开 Hector SLAM 的启动文件,该文件可在以下网址找到 $HOME/catkin_ws/src/hector_slam/hector_mapping/launch/mapping_default.launch 并修改 "base_frame"、"odom_frame "和注释掉的 "tf "行,使其看起来如下:

<;雅格 名字="base_frame"; 默认="base_link";/>;
<;雅格 名字="odom_frame"; 默认="base_link";/>;

<;网站 ="tf"; 类型="static_transform_publisher"; 名字="base_too_laser_broadcaster"; 参数="0 0 0 0 0 base_link laser 100"; />;

编辑赫克托-斯拉姆 hector_imu_attitude_too_tf/launch/example.launch 文件,该文件可在 $HOME/catkin_ws/src/hector_slam/hector_imu_attitude_too_tf/launch/example.launch 并将 "thumper_imu "替换为"/mavros/imu/data",使其看起来如下所示,以便从飞行控制器(通过 mavros)获取 IMU 数据:

<;重映射 ="imu_topic"; ="/mavros/imu/data"; />;

编辑 Hector SLAM 的 tutorial.launch 文件,该文件位于 $HOME/catkin_ws/src/hector_slam/hector_slam_launch/launch/tutorial.launch 并将 "use_sim_time "行改为如下所示:

<;停止 名字="/use_sim_time"; 价值="false";/>;

继续编辑 教程.启动 并添加一行新内容(就在现有 include 行的下方),以便 example.launch 包括上面修改过的文件:

<;包括 文件="$(find hector_imu_attitude_too_tf)/launch/example.launch";/>;

默认情况下,一旦启动,Hector SLAM 就会弹出一个窗口,实时显示地图。 教程.启动 文件,使其看起来如下所示:

<!--node pkg="rviz" type="rviz" name="rviz" args="-d $(查找 hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/-->;

构建软件包

CD $HOME/catkin_ws 柔荑 构建
消息来源 devel/setup.bash

启动赫克托 SLAM

将 RPLidarA2 插头插入配套电脑,然后打开四个端子,并在每个端子类型中打开:

CD catkin_ws
消息来源 devel/setup.bash

然后在终端1

玫瑰核

在航站楼2:

玫瑰发射 rplidar_ros rplidar.launch

在终端3(对于 RaspberryPi,我们建议在另一台机器上运行此程序)中解释 这里):

玫瑰发射 启动 教程.启动

在航站楼4:

按照 连接 ROS 页面 这需要运行类似下面的命令:

玫瑰发射 马夫罗斯 apm.launch fcu_url:=udp://:14855@

配置 ArduPilot

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

更改上述任何数值后,重新启动飞行控制器。

如果一切正常,视觉位置估计值应开始从 ROS 传输到 ArduPilot。使用Mission Planner地面站(或类似工具)连接到飞行控制器,检查飞行数据屏幕的 "信息 "选项卡(左下角)是否有来自 EKF 的信息,如下图所示,即可确认这一点:

EKF2 IMU1 最初 姿势 NED = 0.0,0.0,0.0 (m)
EKF2 IMU1  使用 外部 航行 数据
EKF2 IMU0 最初 姿势 NED = 0.0,0.0,0.0 (m)
EKF2 IMU0  使用 外部 航行 数据

使用Mission Planner地面站(或类似工具)进入 "飞行数据 "屏幕,用鼠标右键单击地图并选择 "在此设置原点">> "设置 EKF 原点"。飞行器应立即出现在您点击的地图上。

视频

备注

我们致力于改进 ArduPilot 对 ROS 的支持,因此如果您发现问题(例如似乎不支持的命令),请在 ArduPilot 问题列表 我们会尽快解决。