用于非 GPS 导航的Cartographer SLAM

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

这些指令在一台 NVidia TX2 闪烁着 APSync 然后是 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 灯"

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

苏都 篡改 -a -G 拨出

安装更多软件包

  • 完整安装 ROS 桌面:

苏都 适切-获取 安装 玫瑰-<;发行版>-桌面
  • 或安装这些单独的软件包(此列表尚不完整):

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

创建柔荑工作空间

在你的主目录中:

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

安装 RPLidar 节点

在工作区安装 RPLidar 节点

cd $HOME/catkin_ws/src git clone https://github.com/Slamtec/rplidar_ros.git

安装 Google Cartographer

安装更多软件包

苏都 适切-获取 安装 蟒蛇-wstool 蟒蛇-rosdep 忍者-构建

用以下命令重新初始化工作区 wstool 然后合并 cartographer_ros.rosinstall 文件并获取依赖项代码。

cd $HOME/catkin_ws wstool init src wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src

安装 proto3 和 deb 依赖项

src/cartographer/scripts/install_proto3.sh sudo rosdep init # 如果出现文件已存在的错误信息,请忽略并继续 rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

克隆 机器人姿势发布者 软件包到工作区

cd $HOME/catkin_ws/src git clone https://github.com/GT-RAIL/robot_pose_publisher.git

使用你喜欢的编辑器(如 "gedit")创建 cartographer_ros 启动文件

cd $HOME/catkin_ws/src/cartographer_ros/cartographer_ros/launch gedit cartographer.launch

将以下内容复制粘贴到文件中

<;启动>;
   <;停止 名字="/use_sim_time"; 价值="false"; />;
   <;网站 名字="cartographer_node";
         ="cartographer_ros";
         类型="cartographer_node";
         参数="-configuration_directory$(find cartographer_ros)/configuration_files-configuration_basename cartographer.lua";
         产量="屏幕";>;
         <;重映射 ="奥多姆"; ="/mavros/local_position/odom"; />;
         <;重映射 ="imu"; ="/mavros/imu/data"; />;
   </网站>;
   <;网站 名字="cartographer_occupancy_grid_node";
         ="cartographer_ros";
         类型="cartographer_occupancy_grid_node"; />;
   <;网站 名字="robot_pose_publisher";
         ="robot_pose_publisher";
         类型="robot_pose_publisher";
         重生="false";
         产量="屏幕"; >;
         <;停止 名字="is_stamped"; 类型="bool"; 价值="true";/>;
         <;重映射 ="robot_pose"; ="/mavros/vision_pose/pose"; />;
   </网站>;
   <;网站 ="tf"; 类型="static_transform_publisher"; 名字="base_too_laser_broadcaster"; 参数="0 0 0 0 0 base_link laser 100"; />;
</启动>;

使用我们喜欢的编辑器(如 "gedit")创建 cartographer.lua 脚本

cd $HOME/catkin_ws/src/cartographer_ros/cartographer_ros/configuration_files gedit cartographer.lua

将以下内容复制粘贴到文件中

包括 "map_builder.lua";
包括 "trajectory_builder.lua";

选项 = {
  地图生成器 = 地图建造者,
  轨迹生成器 = 轨迹生成器,
  map_frame = 地图,
  跟踪帧 = "base_link";,
  出版框架 = "base_link";,
  odom_frame = "奥多姆";,
  提供odom_frame = ,
  发布投影到 2D 的框架 = 错误,
  使用几何 = 错误,
  使用导航卫星 = 错误,
  使用地标 = 错误,
  激光扫描次数 = 1,
  多回波激光扫描次数 = 0,
  每次激光扫描的分划数 = 1,
  云点数量 = 0,
  查找转换超时秒数 = 0.2,
  subap_publish_period_sec = 0.3,
  pose_publish_period_sec = 5e-3,
  轨迹发布周期 = 30e-3,
  测距仪采样率 = 1.,
  采样率 = 1.,
  固定取景比例 = 1.,
  imu_sampling_ratio = 1.,
  地标采样率 = 1.,
}

地图建造者.使用轨迹生成器 2D = 

轨迹生成器_2d.最小范围 = 0.05
轨迹生成器_2d.max_range = 30
轨迹生成器_2d.缺失数据射线长度 = 8.5
轨迹生成器_2d.使用 imu_data = 错误
轨迹生成器_2d.ceres_scan_matcher.翻译重量 = 0.2
轨迹生成器_2d.ceres_scan_matcher.旋转重量 = 5
轨迹生成器_2d.使用在线相关扫描匹配功能 = 
轨迹生成器_2d.实时相关扫描捕获器.线性搜索窗口 = 0.1
轨迹生成器_2d.实时相关扫描捕获器.翻译三角成本权重 = 1.
轨迹生成器_2d.实时相关扫描捕获器.旋转三角成本权重 = 10
轨迹生成器_2d.运动过滤器.最大弧度 = 算术.辐射(0.2)
-- 对于 当前 激光雷达 只是 1   价值
轨迹生成器_2d.累计范围数据数 = 1

轨迹生成器_2d.min_z = -0.5
轨迹生成器_2d.max_z = 0.5

姿势图.约束生成器.最小得分 = 0.65
姿势图.约束生成器.global_localization_min_score = 0.65
姿势图.优化问题.刻度 = 1e2
姿势图.优化每 n 个节点 = 30

返回 选项

备注

与其手动修改上述软件包,不如克隆 版本库并安装依赖项。

构建软件包

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

开始制图

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

CD catkin_ws
消息来源 devel/setup.bash

然后在终端1

玫瑰核

在航站楼2:

玫瑰发射 rplidar_ros rplidar.launch

在航站楼3:

玫瑰发射 制图师 制图师启动

在航站楼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 原点"。飞行器应立即出现在您点击的地图上。

测试

要确认 ROS 端工作正常,请键入以下命令,制图师提供的位置估计实时更新信息就会显示出来

游标 回响 /机器人姿势
../_images/ros-cartographer-testing.png

Mission Planner地面站的 MAVLink 检查器(按 Ctrl-F,然后按 "MAVLink 检查器 "按钮)可用于检查 VISION_POSITION_ESTIMATE 信息是否成功发送至飞行控制器

./_images/ros-cartographer-testing-mavlink-inspector.png

视频

备注

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