ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

第330篇 硬件在环测试——虚实结合的HIL验证

第330篇 硬件在环测试——虚实结合的HIL验证 上篇聊了Gazebo仿真测试在虚拟世界里跑算法。仿真有个前提假设所有硬件行为都可以用数学模型近似。电机响应是理想的传感器数据服从高斯噪声分布通信延迟是固定的。但真实硬件不这么乖。电机驱动器有死区编码器有量化误差CAN总线会丢包ADC采样有非线性。这些东西用数学模型很难精确描述但它们确实影响系统行为。硬件在环测试Hardware-in-the-Loop简称HIL的做法是把真实的硬件控制器接进仿真回路里。仿真环境生成虚拟的传感器数据喂给真实的控制器真实控制器计算出控制指令反馈给仿真环境驱动物理模型。这样就能验证真实硬件和软件在接近真实的条件下是否工作正常。简单说控制器被骗了——它以为自己在真实机器人上运行其实传感器数据都是仿真机生成的。HIL的典型架构一个典型的HIL系统包含三个部分实时仿真机运行物理模型机器人动力学、传感器模型、环境模型以实时速率运行。所谓实时速率就是仿真1秒对应真实世界1秒。这和Gazebo的越快越好完全不同。实时仿真机通常运行实时操作系统如RT-Linux、VxWorks保证计算任务在确定的时间窗口内完成。如果某个时间步的计算超时了系统会报错而不是等待——因为等待意味着和真实控制器的时序对不上了。真实控制器就是最终要装到机器人上的那块硬件。它通过真实的IO接口CAN、串口、以太网和仿真机通信。仿真机模拟传感器输出控制器以为自己在真实机器人上运行。测试管理主机负责配置测试场景、监控测试过程、记录数据、生成报告。通常通过以太网和仿真机、控制器通信。测试管理主机上还运行着自动化框架管理测试用例的调度、执行和结果分析。好的测试管理界面能让你一眼看出哪些测试通过了、哪些失败了、失败的具体原因是什么。传感器数据(仿真) ──→ 真实控制器 ──→ 控制指令 ↑ │ │ 实时仿真机(物理模型) │ └────────────────────────────────────┘关键约束是实时性。仿真机必须在确定的时间步长内完成所有计算。如果物理模型太复杂算不过来就不能用HIL。这也是为什么HIL用的物理模型通常比Gazebo里的简化很多——只需要保留和控制相关的动力学特性就行。什么时候需要HIL不是所有项目都需要HIL。如果你的机器人软件纯粹是上层算法路径规划、任务调度和底层硬件没有紧密交互Gazebo仿真加集成测试就够了。HIL适用于这些场景底层控制开发电机控制、力矩控制、关节位置控制。控制算法跑在真实的嵌入式处理器上通过真实的PWM输出和编码器反馈工作。HIL可以验证控制参数是否合理会不会出现振荡、超调。安全系统验证急停逻辑、碰撞检测、看门狗。这些功能涉及硬件中断和实时响应纯软件仿真很难验证时序是否正确。HIL可以在安全的条件下模拟故障注入——比如突然断开编码器信号看控制器能不能在10ms内触发急停。通信协议测试CAN总线、EtherCAT。真实硬件的通信栈和仿真环境里的实现可能有微妙差异。HIL可以验证协议层的兼容性。比如CAN总线的仲裁机制两个节点同时发送消息时的优先级处理在仿真里很难精确模拟但HIL用的是真实的CAN控制器行为完全真实。HIL的工程挑战做HIL最大的挑战是实时仿真机的搭建。你需要一个能实时运行的物理模型还要有和真实硬件对接的IO接口。常用的实时仿真平台有dSPACE、NI VeriStand、Speedgoat。这些是商业方案价格不菲但成熟可靠。预算有限的团队也可以用Speedgoat的开源替代品——比如用一块STM32开发板跑简化的动力学模型通过DAC输出模拟传感器信号通过ADC读取控制器的真实输出。成本可能只要几百块钱。另一个挑战是模型精度和实时性的平衡。HIL的物理模型不需要特别精确但必须抓住和控制相关的核心动态特性。比如做电机控制HIL模型必须包含电机的电气时间常数和机械时间常数但不需要精确建模齿轮箱的摩擦非线性。故障注入HIL最强大的能力HIL相比真实机器人测试最大的优势是故障注入。在真实机器人上做故障测试太危险了——你不能故意让电机失控来验证安全逻辑。但HIL可以。仿真机可以随时注入各种故障传感器信号突然归零模拟传感器断线传感器数据卡死在某个值模拟传感器冻结通信延迟突然增大到100ms模拟网络拥塞电机反馈信号加入大幅噪声模拟编码器受干扰控制器供电电压下降模拟电池低电量每种故障场景对应一组验收标准。比如传感器断线后控制器必须在10ms内检测到异常并切换到安全模式通信延迟超过50ms时控制器应该降低运动速度并报警。这些时序要求在纯软件仿真里很难精确验证HIL因为用了真实的硬件和真实的通信栈测出来的时序是可信的。做故障注入测试有个经验不要只测单一故障还要测组合故障。单个传感器失效可能没问题两个传感器同时失效呢通信延迟加大同时电池电量低呢组合故障更容易暴露系统设计中的薄弱环节。我参与过一个项目HIL故障注入测试发现了一个隐藏很深的bug当编码器信号丢失的同时接收到新的速度指令控制器的状态机进入了未定义状态输出了一个固定的最大电压。如果这在真实机器人上发生电机会全速运转直到撞墙。这个bug在单元测试和纯软件仿真里都发现不了因为需要真实的硬件中断响应时序才能触发。面试追问HIL和纯软件仿真的本质区别是什么HIL里有真实的硬件参与。控制算法跑在真实的处理器上用真实的编译器编译受真实的实时操作系统调度。纯软件仿真里这些都可能是近似的。HIL能暴露出编译器优化导致的数值精度问题、RTOS调度延迟导致的控制抖动这些在纯软件仿真里看不到。HIL测试的自动化程度怎么样成熟的HIL系统可以全自动运行。测试管理主机通过脚本配置场景、启动仿真、监控过程、收集数据。一个完整的HIL回归测试可能需要跑几个小时但完全不需要人盯着。晚上提交代码早上看报告。没有HIL设备怎么办可以用软件在环SIL替代。把控制算法编译成PC可执行程序跑在普通电脑上和Gazebo仿真对接。虽然没有真实硬件的时序特性但能验证算法逻辑。SIL是HIL的前置步骤先SIL通过再上HIL。还有一种折中方案叫处理器在环PIL算法跑在真实处理器上但物理模型在PC上仿真。比SIL更接近真实比HIL成本低。HIL测试在汽车和机器人领域有什么区别汽车行业的HIL非常成熟有完整的标准和流程ISO 26262。机器人领域的HIL还在发展中标准化程度低。但核心思路是一样的用仿真代替真实环境安全、可重复地测试控制系统。机器人领域的特殊性在于场景更复杂多样不像汽车主要关注纵向和横向控制。HIL是测试金字塔里比较高的一层。它不替代单元测试和集成测试而是在它们之上加了一道真实硬件的验证。对于底层控制开发来说HIL几乎是必须的——你不能拿真实机器人去试错太危险也太贵。HIL提供了一个安全的、可重复的、接近真实的环境来验证控制系统。从测试体系的角度看单元测试、集成测试、仿真测试、HIL测试、实车测试形成一个完整的验证链条。越往上越接近真实成本越高跑得越慢。合理的策略是尽量把问题在低层发现。单元测试能发现的bug就不要留到集成测试集成测试能发现的不要留到HIL。高层测试的价值在于发现低层测试发现不了的问题——那些和硬件、时序、物理世界交互相关的问题。下一篇聊代码审查。测试保证代码的正确性代码审查保证代码的可维护性。两者缺一不可。一个好的reviewer能在代码合并之前发现设计缺陷、命名混乱、潜在的线程安全问题——这些是测试覆盖不到的。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第329篇 仿真测试——Gazebo CI让每次提交都跑一遍仿真下一篇预告第331篇 代码审查——怎么review别人的代码有任何问题欢迎评论区留言我会尽量回复。
返回列表