当前位置: 首页 > news >正文

(11)用于无GPS导航的制图师SLAM(二)

文章目录

前言

7 构建软件包

8 开始制图

9 配置 ArduPilot

10 测试

11 视频


前言

本页展示了如何使用 RPLidarA2 激光雷达(RPLidarA2 lidar)设置 ROS 和 Google Cartographer SLAM,为 ArduPilot 提供本地位置估计,使其可以在没有 GPS 的情况下运行。

这些说明在使用 APSync 更新的 NVidia TX2 上进行了测试,然后按照此处所述安装(installed as described here)了 ROS 和 MAVROS。

Note

这些页面正在制作中。


7 构建软件包

cd $HOME/catkin_ws

catkin build

source devel/setup.bash

8 开始制图

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

cd catkin_ws

source devel/setup.bash

然后在终端1:

roscore

在终端2:

roslaunch rplidar_ros rplidar.launch

在终端3:

roslaunch cartographer_ros cartographer.launch

在终端4:

按照“连接 ROS”页面( Connecting with ROS page)上的说明启动 mavros,其中包括运行类似下面的命令:

roslaunch mavros apm.launch fcu_url:=udp://:14855@

9 配置 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,将位置垂直源设置为 Baro;
  • EK3_SRC1_VELXY = 6,将速度水平源设置为 ExternalNAV;
  • EK3_SRC1_VELZ = 6,将垂直速度源设置为 ExternalNAV;
  • EK3_SRC1_YAW = 6,用于将偏航源设置为 ExternalNAV;
  • GPS1_TYPE  = 0,禁用 GPS;
  • VISO_TYPE = 1,用于启用目视里程计;
  • ARMING_CHECK = 388598(可选,用于禁用 GPS 检查)。

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

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

EKF2 IMU1 initial pos NED = 0.0,0.0,0.0 (m)

EKF2 IMU1 is using external nav data

EKF2 IMU0 initial pos NED = 0.0,0.0,0.0 (m)

EKF2 IMU0 is using external nav data

使用任务计划器(或类似工具)进入“飞行数据”屏幕,然后用鼠标右键单击地图,选择 “在此设置原点”>>“设置 EKF 原点”。飞行器应立即出现在你点击的地图上。

10 测试

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

rostopic echo /robot_pose

任务规划器的 MAVLink 检查器(按 Ctrl-F,然后按“MAVLink 检查器”按钮)可用于检查 VISION_POSITION_ESTIMATE 信息是否成功发送至飞行控制器。

11 视频

Note

我们非常希望改进 ArduPilot 对 ROS 的支持,因此如果您发现问题(例如似乎不支持的命令),请在 ArduPilot 问题列表(ArduPilot issues list)中报告,并在标题中注明“ROS”,我们将尝试尽快解决这些问题。

http://www.xdnf.cn/news/1443241.html

相关文章:

  • AI产品经理面试宝典第84天:RAG系统架构设计与优化策略面试指南
  • C#工作流示例(WorkflowCore)
  • 基于Docker和Kubernetes的CI/CD流水线架构设计与优化实践
  • Go语言实战案例-Redis实现用户登录次数限制
  • 基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)
  • 02-Media-3-audio.py 音频输入输出,录音、播放、实时回放演示
  • 在 Android MVVM 架构中,获取 ViewModel 的几种方式
  • 微服务的编程测评系统20-虚拟机-nginx-部署
  • 基于Java的瑜伽馆管理系统的设计与实现(代码+数据库+LW)
  • 【LeetCode】21、合并两个有序链表
  • 【设计模式】 装饰模式
  • 【机器学习深度学习】RAG边界处理策略
  • Django REST Framework Serializer 进阶教程
  • word删除指定页面
  • Ubuntu22.04中使用cmake安装abseil-cpp库
  • 【数据分享】283个地级市产业结构合理化水平和产业结构高级化指数(2006-2019)
  • Upload-Labs靶场全20关通关攻略(含原理+实操+环境配置)
  • 利用 Python 绘制环形热力图
  • SuperMap GIS基础产品FAQ集锦(20250819)
  • HTML应用指南:利用POST请求获取全国九号电动车体验店服务店位置信息
  • MyBatis 常见错误与解决方案:从坑中爬出的实战指南
  • 时序数据库选型指南:Apache IoTDB快速部署与实战应用
  • powershell实现,user权限下给软件提取。
  • 数学家破解世界难题——拒绝领奖拒绝百万奖金
  • AV-NeRF、AV-GS、AV-Surf论文解读
  • 基于数据挖掘的当代不孕症医案证治规律研究
  • C# Activator.GetObject 原理与示例:理解.NET Remoting远程调用
  • AI 时代零售数据底座怎么建?首份《零售一体化云数据库白皮书》发布
  • 强化微调:以Swift框架进行GRPO多模态模型强化微调为例
  • 【明道云】[工作表控件5] 手机控件的格式化处理