apollo v8.0制作简易高精地图
note:(1)python文件若执行报错一般在开头加入下面几行即可解决import sys sys.path.append(/apollo) sys.path.append(/apollo/bazel-bin)(2) 运行c可执行程序前需要提前编译相关模块(3)此为高精地图模式非导航模式需要注释掉modules/common/data/global_flagfile.txt中的--use_navigation_modetrue生成顺序path.txt-path.png-smooth_path.txt-smooth_path.png-map_path.txt-base_map.bin-sim_map.txt和sim_map.bin-routing_map.txt和routing_map.bin1、创建地图文件夹mkdir modules/map/data/my_map2、提取/apollo/localizationpython3 modules/tools/map_gen/extract_path_alan.py modules/map/data/my_map/path.txt my_bag.record.00000 my_bag.record.00001extract_path_alan.py相比原代码extract_path.py多了按距离降采样每隔0.2米一个点last_x 0 last_y 0 count 0 with open(filename, w) as f: for fbag in fbags: reader RecordReader(fbag) for msg in reader.read_messages(): if msg.topic /apollo/localization/pose: localization localization_pb2.LocalizationEstimate() localization.ParseFromString(msg.message) x localization.pose.position.x y localization.pose.position.y if count 0: if ((x-last_x) * (x-last_x) (y-last_y) * (y-last_y)) 0.04: continue count count 1 last_x x last_y y f.write(str(x) , str(y) \n) print(File written to: %s % filename)path.txt格式如下537117.711868027,4345109.767280837 537117.9188373548,4345109.790459993、可视化原始轨迹python3 modules/tools/map_gen/plot_path.py modules/map/data/my_map/path.txt4、平滑轨迹去除跳变的噪点python3 modules/tools/map_gen/smooth_path_alan.py modules/map/data/my_map/path.txt modules/map/data/my_map/smooth_path.txtsmooth_path_alan.pyimport numpy as np from scipy.interpolate import splprep, splev import sys def smooth_trajectory(input_file, output_file, smoothing_factor0.5): # 1. 读取数据 data np.loadtxt(input_file, delimiter,) # 假设格式为 x,y x data[:, 0] y data[:, 1] # 2. 参数化 t (累积距离或索引) t np.arange(len(x)) # 3. 使用 B-Spline 平滑 # s 为平滑因子越大越平滑但可能偏离原始点越小越贴近原始点但保留噪点 # 对于 1.5km 数据可能需要调整 s 值例如 len(x)*smoothing_factor tck, u splprep([x, y], ut, slen(x)*smoothing_factor) # 4. 生成平滑后的点 (保持点数一致或重新采样) x_smooth, y_smooth splev(u, tck) # 5. 保存结果 smoothed_data np.column_stack((x_smooth, y_smooth)) np.savetxt(output_file, smoothed_data, delimiter,, fmt%.6f) print(fSmoothed path saved to {output_file}) if __name__ __main__: if len(sys.argv) ! 3: print(Usage: python smooth_path.py input_raw_path.txt output_smooth_path.txt) sys.exit(1) smooth_trajectory(sys.argv[1], sys.argv[2])smooth_path.txt格式如下537117.828025,4345111.747766 537118.026289,4345111.6179935、可视化平滑轨迹python3 modules/tools/map_gen/plot_path.py modules/map/data/my_map/smooth_path.txt推荐算法 滑动平均滤波 (Moving Average)简单有效适合轻微噪点。 高斯滤波 (Gaussian Filter)能更好地保留曲线特征同时去除高频噪点。 B-Spline 或 QP-Spline 拟合Apollo 内部参考线平滑使用的算法效果最好但实现较复杂。这里使用 scipy 库中的样条插值即可满足需求。 替代方案 使用 Apollo 内部的参考线平滑原理 如果你希望更贴近 Apollo 原生逻辑可以参考搜索结果中提到的 QP-Spline 或 FemPosSmooth 算法。但这些算法主要集成在 Planning 模块内部用于实时参考线生成而非离线地图构建工具。 对于离线建图外部平滑处理如 Scipy Spline map_gen_single_lane.py 是最稳定且易于实现的路径。 常见问题排查 平滑后路径偏离道路调整平滑因子 s。如果路径过于平直而丢失了弯道细节减小 s如果仍有锯齿增大 s。 坐标系不一致确保 extract_path.py 提取的是投影坐标如 UTM 或局部笛卡尔坐标而不是经纬度。经纬度直接拟合会导致严重变形。extract_path.py 通常会自动处理投影请检查其输出单位。 跳变极大如果某些点跳变幅度极大如几米甚至几十米建议在平滑前先进行离群点剔除Outlier Removal。例如计算相邻点的距离如果某段距离远超车辆物理极限如 10Hz 频率下移动超过 1 米则将该点替换为前后点的平均值或直接删除。6、生成单车道地图车道宽度设为4mpython3 modules/tools/map_gen/map_gen_single_lane.py modules/map/data/my_map/smooth_path.txt modules/map/data/my_map/map_path.txt 4map_path.txt格式如下lane { id { id: 1 } central_curve { segment { line_segment { point { x: 537117.828025 y: 4345111.747766 }7、将txt地图转为bin地图python3 modules/tools/create_map/convert_map_txt2bin.py -i modules/map/data/my_map/map_path.txt -o modules/map/data/my_map/base_map.bin8、生成sim地图用于dreamview可视化包括绿色中线和黄色边线降采样幅度大./bazel-bin/modules/map/tools/sim_map_generator --map_dir/apollo/modules/map/data/my_map/ --output_dir/apollo/modules/map/data/my_map/生成sim_map.txt和sim_map.binsim_map.txt格式如下lane { id { id: 1 } central_curve { segment { line_segment { point { x: 537117.828025 y: 4345111.747766 }在百度Apollo自动驾驶系统中sim_map.txt 和 sim_map.bin 是仿真可视化专用的轻量高精度地图文件二者内容同源、仅格式不同核心作用如下 1. 核心定位 它们是基于完整基础地图base_map降采样生成的轻量化版本通过降低数据密度大幅提升前端渲染和数据传输的运行性能。 2. 具体用途 支撑Dreamview可视化专门为Apollo的Dreamview监控界面设计用于快速渲染显示车道线、道路轮廓等核心地图元素避免加载全量高精度地图导致界面卡顿。 适配仿真场景为仿真模块提供精简的地图环境数据满足仿真测试时的基础道路拓扑展示需求降低仿真进程的资源占用。 3. 格式差异 sim_map.bin是Protobuf序列化后的二进制格式程序读取速度更快是系统默认优先加载的格式。 sim_map.txt是文本化的Protobuf格式方便开发者直接打开查看、调试地图内容可读性更强。 你可以通过Apollo内置的sim_map_generator工具基于已生成的base_map一键生成这两个文件。9、生成routing地图用于routing模块对应dreamview中起止点间的红色参考线运行前需要修改modules/common/data/global_flagfile.txt中的map_dir变量 (--map_dir/apollo/modules/map/data/my_map)./bazel-bin/modules/routing/topo_creator/topo_creator --flagfilemodules/routing/conf/routing.conf以下报错不用管Conf file: /apollo/modules/routing/conf/routing_config.pb.txt is loaded. E0719 22:52:19.262758 31718 hdmap_util.cc:39] [map]No existing file found in /apollo/modules/map/data/my_map/routing_map.bin|routing_map.txt. Fallback to first candidate as default result. Create routing topo successfully from /apollo/modules/map/data/my_map/base_map.bin to /apollo/modules/map/data/my_map/routing_map.bin生成routing_map.txt和routing_map.binrouting_map.txt格式如下hdmap_version: hdmap_district: node { lane_id: 1 length: 100 left_out { start { s: 0 } end { s: 100 } } right_out { start { s: 0 } end { s: 100 } } cost: 45.645372164108814 central_curve { segment { line_segment { point { x: 537117.828025 y: 4345111.747766 }10、启动dreamviewbash scripts/bootstrap.sh启动成功后在浏览器访问http://localhost:8888打开界面。打开Tasks中的Sim Control打开Module Controller中的Routing, Planning打开Route Editing点击Add Point of Interest点击一下测试起点再点击一下测试终点点击Send Routing Request车就沿规划轨迹动起来到终点停止在 Apollo 自动驾驶平台中SimControl仿真控制 是 Dreamview 提供的一种核心仿真模式。它的主要作用是模拟车辆的底盘Chassis、定位Localization和感知Perception数据输入从而让开发者在没有真实车辆硬件的情况下单独测试和调试规划Planning与控制Control算法。 在真实的自动驾驶闭环中流程是 Planning - Control - Chassis。 但在 Sim Control 模式下 未启动 Control 时流程变为 Planning - Sim Control (直接更新位姿)。此时车辆只是“被动”地沿着规划好的几何路径滑动不考虑车辆动力学约束如最大加速度、轮胎滑移等也不执行真正的 PID 或 MPC 控制算法。 启动 Control 时流程变为 Planning - Control - Sim Control。Control 模块接收 Planning 的轨迹计算出具体的控制指令油门、刹车、转向然后将这些指令发送给 Sim Control。Sim Control 会根据这些指令结合内部的动力学模型如 MKZ Model来计算车辆的下一时刻状态。此时车辆的运动更符合真实物理特性。