HDMap 示例¶
注意
示例目录:[SimOne 安装目录]\SimOneAPI\Tutorial\HDMap
算法构思
(1)启动仿真用例:当 SimOne 仿真用例启动时,系统会生成一个 URL 地址,并发送到 HDMap API 端。
(2)加载地图文件:HDMap API 使用接收到的 URL 地址发起 HTTP 请求,从数据平台中加载仿真用例运行时指定的.xodr地图文件。地图文件被加载到内存中以供后续使用。
(3)实时数据提供:基于主车在静态地图上的动态位置,HDMap API 实时返回关键地图数据给第三方驾驶算法,这些数据包括:地图真值数据、道路路网信息、车道及车道线类型等。
算法流程图
HDMap API¶
注意
【SimOne 安装位置】/SimOne/SimOneAPI/include/SimOneHDMapAPI.h
- 获取主车当前位置最近车道示例伪代码:
#include "SimOneServiceAPI.h"
#include "SimOneHDMapAPI.h"
#include "SimOneSensorAPI.h"
#include "SSD/SimPoint3D.h"
#include "SSD/SimString.h"
int main(int argc, char* argv[])
{
const char* mv_id = "0"; // 主车Id
bool isJoinTimeLoop = false; // 是否加入帧同步
const char* serverIP = "127.0.0.1"; // BridgeIO IP
// Step1: 初始化 SimOne API
InitSimOneAPI(mv_id, isJoinTimeLoop, serverIP);
// Step2: 加载高精度地图,地图文件由 SimOne 仿真 Web 端建立用例时指定
int timeout = 20; // HDMap加载超时时间设置,若超时函数将返回推出
if (!SimOneAPI::LoadHDMap(timeout)) // 从数据平台获取运行用例地图文件并加载到内存
{
std::cout << "LoadHDMap Failed!" << std::endl;
return 0;
}
std::unique_ptr<SimOne_Data_Gps> pGPS = std::make_unique<SimOne_Data_Gps>();
while (true)
{
// Step3: 获取主车GPS信息
if (!GetGps(0/*vehicleId*/, pGPS.get()))
{
std::cout << "Get GPS Failed!" << std::endl;
}
else
{
// 传入参数 主车当前位置(3D 点)
SSD::SimPoint3D pos(pGps->posX, pGps->posY, pGps->posZ);
// 传出参数 车道线ID,格式为 roadId_sectionIndex_laneId E.g.道路参考线右侧第一条车道表示为"1_0_-1";左侧第二条车道表示为"1_0_2"
SSD::SimString laneId;
// 传出参数 主车位置相对检出车道的s-t坐标值
double s, t;
// 传出参数 主车位置相对检出车道所在道路中心线的s-t坐标值 (模糊值),通过调用 GetRoadST API 可获取更为精确的值
double s_toCenterLine, t_toCenterLine;
// Step 4: 获取最接近输入点的车道,所属车道优先
if (!GetNearMostLane(pos, laneId, s, t, s_toCenterLine, t_toCenterLine))
{
std::cout << "Error: lane is not found." << std::endl;
}
else
{
std::cout << "lane id: " << laneId.GetString() << std::endl;;
std::cout << "s: " << s << " t: " << t << std::endl;
std::cout << "s_toCenterLine: " << s_toCenterLine << " t_toCenterLine: " << t_toCenterLine << std::endl;
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
return 0;
}
编译环境
- HDMap API Tutorial 示例工程目录结构
Tutorial
├── bin
│ ├── DynamicsTest
│ ├── HDMap
│ ├── logServer.txt
│ ├── log_taskImage.txt
│ ├── PNCSample
│ ├── SensorSample
│ └── SensorV2X
├── Build
│ ├── build_debug.bat
│ ├── build_release
│ ├── build_release.bat
│ ├── CMakeLists.txt
│ ├── gen_make_debug.sh
│ ├── gen_make_release.sh
│ ├── gen_vs_proj_debug.bat
│ ├── gen_vs_proj_release.bat
│ ├── rebuild_debug.sh
│ └── rebuild_release.sh
├── HDMap
│ ├── CMakeLists.txt
│ ├── gen_vs_proj.bat
│ ├── include
│ ├── src
bin:目标生成目录
Build: 编译目录
V2X: V2X API 示例源码目录
编译:
CMakeList.txt 支持生成 windows / ubuntu 的项目工程
-
Windows:
-
进入 Build 目录,运行
gen_vs_proj_debug.bat或gen_vs_proj_release.bat生成 Visual Studio 工程 -
打开 Visual Studio 示例工程, 选择 HDMap 工程编译
-
Linux:
-
cd Build -
./gen_make_debug.sh(或./gen_make_release.sh) -
cd build_debug(或cd build_release) -
make -j4
使用流程
-
调用相应 HDMap API API 功能支持
-
API 测试:
-
启动 SimOne,新建测试用例
-
新建测试主车(配置控制系统为 手动 / API 控制)
-
运行用例(选择主车为该主车)
-
编译测试代码,bin 目录下生成可执行文件
-
运行示例程序,查看运行结果
