跳转至

算法管理

SimOne 协作版采用客户端与云端独立分离的算法管理机制,规则如下:

  • 本地客户端添加的算法:仅支持在客户端本地环境中运行任务使用,其他客户端或云端无法直接调用;
  • 云端添加的算法:仅支持在云端环境中运行任务使用,本地客户端无法直接调用;

本教程只涉及SimOne软件操作界面的 算法管理 部分,算法对接使用具体内容参考 开发者手册 中的 C++算法接入

如果涉及 Simulink、Carmaker、CarSim、TruckSim 等联合仿真内容,请参考 MIL模型在环测试

1. 如何添加算法

算法在本地打包为可执行程序后可接入 SimOne,可支持 .exe / .zip /Docker 镜像包 格式文件。

SimOne 协作版 本地客户端云客户端 导入算法的操作不同。

  • 本地客户端 面向算法研发人员进行本地算法调试使用,需要准备.exe 格式算法的执行脚本
  • 云端 面向云端大规模并发测试使用,支持 exe 程序包、Docker 镜像 两种接入方式。

A、exe 程序包:需要上传包含.exe 格式算法以及库依赖文件等的.zip 文件

B、Docker 镜像:需要准备算法镜像包 以及 对应镜像仓库地址。


1.1 添加本地端算法

(1)在左侧导航栏打开 算法管理 界面,点击左上角的 新建算法 ,出现弹窗。

(2)选择算法接入方式:本地脚本、驾驶模拟器、SimOneDriver 控制、API 算法、simulink 算法

(3)本地脚本方式:输入算法名称算法版本启动脚本和结束脚本的文件路径。点击脚本文件路径旁的 测试 ,如果没有报错,则为有效路径,再点击 创建

如果点击 测试 后,文件下方出现红色小字 “文件不存在,请检查”,则说明在该路径上找不到此文件,需要重新填写。

(4)驾驶模拟器、SimOneDriver 控制、API 算法、simulink 算法等方式:输入算法名称。点击 创建 即可创建一个新的算法。


1.2 添加云端算法

1.2.1 云端--程序包

云端支持两种上传算法.zip 文件的方式: 编译型解释型

  • 编译型 上传的.zip 文件中需要包括.exe 格式算法,和 SimOneAPI.dll、HDMapModule.dll、SSD.dll 三个库依赖文件
  • 解释型 上传的.zip 文件中需要包括.exe 格式算法、算法的启动和结束脚本和 SimOneAPI.dll、HDMapModule.dll、SSD.dll 三个库依赖文件

(1)在左侧导航栏打开 算法管理 界面,点击左上角的 新建算法 ,出现弹窗。

(2)选择算法接入方式:程序包

(3)点击 浏览 或将 .zip 文件拖入上传区域。

(4)填写 算法名称算法版本

(5)选择 运行环境 (Windows 系统或 Linux 系统)。

(6)选择 语言类型解释型 上传的文件中包含算法的执行脚本,编译型 则不包含。用户按需选择即可。

(7)填写 程序运行入口解释型 填写 .exe 算法文件的名称及后缀,编译型 填写执行脚本文件名称及后缀。

(8)点击 创建 ,可以看到添加的算法出现在算法列表中。

1.2.2 云端--Docker 镜像

(1)在左侧导航栏打开 算法管理 界面,点击左上角的 新建算法 ,出现弹窗。

(2)选择算法接入方式:Docker 镜像

(3)填写 算法名称算法版本

(4)选择 运行模板:当前内置运行模板约定了 Docker 镜像中相关基础配置信息。正式项目需要客户与运维人员进行对接适配调整。

(5)填写 docker 镜像地址:针对用户算法打包生成 docker 镜像包,填写其对应的镜像管理平台 tag 地址,如:images.5lvr.local:5000/gwm/algo/driving:202504080022_20。(镜像仓库由用户自己提供并管理。需提供镜像仓库可访问账号信息,由运维人员统一配置在 SimOne 后台系统中)

(6)点击 创建 ,可以看到添加的算法出现在算法列表中。

1.2.2.1 Docker 镜像算法制作要求

0. 安装系统依赖

  • dumb-init
  • curl

1. 内置准备脚本(prepareAll.sh)

案例启动前会被调用,可以做一些准备工作,比如启动 roscore,脚本在准备工作完成后退出,架构等待脚本退出后开始启动案例。

#!/bin/bash

...

2. 内置启动脚本(startAll.sh)

案例启动时会被调用,可以初始化运行环境,启动算法需要的一个或者多个进程,并且会随着案例结束(通过 SimOneAPI 感知)而退出,例子如下:

#!/bin/bash
#以下两行环境变量定义必须照抄
export SIMONE_SERVER_ADDR=$SIMONE_BRIDGE_IO_ADDR
export SIMONE_SERVER_PORT=$SIMONE_BRIDGE_IO_PORT

#以下是算法相关的启动,脚本最后需要阻塞在对接SimOneAPI的进程上,并且该进程的实现必须在接收到SimOneAPI案例结束的信号时退出进程
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/AEB
cd /tmp
/AEB/AEB

#如果需要使用streaming api,需要把UDP的端口设置成环境变量SIMONE_STREAMING_API_PORT对应的值,IP设置成0.0.0.0

3. 内置结束脚本(killAll.sh)

案例结束会被调用,可以强制清理所有算法相关的进程和资源文件,避免影响下次运行,例子如下:

#!/bin/bash
#清理所有的数据和进程,保持一个干净的环境为下次运行做准备
pkill -9 AEB

注意:

(1)三个脚本必须带可执行权限,可以是空实现,开头必须指定默认 shell 解析器。

(2)脚本的路径可以用户自己定义,在对接时进行适配。

2. 算法更新

2.1 本地端

算法管理 界面,选中一个算法,点击 鼠标右键,可查看算法右键功能,选择 编辑或参数设置 即可编辑修改算法对应的相关参数设置内容。

针对不同的算法对接方式,其编辑/参数设置界面展示的内容存在一些差异:

2.1.1 本地脚本算法

2.1.2 驾驶模拟器算法

2.1.3 SimOneDriver 算法

2.1.4 API 算法

2.2 云端_算法版本管理

在云端算法管理中,面向不同的算法接入方式,支持不同的能力:

  • 针对 exe 程序包Docker 镜像的算法接入方式,支持 算法版本管理,用户可选择算法,点击 鼠标右键,选择 添加版本 为算法新增一个版本。

img * 针对 SimOneDriver 控制 的算法接入方式不支持算法版本管理,用户可选择算法,点击 鼠标右键 ,选择 参数设置** 调整算法的相关参数信息。

2.2.1 exe 程序包算法

添加算法版本时,在算法编辑界面中,针对接入方式、运行环境、语言类型不允许用户修改。

2.2.2 Docker 镜像算法

添加算法版本时,在算法编辑界面中,针对接入方式、运行模板不允许用户修改。

2.2.3 SimOneDriver 算法

针对 SimOneDriver 控制 的算法接入方式,不支持算法版本管理,仅支持 算法控制参数设置