news 2026/4/6 13:48:20

从零开始将高德地图(卫星图+路网)接入 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/4/3 4:10:30

国产期刊被EI收录!首个影响因子12分,录用率67%,国人友好~

Carbon Neutralization《碳中和》近日正式被国际权威数据库EI Compendex收录。该刊2022年创刊&#xff0c;每年出版6期&#xff0c;由温州大学与Wiley联合出版&#xff0c;集高影响因子、高录用率、对国人友好、出版速度快等优势于一身&#xff0c;具有高起点、高包容性和高亲和…

作者头像 李华
网站建设 2026/3/31 6:54:54

指纹考勤装置(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T4312305M设计简介&#xff1a;本设计是基于STM32的指纹考勤装置&#xff0c;主要实现以下功能&#xff1a;可以显示当前时间 可通过按键调整时间 可识别指…

作者头像 李华
网站建设 2026/3/27 6:09:38

华为HCIA笔记——第十五天

ACL、AAA、NAT 通过本章内容学习ACL、AAA、NAT的基本概念和原理描述等内容 ACL、AAA、NAT 一、ACL 1.1 ACL简介 1.2 ACL原理 1.3 ACL基本配置 二、AAA 2.1 AAA简介 2.2 AAA实现协议和应用场景 三、NAT 3.1 NAT简介 3.2 NAT分类 静态NAT 动态NAT NAPT Easy-ip NAT Server 一、A…

作者头像 李华