跳转至

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.batgen_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 目录下生成可执行文件

  • 运行示例程序 ,查看运行结果