V2X 示例¶
V2XADAS¶
注意
示例目录:[SimOne 安装目录]\SimOneAPI\Tutorial\V2X\V2XADAS
算法构思
国标中有五种消息 BSM、RSI、RSM、SPAT、MAP 。
| 缩写 | 全称 | 类型 | 描述 | 应用场景 |
|---|---|---|---|---|
| BSM | Basic Safety Message | V2V | 包含车辆的基础信息,如速度、方向、刹车状态等。 | 变道预警、盲区预警、交叉路口碰撞预警等 |
| RSI | Road Side Information | V2I | 路侧信息,用于警示即将到来的事件或路况。 | 道路施工、限速提示、超速预警、公交车道预警等 |
| RSM | Road Safety Message | V2I | 路侧的安全相关消息,由边缘设备提供。 | 事件检测警示,如事故、车辆异常、异物侵入等 |
| SPAT | Signal Phase and Timing | V2I | 交通灯的相位与时序信息。 | 车速引导、绿波带导航等 |
| MAP | MAP Message | V2I | 提供路口地图描述及与交通灯的关系。 | 辅助 SPAT 消息,提供路口导航与交通灯相位引导 |
SimOne 仿真 V2X 传感器节点综合仿真系统内部的感知、交通流,路侧设备以及路网等数据,按照国标 V2X 数据格式转换为相应类型的消息,通过 SimOne V2X API 输出给使用了 V2X 消息的 Adas 算法来做训练。
算法流程图
V2X API¶
-
【SimOne-安装位置】/SimOne/SimOneAPI/include/SimOneV2XAPI.h
-
示例伪代码:
// 主车Id
const char* mv_id = "0";
// 是否加入帧同步
bool isJoinTimeLoop = false;
// BridgeIO 服务 Ip
const char* serverIP = "127.0.0.1";
// 初始化 SimOneAPI
InitSimOneAPI("0", isJoinTimeLoop, serverIP);
// 回调方式获取真值数据
if (IsCallBackMode) {
auto function = [](const char* mainVehicleId, const char* sensorId, SimOne_Data_V2XNFS *pDetections) {
std::cout << "sensorId:" << sensorId << std::endl;
std::cout <<" SetV2XInfoUpdateCB strlen= " << pDetections->V2XMsgFrameSize << std::endl;
std::cout << "MsgFrameData: " << pDetections->MsgFrameData << std::endl;
};
// 获得对应车辆编号V2X中的UPER编码之后的v2x消息更新回调
SetV2XInfoUpdateCB(function);
}
else {
std::unique_ptr<SimOne_Data_V2XNFS> pDetections = std::make_unique<SimOne_Data_V2XNFS>();
while (true)
{
// 获得对应车辆编号V2X中的UPER编码之后的v2x消息
if (GetV2XInfo(mv_id, "obu1" /*V2X Sensor ID*/, ESimOne_V2X_MessageFrame_PR::ESimOne_V2X_MessageFrame_PR_rsiFrame /* V2X 消息类型 */, pDetections.get()))
{
std::cout << "GetV2XInfo strlen = " << strlen(pDetections->MsgFrameData) << std::endl;
std::cout << "MsgFrameData: " << pDetections->MsgFrameData << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(20));
}
else {
std::cout << "GetV2XInfo Fail" << std::endl;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
编译环境
CMakeList.txt 支持生成 windows / ubuntu 的项目工程。
- V2X 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
└── V2X
└── V2XADAS
bin:目标生成目录
Build: 编译目录
HDMap: HDMap API 示例源码目录
编译:
CMakeList.txt 支持生成 windows / ubuntu 的项目工程
-
Windows:
-
进入 Build 目录,运行
gen_vs_proj_debug.bat或gen_vs_proj_release.bat生成 Visual Studio 工程 -
打开 Visual Studio 示例工程, 选择 V2X 工程编译
-
Linux:
-
cd Build -
./gen_make_debug.sh(或./gen_make_release.sh) -
cd build_debug(或cd build_release) -
make -j4
使用流程
-
API 测试:
-
启动 SimOne,新建测试用例(用例交通参与者设置 OBU)
-
新建测试主车(启用 OBU 配置控制系统为 手动 / API 控制)
-
运行用例(选择主车为该主车)
-
编译测试代码,bin 目录下生成可执行文件
-
运行示例程序 ,查看运行结果
