用于非 GPS 导航的Cartographer SLAM¶
本页介绍如何设置 ROS 和 谷歌制图师 SLAM 使用 RPLidarA2 激光雷达 为 ArduPilot 提供本地位置估计,使其可以在没有 GPS 的情况下运行。
这些指令在一台 NVidia TX2 闪烁着 APSync 然后是 ROS 和 MAVROS 按此处所述安装.
备注
这些页面正在制作中
安装 RPLidar 和 Pixhawk¶
应调整 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)连接飞行控制器,并检查以下参数是否设置如下:
AHRS_EKF_TYPE = 3 使用 EKF3
EK2_ENABLE = 0 则禁用 EKF2
EK3_ENABLE = 1 时启用 EKF3
EK3_SRC1_POSXY = 6 将位置水平源设置为 ExternalNAV
EK3_SRC1_POSZ = 1,将位置垂直源设置为巴罗
EK3_SRC1_VELXY = 6,将速度水平源设置为 ExternalNAV
EK3_SRC1_VELZ = 6,将垂直速度源设置为 ExternalNAV
EK3_SRC1_YAW = 6,将偏航源设置为 ExternalNAV
GPS1_TYPE = 0 关闭 GPS
VISO_TYPE = 1,启用视觉里程计
上膛检查 = 388598(可选,用于禁用 GPS 检查)
更改上述任何数值后,重新启动飞行控制器。
如果一切正常,视觉位置估计值应开始从 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 端工作正常,请键入以下命令,制图师提供的位置估计实时更新信息就会显示出来
游标 回响 /机器人姿势
Mission Planner地面站的 MAVLink 检查器(按 Ctrl-F,然后按 "MAVLink 检查器 "按钮)可用于检查 VISION_POSITION_ESTIMATE 信息是否成功发送至飞行控制器
视频¶
备注
我们致力于改进 ArduPilot 对 ROS 的支持,因此如果您发现问题(例如似乎不支持的命令),请在 ArduPilot 问题列表 我们会尽快解决。