标签: 线控

  • Kia Soul OSCC 档案:归一化命令与 200 ms 保活接口

    结论:这份档案的对象是一套面向 2014 年及以后 Kia Soul(汽油与纯电)的开源车辆控制项目(OSCC),它把「读取车辆状态」和「下发控制命令」拆成 API 与固件两层:固件侧用专门的模块通过转向力矩/油门位置/制动位置传感器与 OBD-II CAN 交互,API 侧用归一化数值下发命令、并通过回调接收回报。它的数据特征是命令归一化 + 200 ms 保活:制动与油门为 [0.0, 1.0]、转向为 [-1.0, 1.0],且每个发布函数必须至少每 200 ms 调用一次,否则模块判为通信丢失并自行禁用。源文档未给出比特率、寻址方式与逐字节定义,其结论仅限 2014 年起的 Kia Soul 平台。

    车辆与适用范围

    源文档是一个软硬件项目仓库的说明:它描述 API、固件与硬件三部分,以及可扩展的车型头文件机制。数据来自项目文档,不是某台实车的采集记录。

    项 内容
    车型 Kia Soul(2014 年及以后,汽油与纯电);构建目标另含 Kia Niro
    年款 / 市场版本 源文档以「Kia Soul PS(2014–2018)」指代已整理信息的平台;其他年款与市场版本未确认
    ECU / 改装状态 加装 OSCC 模块:传感器接口板(转向/油门)、整车控制模块(纯电制动)或执行器控制板(汽油制动),外加 CAN 网关
    采集跨度 源文档未提供(无日志数或事务数)
    适用范围 源文档明确「目前仅支持 2014 年起的 Kia Soul」,API 与固件按易扩展设计,但其他车型属未来扩展

    总线与寻址

    源文档把总线分成「车辆 OBD-II CAN」与「OSCC 控制 CAN」两条,固件用 CAN 网关模块在两段之间转发;但未描述物理层与标识符细节。

    项 内容
    物理层 / 比特率 源文档未给出
    总线划分 车辆 OBD-II CAN 网络(读状态、发命令、接收回报);OSCC 控制 CAN(API 与固件模块之间)
    寻址方式 源文档未给出;API 以「CAN 通道 + 标准化信号名」抽象,不暴露标识符
    CAN FD 源文档未提供
    接口形态 固件以 Arduino + 专用扩展板实现,经 USB 串口烧写与监控

    已解码信号

    下表登记源文档明确给出的接口面(命令、回报与关键参数)。位置列写接口名而非字节偏移,因为源文档只以标准化信号与回调形式暴露它们;「证据」一列注明其出处为 API 说明、固件说明或构建选项。

    信号 / 接口 位置(API / 模块) 取值与含义 证据
    制动位置命令 publish_brake_position() 归一化 [0.0, 1.0],转发到制动固件模块 API 说明
    转向力矩命令 publish_steering_torque() [-1.0, 1.0],-1 为逆时针、+1 为顺时针 API 说明
    油门位置命令 publish_throttle_position() 归一化 [0.0, 1.0] API 说明
    制动回报 oscc_brake_report_s 通过 subscribe_to_brake_reports() 回调 API 说明
    转向回报 oscc_steering_report_s 含转向角;通过 subscribe_to_steering_reports() 回调 API 说明
    油门回报 oscc_throttle_report_s 通过 subscribe_to_throttle_reports() 回调 API 说明
    故障回报 oscc_fault_report_s 通过 subscribe_to_fault_reports() 回调 API 说明
    OBD 原始帧 subscribe_to_obd_messages() 转发车辆 OBD-II CAN 上的非 OSCC 帧,按帧 ID 自行解析 API 说明
    轮速 车辆回报(当前控制状态) 源文档以「转向角与轮速」为例说明可回报的车辆控制状态 项目说明
    使能 / 禁用 oscc_enable() / oscc_disable() 只影响是否可发送命令;回报随时可收 API 说明
    通道开关 oscc_open(channel) / oscc_close() 打开/关闭与 OSCC 控制 CAN 的套接字连接 API 说明
    保活超时 三个发布函数 每个须至少每 200 ms 调用一次,否则模块判失联并自禁用 API 说明
    转向过载阈值 TORQUE_DIFFERENCE_OVERRIDE_THRESHOLD 调整转向人工接管灵敏度;过低会误判、过高难接管 构建/配置说明
    电压范围检查 API 内部安全校验 拒绝发送超出车辆预期范围的电压 API 说明

    读取方法与注意事项

    生命周期由三组调用界定:oscc_open(channel) 打开控制 CAN 的套接字,oscc_enable() / oscc_disable() 决定是否允许发送命令,oscc_close() 结束。源文档提示 API 会捕获 CAN 帧到达时的 SIGIO 信号并注册处理器转发有效帧,因此在容易被中断冲突的代码段应临时屏蔽该信号、之后再解除。

    最关键的运行约束是节拍:三个发布函数每个都必须至少每 200 ms 调用一次,否则固件模块会判定与上位机失去通信并自行禁用。也就是说,「不发命令」本身是一种保护动作;程序崩溃或卡顿时会自动退出控制,这是设计意图而非缺陷。

    人工接管方面,源文档默认对所有模块启用接管检测,但明确提示:系统激活时试图抓方向盘可能造成严重伤害,推荐用制动踏板或急停按钮作为转向接管手段;如需关闭转向接管检测,可在构建时传 -DSTEERING_OVERRIDE=OFF。构建还需按车型选择标志(-DVEHICLE=kia_soul、kia_soul_ev 或 kia_niro);对早于 1.2.0 的执行器控制板,需加 -DBRAKE_STARTUP_TEST=OFF 以跳过与该板不兼容的启动测试。

    证据等级与边界

    本文的证据等级是「项目文档级」:命令取值区间、回调接口、200 ms 保活与构建标志都可在源文档逐条核对,属于直接证据;但源文档没有逐信号解码表,也没有实车日志,因此本文不提供标识符、字节偏移或缩放系数。要落到具体字节,需回到固件与车型头文件(本快照未包含逐字节定义)。

    两点不能外推。第一,源文档明确「目前仅支持 2014 年及以后的 Kia Soul」(汽油与纯电),Kia Niro 为构建目标;把接口面外推到其他起亚车型或其他品牌属于超范围。第二,各模块的板卡版本与固件版本需按源文档的对应表配套使用,混用可能触发已知安全问题的旧版本;源文档特别强调应及时更新。关于安全访问,源文档未提供任何绕过方法,且不建议尝试;项目自述其设计不改变厂方安全用例、不伪造 CAN 消息、不入侵 ADAS 功能,本档案仅描述这一接口面。

    常见问题

    为什么命令必须每 200 ms 发一次?

    因为固件模块以 200 ms 作为与上位机的通信存活判据:任一发布函数连续超过该时间未被调用,模块就判为失联并自行禁用。这是有意的失效保护——程序卡死时会自动退出控制,而不是保持最后一个命令。

    转向接管该怎么做?

    源文档建议用制动踏板或急停按钮,而不是直接抓方向盘——后者在系统激活时可能造成严重伤害。若确实要关闭转向接管检测,可用 -DSTEERING_OVERRIDE=OFF 构建;保留检测时,灵敏度由 TORQUE_DIFFERENCE_OVERRIDE_THRESHOLD 调整,过低会在大扭矩区误判、过高则难以手动接管。

    能从这套系统直接读到车辆的所有信号吗?

    不能仅凭本文判断。API 提供的是结构化回报(制动/转向/油门/故障)与一个 subscribe_to_obd_messages() 回调,后者转发车辆 OBD-II CAN 上的非 OSCC 帧,需要按帧 ID 自行解析。源文档未给出这些帧的逐字节定义。

    这套接口能套用到别的起亚车型吗?

    源文档明确目前仅支持 2014 年起的 Kia Soul(汽油与纯电),Kia Niro 为构建目标;API 与固件按易扩展设计,但新增车型需按车型头文件格式补齐信息。直接外推到其他车型超出源文档证据范围。

    延伸阅读

    参考资料

    • 项目 01 —— public-can-dbc-datasets/additional/polysync-oscc/README.md(本项目车型档案主来源:API 与固件接口、命令归一化范围、200 ms 保活、构建标志与支持车型)。
    • 项目 01 —— public-can-dbc-datasets/additional/polysync-oscc/LICENSE.md(硬件为 CC BY-SA 4.0、固件与软件为 MIT 的许可划分)。

    说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。

    更新记录

    首次发布 2026-10-11 最近核对:2026-10-11

  • PACMod 线控 v3 平台档案:4.0.0 到 14.1.0 演进

    结论:这份档案的对象是一套线控(drive-by-wire)硬件改装平台 PACMod 的 DBC 定义,适用于硬件版本 3 及以上,而不是某一款量产车型。它的数据特征不在「某条报文的第几字节」,而在协议随版本演进:源文档是一份从 4.0.0 一路记到 14.1.0 的变更日志,逐版列出新增/删除/改名的报文与信号,并记录了对缩放因子、DLC 与枚举值的破坏性修改。因此它的结论是「哪个版本有哪个信号」,而不是「某一辆车的信号地图」;源文档未给出比特率、寻址方式或逐字节定义,也未指定任何具体车型与年款。

    车辆与适用范围

    源文档是一份随线控硬件项目公开的 DBC 变更记录:它描述该平台对外的 CAN 协议面,用于兼容多种被改装的车辆,而非绑定单一车型。

    项 内容
    车型 搭载 PACMod 线控硬件(rev 3 及以上)的被改装车辆;源文档未指定具体车型
    年款 / 市场版本 源文档未确认
    ECU / 改装状态 线控改装平台,协议覆盖转向、制动、油门、变速箱、灯光、雨刮等子系统的命令与回报
    采集跨度 源文档为发布变更日志(记录至 14.1.0),不含实车日志或事务数
    适用范围 仅对应硬件版本 3 及以上的 DBC;版本不匹配时的报文/字段不可直接套用

    总线与寻址

    源文档以变更日志形式呈现,未描述物理层;它在一条沿革记录里提到曾把比特率补进协议说明文档,但本快照未给出该数值。

    项 内容
    物理层 / 比特率 源文档未给出(仅记录「已把比特率加入协议文档」)
    寻址方式 源文档未给出;命令与回报按 0x600–0x6FF 等地址段预留的描述出现过
    帧长度(DLC) 多次变更:如组件回报从 8 改为 4 字节;车速回报从 2 改为 1 字节
    CAN FD 源文档未提供
    命名约束 受 DBC 规范的 32 字符名称上限约束,超长信号名曾被统一缩短

    已解码信号

    下表抽取源文档变更日志中最有代表性的条目。位置列以「报文 / 信号」表示,解码列记录该版本发生的结构性变化(缩放、DLC、枚举、位域),证据列注明出现的版本号。

    信号 所属报文 该版本的变化 / 含义 证据(版本)
    CONTROL_STATUS / CONTROLLING_SYSTEMS / PERFORMANCE_STATUS TIPPER_BODY_RPT_00/01/02 新增状态字节信号 14.1.0
    DBW_WARNING_LEVEL DBW_HEALTH_RPT_00/01 及 COMPONENT_RPT_00–05 新增线控健康告警等级 14.1.0
    SELF_TEST_STATUS DBW_HEALTH_RPT_00/01 新增自检状态 14.1.0
    SELF_TEST_ALLOWED SAFETY_FUNC_RPT_2 新增是否允许自检 14.1.0
    DOOR_ANGLE / BODY_ANGLE TIPPER_BODY_AUX_RPT_00/01/02 由 ROLL_ANGLE/PITCH_ANGLE 改名而来 14.0.0
    VEHICLE_SPEED VEHICLE_SPEED_RPT 移除 VEHICLE_SPEED_VALID,改为 ERROR/NOT_AVAIL 枚举;DLC 由 2 改为 1 14.0.0
    ANGULAR_SPEED BRAKE_MOTOR_RPT_2 / STEERING_MOTOR_RPT_2 缩放因子由 0.1 改为 0.001 14.0.0
    (组件回报结构) COMPONENT_RPT 移除组件类型、系统存在标志、监督信号与 CAN 超时故障;新增本地状态机状态;DLC 由 8 改为 4 14.0.0
    GEAR_CMD / GEAR_RPT GEAR_CMD / GEAR_RPT 新增挡位命令与回报 13.2.0
    ACCEL_PEDAL_POSITION_VOLTAGE_RPT 等四路电压回报 同名回报报文 新增油门/制动/转向的电压型回报 13.2.0
    BRAKE_PRESSURE_2 / BRAKE_PRESSURE_2_AVAIL BRAKE_AUX_RPT / BRAKE_AUX_RPT_2 新增第二路制动压力及其可用位 13.1.0
    STEERING_FLUID_PRESSURE STEERING_AUX_RPT / STEERING_AUX_RPT_2 新增转向油压 13.1.0
    GNSS_TIME — 新增 GNSS 时间 13.1.0
    ACTUAL_GEAR_RATIO / DRIVELINE_ENGAGED / SHIFT_IN_PROGRESS SHIFT_AUX_RPT 新增实际传动比、传动系结合与换挡进行标志 12.2.0
    COUNTER / COMPLEMENT / SANITY_CHECK_REQUIRED GLOBAL_CMD 新增计数器、补码与合理性检查;配套定义全局命令合理性规则 11.1.0

    读取方法与注意事项

    源文档的读取要点可以归纳为一句:先锁版本,再谈解析。多处变更会破坏向后兼容:车速回报的 DLC 由 2 改为 1 字节,同时把原来的 VALID 位改为 ERROR/NOT_AVAIL 枚举;制动与转向电机回报的角度缩放从 0.1 改为 0.001;组件回报的 DLC 从 8 缩减到 4 并删除了若干字段。用错版本的解析器不会报错,只会静默给出量级错误的结果。

    信号语义方面,源文档反复强调三层数据状态的设计:命令类子系统普遍带 MANUAL_INPUT(人工输入)、COMMANDED_VALUE(被命令值)、OUTPUT_VALUE(实际输出值)三个信号,用来区分「人做了什么」「系统要求什么」「设备实际做了什么」;后续版本又为大量信号补上了 ERROR 与 NOT_AVAIL 枚举值,使「无效」与「不可用」可以被显式表达。解析时不能把这三层当成同一个量。

    命名与数值细节也需留意:负数按二进制补码表示(源文档在 13.0.0 明确写入协议说明);名称长度受 32 字符上限约束,因此会出现被缩短的名字;雨刮等子系统的高低中枚举值一度从 253/254/255 挪到 248/249/250,旧的硬编码会失配。此外,源文档把 VIN_RPT、WATCHDOG_RPT、YAW_RATE_RPT 标注为「不用于新开发」,其中 YAW_RATE_RPT 已在 14.0.0 被删除——任何依赖它的解析都应及时迁移。

    证据等级与边界

    本文的证据等级是「发布记录级」:每一条都能在变更日志里按版本号核对,属于源文档直接证据;但源文档没有任何实车观测或逐字节定义,因此本文不给比特位置、缩放公式的完整定义,只记录「发生过的变化」。要落到具体字节,必须回到对应版本的 DBC 文件与协议说明文档(本快照未包含)。

    两点不能外推。第一,本档案对应的是硬件 rev 3 及以上;更早硬件、或不同版本 DBC 之间的字段差异,源文档只以变更形式记录,不能假定向下兼容。第二,源文档未指定车型与年款,把某条信号的存在性外推到具体的被改装车辆上属于超范围推断。关于安全访问,源文档未提供任何绕过方法,且不建议尝试;本文只梳理协议面。

    常见问题

    为什么这份档案不写具体字节位置?

    因为主素材是发布变更日志,只记录各版本「新增/删除/改名/改 DLC/改缩放」的结构性变化,逐字节定义在被引用的 DBC 与协议说明文档里,本快照未包含。给出不存在的位域会违背「只写源文档里有的事实」。

    版本不一致会带来什么后果?

    会静默出错。例如车速回报 DLC 由 2 改 1、角度缩放由 0.1 改 0.001、组件回报 DLC 由 8 改 4,用错版本的解析器不会报错,只会给出量级错误的结果。因此必须先锁定硬件与 DBC 版本。

    MANUAL_INPUT、COMMANDED_VALUE、OUTPUT_VALUE 有什么不同?

    三者分别表示人工输入、系统命令值与设备实际输出值。源文档把这三个信号作为命令类子系统的标准配置,用于区分「人做了什么」「系统要求什么」「设备实际做了什么」,不能当作同一个量读取。

    YAW_RATE_RPT 还能用吗?

    源文档在 11.2.0 把 YAW_RATE_RPT 标注为「不用于新开发」,并在 14.0.0 将其移除。依赖它的解析应迁移到替代信号;继续使用旧字段会与新版协议失配。

    延伸阅读

    参考资料

    • 项目 01 —— public-can-dbc-datasets/additional/astuff-pacmod-v3/doc/changelog.md(本项目车型档案主来源:从 4.0.0 到 14.1.0 的报文与信号变更记录)。
    • 项目 01 —— public-can-dbc-datasets/additional/astuff-pacmod-v3/README.md(DBC 适用范围为硬件 rev 3 及以上,及对外文档入口)。

    说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。

    更新记录

    首次发布 2026-10-11 最近核对:2026-10-11