news 2026/2/25 9:44:08

从零开始将高德地图(卫星图+路网)接入 RViz 与 Mapviz 的保姆级教程 (C++,python,ros,自动驾驶)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始将高德地图(卫星图+路网)接入 RViz 与 Mapviz 的保姆级教程 (C++,python,ros,自动驾驶)

ROS笔记:

前言

在机器人户外导航开发中,拥有一个直观的卫星地图背景是刚需。虽然 ROS 社区有rviz_satellitemapviz等工具,但在国内网络环境下,直接使用 Google Maps 或 Stamen 地图源往往会遇到 "Bad Gateway" 或 "Forbidden" 的问题。

本文将总结一套在ROS Noetic环境下,稳定接入高德地图(高清卫星图+中文路网标注)的完整技术路线。涵盖了在线直连离线瓦片制作(QGIS方案)以及RViz/Mapviz的详细配置避坑指南。


一、 最简单有效的方法:RViz 直连与配置

如果你只需要快速在 RViz 中看一眼地图,并且网络环境允许,使用rviz_satellite插件是最简单的方法。

1. 安装插件

首先安装适用于 ROS Noetic 的卫星图插件:

sudo apt install ros-noetic-rviz-satellite

2. 获取高德地图 URL

高德地图的 XYZ 瓦片服务非常稳定,且无需申请 Key。为了获得“卫星底图+路网标注”的效果,我们通常使用以下两个链接:

  • 卫星底图 (style=6):http://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}

  • 路网标注 (style=8):http://webst01.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}

3. RViz 配置核心参数

启动 RViz 后,点击Add->AerialMapDisplay。重点配置以下参数,否则地图不会显示:

  • Topic (关键): 必须填入你的 GPS 话题(如/fix/gps/fix)。插件需要根据 GPS 定位来决定加载哪里的地图。

  • Map URL: 填入上面的高德 URL。

  • Zoom: 设置为1819

    • 注意:高德卫星图的高清层级通常在 18-19 级,设置过小(如 0-10)可能导致加载为空白。

  • Blocks: 建议设为34,表示加载机器人周围多少块瓦片。

避坑提示rviz_satellite对本地文件路径 (file://) 的支持极其挑剔,容易报Invalid Object URI。如果你想加载离线地图到 RViz,请看下文的“本地服务器”大法。


二、 进阶方案:制作高清离线瓦片地图 (QGIS + GDAL)

为了彻底摆脱对网络的依赖(例如在无网的户外调试),我们需要将地图“下载”到本地。

1. QGIS 配置地图源

在 Ubuntu 或 Windows 上安装 QGIS,在左侧XYZ Tiles右键新建连接:

  • 名称: Amap Satellite

  • URL:http://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}

  • 同理添加style=8的路网图层,并将两者叠加。

2. 导出高清 GeoTIFF (关键步骤)

不要直接保存工程,而是使用导出为图像 (Export Map to Image)功能:

  • 范围: 选择你需要下载的区域(如大学校区)。

  • 分辨率 (Resolution):这是最高清的关键!手动将水平/垂直分辨率改为0.000005(约 0.5m/px) 或0.000002(约 0.2m/px)。

    • 检查: 确保 Output Width 在 5000-8000 像素左右。

  • 格式: 选择.tif格式,并勾选“附加地理参考信息”。

3. 瓦片切割 (gdal2tiles)

在终端中使用 GDAL 工具将巨大的 TIF 图片切割为 Mapviz/RViz 可用的瓦片。

情况 A:你的 GDAL 版本较新 (支持 --xyz)

gdal2tiles.py --xyz -z 15-19 my_map.tif output_tiles/

情况 B:你的 GDAL 版本较旧 (Ubuntu 20.04 默认情况)

旧版生成的是 TMS 格式(Y轴翻转),会导致地图上下颠倒。需要先生成 TMS,再用 Python 脚本转为 XYZ:

# 1. 生成 TMS 瓦片 gdal2tiles.py -z 15-19 my_map.tif output_temp/ # 2. 运行脚本进行翻转 (脚本逻辑:y_new = 2^z - 1 - y_old) # (此处省略具体脚本代码,核心是重命名文件)

三、 Mapviz 的使用与参数细节

Mapviz 相比 RViz,天生更适合做 2D 平面导航仪表盘,它对离线瓦片的支持更加友好。

1. 配置坐标原点 (Initialize Origin)

Mapviz 必须知道 WGS84 (经纬度) 与 ROS/map坐标系的转换关系。需要在 launch 文件中配置swri_transform_util

<node pkg="swri_transform_util" type="initialize_origin.py" name="initialize_origin"> <param name="local_xy_frame" value="/map"/> <param name="local_xy_origin" value="auto"/> </node>

2. 加载离线地图 (tile_map)

在 Mapviz 中添加tile_map插件:

  • Source: 选择Custom WMTS Source(不要选默认的 Stamen 或 Tianditu)。

  • Base URL (重点):

    Mapviz 的 URL 格式支持占位符。如果你使用的是本地路径:

    file:///home/user/map_data/{level}/{x}/{y}.png

    或者

    file:///home/user/map_data/{z}/{x}/{y}.png

    技术细节:虽然大部分工具通用{z}代表缩放等级,但在某些版本的 Mapviz 配置文件中,参数名明确写作level。如果发现加载不出图片,请尝试将 URL 中的{z}修改为{level},这往往是解决“路径正确但无图”的最后一把钥匙。

3. 在 RViz 中使用离线地图的“绝招”

前面提到 RViz 对file://支持不好。要在 RViz 中用这套离线瓦片,只需在瓦片目录下运行一行 Python 命令,开启一个微型 HTTP 服务器:

Bash

cd /path/to/output_tiles python3 -m http.server 8000

然后在 RViz 的 Map URL 中填入:

http://127.0.0.1:8000/{z}/{x}/{y}.png

这样,RViz 会以为自己在访问网络地图,从而完美加载你的离线数据!


总结

  1. 想省事:直接用rviz_satellite+ 高德在线 URL。

  2. 要素全:用 QGIS 叠加“卫星+路网”,导出高清 TIF。

  3. 兼容性:GDAL 切片时注意 XYZ 格式,旧版本需脚本翻转 Y 轴。

  4. 调试:Mapviz 中注意{z}{level}的切换;RViz 中推荐用python http.server挂载本地地图。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/20 19:24:48

基于stm32和zigbee地下停车场智能照明系统设计(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T4332310M设计简介&#xff1a;本设计是基于stm32和zigbee地下停车场智能照明系统设计&#xff0c;主要实现以下功能&#xff1a;从机通过光敏电阻检测光照…

作者头像 李华
网站建设 2026/2/24 9:09:07

超细整理,性能测试如何做?怎么做?常见面试题(汇总五)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、混合业务场景的…

作者头像 李华
网站建设 2026/2/25 7:26:49

天机学堂-优惠券功能-day09(七)

day09 接口 一 优惠券管理1.新增优惠券接口说明新增优惠券功能&#xff0c;如果优惠券有限定使用范围&#xff0c;注意保持范围数据请求方式POST请求路径/coupons请求参数{ "name" : "新年大促", // 优惠券名称 "specific" : true, // 是否…

作者头像 李华
网站建设 2026/2/22 20:23:39

10、编写和发布 Python 包的实用指南

编写和发布 Python 包的实用指南 编写和发布 Python 包的目的与结构 编写和发布 Python 包的过程具有重要的意义,其主要目的包括: - 缩短开始实际工作前的准备时间,即减少样板代码。 - 提供一种标准化的包编写方式。 - 便于采用测试驱动的开发方法。 - 简化发布过程。…

作者头像 李华
网站建设 2026/2/21 0:49:48

快速掌握的锂枝晶生长与温度场耦合模型,一触即达实用操作指南

锂枝晶温度场耦合模型到手就能用最近在研究锂枝晶的生长问题&#xff0c;发现了一个超级实用的工具——锂枝晶温度场耦合模型。这个模型不仅能模拟锂枝晶的生长过程&#xff0c;还能考虑温度场的影响&#xff0c;简直就是研究锂枝晶的“瑞士军刀”。今天就来聊聊这个模型&#…

作者头像 李华
网站建设 2026/2/23 17:15:44

刚出生就被围剿,豆包手机动了谁的蛋糕?

豆包手机作为一款创新的AI手机&#xff0c;刚刚进入市场就受到了来自各方的“围剿”与强烈反应。这款手机不仅将人工智能助手深度集成到操作系统底层&#xff0c;还在用户体验上提出了个性化、情感智能化的新概念&#xff0c;吸引了大量关注。然而&#xff0c;豆包手机的突如其…

作者头像 李华