用于非 GPS 导航的 ROS 和 Hector SLAM¶
本页介绍如何设置 ROS 和 赫克托 SLAM 使用 RPLidarA2 激光雷达 为 ArduPilot 提供本地位置估计,使其可以在没有 GPS 的情况下运行。
这些指令在一台 NVidia TX2 闪烁着 APSync 然后是 ROS 和 MAVROS 按此处所述安装.
它们还在一个 RaspberryPi 3 B+ 已安装 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 灯"
根据上面找到的串行端口,任何人只需输入以下两条命令中的一条,即可读取设备信息
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)连接飞行控制器,并检查以下参数是否设置如下:
AHRS_EKF_TYPE = 2(默认值)以使用 EKF2(在编写本页时,EKF3 尚不支持外部位置估计)。
EK2_ENABLE = 1(默认值)
EK3_ENABLE = 0(默认值)
GPS1_TYPE = 0 关闭 GPS
EK2_GPS_TYPE = 3 禁用 EKF 对 GPS 的使用
COMPASS_ENABLE = 0, COMPASS_USE = 0, COMPASS_USE2 = 0, COMPASS_USE3 = 0 表示禁用 EKF 使用罗盘,转而依赖 ROS 和 Hector SLAM 提供的航向。
更改上述任何数值后,重新启动飞行控制器。
如果一切正常,视觉位置估计值应开始从 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 问题列表 我们会尽快解决。