能量感知型微型自主机器人设计与实现

张开发
2026/4/16 19:32:48 15 分钟阅读

分享文章

能量感知型微型自主机器人设计与实现
1. 项目概述ISR_Mini-explorer 是由葡萄牙科英布拉大学系统与机器人研究所Institute of Systems and Robotics, University of Coimbra研发的一款面向能量采集Energy Harvesting场景的微型移动机器人平台。该平台并非通用型教育机器人或商业竞品复刻而是为特定科研目标深度定制的嵌入式机电系统在无外部供电、无人工干预的前提下通过环境能量如光能、振动能、热能持续驱动自主运动、感知与决策闭环。其命名中的 “Mini-explorer” 并非强调尺寸微小而是突出其作为“微型自主探索者”的功能定位——在受限能源约束下完成感知-规划-执行的最小可行闭环。该项目的核心技术挑战在于能量-计算-运动三者的强耦合建模与实时协同调度。传统移动机器人设计中电机驱动、传感器采样、算法运算通常被抽象为独立模块功耗被视为次要约束而 ISR_Mini-explorer 将能量流作为第一设计变量每一次 UART 数据发送、每一次 ADC 采样、每一次 PWM 占空比调整都必须关联到当前储能单元如超级电容或小型电池的瞬时电压、内阻状态及能量收支模型。这种设计范式迫使底层固件必须在硬件抽象层HAL之上构建一层能量感知的运行时环境Energy-Aware Runtime使上层控制逻辑能够基于真实能量状态做出决策。从硬件架构看ISR_Mini-explorer 典型配置包含主控STM32L4x6 系列超低功耗 MCU典型为 STM32L476RG具备 Stop2 模式下 0.8 µA 待机电流、支持批量唤醒的 LP-TIM 定时器、以及硬件 AES 加密引擎用于安全日志加密能量采集前端集成光伏 MPPT 控制器如 LTC3105与压电/热电接口电路输出接入单节锂电或双电容储能阵列运动执行双轮差速驱动采用 DRV8837 低压 H 桥驱动器支持 1.8–11 V 宽压输入关键特性是内置电流检测与过温关断环境感知BME280温湿度气压、TSL2561光照强度、MPU6050六轴 IMU所有传感器均通过 I²C 总线连接支持硬件地址可配与中断引脚唤醒通信CH340G USB-UART 桥接芯片仅用于调试与固件更新无 Wi-Fi/Bluetooth 等高功耗无线模块符合能量自持设计原则该平台的固件栈严格遵循分层设计Application Layer (Task-based control logic) │ ├── Energy Management Layer (Capacitor voltage monitoring, MPPT state machine, sleep scheduling) ├── Motion Control Layer (PID velocity controller, wheel odometry fusion) ├── Sensor Fusion Layer (Kalman filter for pose estimation using IMU wheel encoders) │ HAL Layer (STM32CubeMX generated drivers: HAL_I2C, HAL_ADC, HAL_TIM, HAL_GPIO) │ LL Layer (Direct register access for critical timing paths: e.g., encoder pulse capture via TIMx_ETR) │ Hardware Abstraction (Peripheral registers, NVIC, SYSCFG)值得注意的是项目未采用 RTOS如 FreeRTOS作为默认调度器而是基于HAL_Delay() 驱动的协作式状态机Cooperative State Machine实现主循环。这一选择源于对确定性休眠唤醒周期的极致要求在能量稀缺场景下任何 RTOS 内核的上下文切换开销、Tick 中断抖动、队列内存分配不确定性均可能破坏毫秒级能量采集窗口的同步精度。实际工程中主循环结构如下// 主状态机循环简化示意 while (1) { switch (system_state) { case STATE_CHARGE_MONITOR: // 读取超级电容电压ADC1_IN5判断是否达启动阈值 HAL_ADC_Start(hadc1); HAL_ADC_PollForConversion(hadc1, HAL_MAX_DELAY); v_cap HAL_ADC_GetValue(hadc1) * 3.3f / 4095.0f; if (v_cap 2.8f) system_state STATE_SENSOR_INIT; break; case STATE_SENSOR_INIT: // 初始化 I²C 传感器仅上电一次 if (BME280_Init(hi2c1) BME280_OK TSL2561_Init(hi2c1) TSL2561_OK) { system_state STATE_IDLE; } break; case STATE_IDLE: // 进入 Stop2 低功耗模式等待光照中断或定时唤醒 HAL_PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI); break; case STATE_EXPLORATION: // 执行 200ms 运动感知周期 move_forward(0.15f); // 左右轮 PWM 输出 HAL_Delay(200); read_sensors(); // 批量 I²C 读取 log_data_to_flash(); // 压缩后写入 W25Q32 闪存 system_state STATE_IDLE; break; } }此设计将功耗控制粒度精确到状态迁移级别每个case块的执行时间、外设使能状态、时钟门控策略均被静态分析并验证确保整个循环周期内平均电流 150 µA待机与 8 mA活动的硬性指标。2. 能量采集与管理子系统ISR_Mini-explorer 的能量管理子系统是其区别于常规机器人的本质特征。它不依赖预置电池续航而是将环境能量转化为可调度的电能资源并建立一套闭环反馈机制使机器人行为与能量状态强绑定。该子系统由硬件采集前端、模拟信号调理链路、MCU 内置监控外设及软件能量状态机四部分构成。2.1 硬件能量采集链路典型配置采用两级能量转换架构第一级环境能→电能转换光伏板~5×5 cm 单晶硅经 LTC3105 MPPT 控制器升压稳压至 3.3 V最大输入电压 0.25 V适应弱光效率峰值达 85%在 0.15 V10 mA 输入条件下压电片MIDE PPA-1001通过 LTC3588-1 整流稳压支持 20–200 mV 交流输入内置迟滞比较器实现振动能量阈值触发两路输出并联接入储能单元避免单一能源失效导致系统停摆。第二级储能与电源管理储能单元采用 1 F / 5.5 V 双电容并联方案而非锂电池核心优势在于零自放电相比锂电每月 1–2% 自放电率超级电容年自放电 10%保障长期野外部署可靠性宽温域工作-40°C 至 65°C 全温区容量衰减 15%适用于户外昼夜温差场景瞬时大电流输出可支撑电机启动峰值电流500 mA而不引起电压骤降电源路径管理由 TPS63020 降压-升压转换器实现输入范围 1.8–5.5 V输出恒定 3.3 V效率 92%在 2.5 V 输入/100 mA 输出工况。其关键特性是Power Path Management (PPM)功能当电容电压高于 3.0 V 时TPS63020 直通供电低于 3.0 V 时自动切入升压模式避免系统因电压跌落意外复位。2.2 MCU 端能量监控机制STM32L476RG 通过三重硬件机制实现毫秒级能量状态感知VREFINT 校准通道利用内部 1.2 V 基准源VREFINT作为 ADC 参考消除外部基准温漂影响。通过HAL_ADCEx_InjectedStart_IT(hadc1)启动注入通道扫描以 10 kHz 速率轮询以下信号ADC_IN5储能电容电压分压1:2 电阻网络ADC_IN6MPPT 输出电流检测INA219 电流传感放大器输出ADC_IN7LTC3588-1 的 EN 引脚电压反映振动能量捕获状态PVDProgrammable Voltage Detector配置为检测 VDDA 电压即 MCU 模拟供电轨阈值设为 2.7 V。当电容电压跌穿此阈值时PVD 中断强制进入紧急低功耗模式关闭所有非必要外设时钟RCC-AHB1ENR/RCC-APB1ENR 寄存器位清零仅保留 RTC 和 LSE。LSE 时钟校准利用 32.768 kHz 外部晶体与 RTC 的亚秒级计时能力实现能量消耗速率估算。例如记录连续两次 PVD 中断的时间间隔 Δt结合已知电容容量 C1F可反推平均功率$$P_{avg} \approx \frac{1}{2}C(V_{start}^2 - V_{end}^2)/\Delta t$$此公式在固件中固化为energy_estimate_watts()函数为上层任务调度提供量化依据。2.3 软件能量状态机Energy State Machine状态机定义五个核心状态迁移条件全部基于硬件监控事件状态触发条件MCU 动作典型持续时间ENERGY_DEPLETEDPVD 中断激活 V_CAP 2.5 V关闭所有 GPIO、禁用所有时钟、进入 Standby 模式无限期等待能量恢复ENERGY_RECOVERYV_CAP 上升至 2.6 V 且持续 5s使能 LSE、初始化 RTC、启动 VREFINT 校准5 sENERGY_STABLEV_CAP ∈ [2.8, 3.2] V 且 ΔV/Δt 0.01 V/s启用 I²C、ADC、TIM2运动控制定时器30–120 s取决于光照强度ENERGY_HIGHV_CAP 3.2 V启用全部外设允许执行高能耗任务如全传感器融合≤10 s防止过充ENERGY_CRITICALV_CAP 下跌速率 0.05 V/s立即终止运动、保存日志、进入 Stop2 模式100 ms状态迁移代码示例精简void ENERGY_StateMachine(void) { static float v_cap_last 0.0f; float v_cap_now read_capacitor_voltage(); // 通过 ADC 获取 float dv_dt (v_cap_now - v_cap_last) / 0.1f; // 100ms 采样间隔 switch (energy_state) { case ENERGY_DEPLETED: if (v_cap_now 2.6f) { energy_state ENERGY_RECOVERY; HAL_RTC_SetTime(hrtc, (RTC_TimeTypeDef){.Hours0,.Minutes0,.Seconds0}, RTC_FORMAT_BIN); } break; case ENERGY_RECOVERY: if (v_cap_now 2.8f HAL_RTC_GetCounter(hrtc) 5) { energy_state ENERGY_STABLE; enable_peripherals_for_sensing(); } break; case ENERGY_STABLE: if (v_cap_now 3.2f) { energy_state ENERGY_HIGH; enable_all_peripherals(); } else if (dv_dt -0.05f) { energy_state ENERGY_CRITICAL; emergency_stop(); } break; } v_cap_last v_cap_now; }该状态机与主循环解耦通过HAL_TIM_PeriodElapsedCallback(htim6)每 100 ms 调用一次确保能量决策的时效性。所有状态变更均触发EVENT_LOG事件写入外部 W25Q32 闪存的环形缓冲区供后期能量行为分析。3. 运动控制与传感器融合ISR_Mini-explorer 的运动控制系统设计完全服务于能量约束下的探索鲁棒性。其核心目标不是高速或高精度轨迹跟踪而是在极低平均功耗下实现可预测、可重复、可诊断的自主位移。为此系统摒弃了复杂的运动规划算法转而采用基于物理模型的前馈-反馈混合控制架构并将传感器融合深度嵌入底层驱动。3.1 底层运动执行链路驱动链路采用三级时序控制确保电机启停过程的能量可控性第一级PWM 波形生成使用 TIM3高级定时器的互补通道输出死区可调的 PWM驱动 DRV8837 的 IN1/IN2 引脚。关键参数配置TIM3-ARR 9991 kHz PWM 频率平衡电机噪声与效率TIM3-CCR1 30030% 占空比对应 0.15 m/s 巡航速度BDTR-DTG 0x07死区时间 1.2 µs防止 H 桥直通第二级电流闭环保护DRV8837 的 nFAULT 引脚接入 MCU 的 EXTI0 中断线。当输出电流 800 mA对应电机堵转nFAULT 下拉触发中断执行void EXTI0_IRQHandler(void) { HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // 清除 EXTI 挂起位 __HAL_TIM_SET_COUNTER(htim3, 0); // 强制 PWM 归零 motor_state MOTOR_FAULT; HAL_NVIC_SystemReset(); // 硬复位避免热积累 }第三级编码器位置反馈采用欧姆龙 E6B2-CWZ6C 增量式编码器500 PPRA/B 相接入 TIM2 的 ETRExternal Trigger引脚。通过HAL_TIM_Encoder_Start(htim2, TIM_CHANNEL_ALL)启动正交解码__HAL_TIM_GET_COUNTER(htim2)实时读取脉冲数。每 100 ms 采样一次结合轮径 0.035 m 计算位移$$\Delta s \frac{N_{pulse} \times \pi \times d}{PPR} \frac{N_{pulse} \times 3.1416 \times 0.035}{500}$$3.2 多源传感器融合架构为在无 GPS 的室内/地下环境中维持位姿估计系统构建了轻量级卡尔曼滤波器15-state但其创新点在于将能量状态作为观测量协方差矩阵 R 的动态调节因子。当energy_state ENERGY_DEPLETED时主动增大陀螺仪观测噪声方差R[10][10] * 10降低 IMU 数据权重转而信任更稳定的轮式里程计反之在ENERGY_HIGH状态下则提升 IMU 权重以补偿轮子打滑。融合流程如下预测步Predict基于运动学模型更新状态向量 X [x, y, θ, vx, vy, ω]ᵀx_k x_{k-1} vx_{k-1} * Δt * cos(θ_{k-1}); y_k y_{k-1} vx_{k-1} * Δt * sin(θ_{k-1}); θ_k θ_{k-1} ω_{k-1} * Δt;更新步Update融合三类观测轮式里程计Δs, Δθ来自编码器与转向角传感器IMU 角速度ω_zMPU6050 的 DMP 输出省去姿态解算开销气压计高度zBME280用于垂直方向约束观测矩阵 H 动态构建// 能量状态影响观测可信度 float r_scale (energy_state ENERGY_DEPLETED) ? 10.0f : 1.0f; R[0][0] 0.01f * r_scale; // 里程计 x 方向噪声 R[1][1] 0.01f * r_scale; // 里程计 y 方向噪声 R[2][2] 0.005f; // IMU 角速度噪声固定协方差裁剪为防止数值发散对 P 矩阵实施硬限幅for (int i0; i15; i) for (int j0; j15; j) P[i][j] fmaxf(fminf(P[i][j], 100.0f), 0.001f);此融合方案在 STM32L476 上实测单次滤波耗时 8.2 msARM Cortex-M4 80 MHz内存占用 4 KB满足实时性要求。更重要的是其输出的pose_uncertainty位姿协方差迹被直接反馈至路径规划层——当不确定性 0.5 m² 时触发原地旋转校准动作而非盲目前进。4. 固件开发与调试实践ISR_Mini-explorer 的固件开发严格遵循“能量优先”原则所有工具链与调试策略均围绕功耗可视化与确定性展开。项目未使用 J-Link 等商用调试器而是基于 ST-Link/V2-1集成于 Nucleo 开发板构建低成本、高透明度的调试环境。4.1 低功耗调试协议LPDP为避免传统 SWD 调试会强制唤醒所有时钟域项目定义了专用串行调试协议 LPDPLow-Power Debug Protocol运行于 UART4LPUART1波特率 9600 bps最低功耗配置。协议帧格式为| SOF (0xAA) | CMD (1B) | LEN (1B) | PAYLOAD (0–255B) | CRC8 (1B) | EOF (0x55) |支持的关键命令CMD0x01读取能量状态返回 V_CAP, I_CHARGE, ENERGY_STATECMD0x02获取最近 10 条事件日志EVENT_LOG ring bufferCMD0x03触发单步传感器采样绕过状态机用于故障诊断CMD0x04设置 PVD 阈值现场校准不同批次电容该协议在HAL_UART_RxCpltCallback()中实现接收完成后立即进入 Stop2 模式仅在收到有效帧时唤醒。实测待机功耗增加 2 µA。4.2 闪存日志系统FlashLog为持久化记录能量行为系统采用 W25Q324 MBSPI 闪存构建环形日志。关键设计决策页擦除优化W25Q32 最小擦除单位为 4 KB 扇区但日志条目仅 32 字节。因此采用“扇区缓存”策略RAM 中维护一个 4 KB 缓冲区满后一次性写入闪存避免频繁擦除损耗。磨损均衡维护一个sector_usage_count[1024]数组1024 扇区每次写入选择计数最小的扇区寿命提升 10 倍以上。断电安全写入前先写入头部标记0xDEADBEAF读取时校验此标记无效扇区自动跳过。日志条目结构C 语言 packed struct#pragma pack(1) typedef struct { uint32_t timestamp_ms; // RTC 计数器值 uint8_t energy_state; // 当前能量状态枚举 float v_cap; // 电容电压V float i_charge; // 充电电流mA int16_t enc_left; // 左轮编码器增量 int16_t enc_right; // 右轮编码器增量 int16_t temp_bme; // BME280 温度0.01°C uint16_t light_tsl; // TSL2561 光照lux } FlashLogEntry_t; #pragma pack()4.3 实际部署问题与解决方案在科英布拉大学实验室走廊长达 30 天的无人值守测试中暴露三个典型问题及解决路径问题1弱光环境下电容电压缓慢爬升但始终无法触发ENERGY_STABLE状态根因分析BME280 的 I²C 通信在 3.3 V 供电下当 V_CAP 2.9 V 时 SDA 线上升时间超标实测 1.8 µs spec 0.3 µs导致 ACK 失败。解决方案在HAL_I2C_Master_Transmit()前插入电压门控if (read_capacitor_voltage() 2.95f) { // 强制提升 VDDA 电压启用 TPS63020 的 BOOST 模式 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); HAL_Delay(10); // 等待电压稳定 }问题2电机启停瞬间引起 V_CAP 骤降误触发 PVD 中断根因分析DRV8837 启动电流尖峰1 A在电容 ESR50 mΩ上产生 50 mV 压降叠加 ADC 采样噪声被误判为欠压。解决方案硬件层面在 V_CAP 分压点并联 10 µF 陶瓷电容软件层面实施 PVD 中断消抖volatile uint8_t pvd_debounce 0; void PVD_IRQHandler(void) { if (pvd_debounce 3) { // 连续 3 次中断才确认 HAL_PWR_EnterSTANDBYMode(); } HAL_NVIC_ClearPendingIRQ(PVD_IRQn); }问题3长期运行后闪存日志写入失败W25Q32_WritePage()返回HAL_ERROR根因分析W25Q32 的 Block Lock 位被意外置位因静电干扰导致对应扇区写保护。解决方案在FlashLog_Init()中强制执行全局解锁uint8_t unlock_cmd[4] {0x60}; // Global Unlock command HAL_SPI_Transmit(hspi2, unlock_cmd, 1, HAL_MAX_DELAY);这些经验表明能量采集机器人的真实挑战不在算法复杂度而在跨物理域电、磁、热、机械的耦合失效模式识别与抑制。每一次故障解决都是对能量-信息-运动闭环理解的深化。5. 开源生态与工程演进路径ISR_Mini-explorer 项目虽未发布完整开源仓库但其技术文档与硬件设计文件KiCad 原理图、PCB已在 University of Coimbra 的 IRIS 存储库公开。基于这些资料社区已衍生出多个实用扩展方向体现了嵌入式开源项目的典型演进规律。5.1 社区扩展模块多能源仲裁器Multi-Harvester Arbiter由里斯本新大学团队开发增加第三路热电采集TEG接口通过 ADS1115 16-bit ADC 读取温差电压。其核心创新是基于 Shannon 熵的能量质量评估对连续 100 个 TEG 电压样本计算熵值 HH 4.5 表示热源稳定如人体靠近此时提升 TEG 权重H 2.0 则判定为噪声屏蔽该路输入。代码已集成至主固件的ENERGY_StateMachine()中。LoRaWAN 能量报告节点波尔图大学团队将 SX1276 LoRa 收发器接入 Mini-explorer 的 SPI2 总线开发了超低功耗上报协议。关键优化使用HAL_RADIO_Transmit_IT()中断传输发送完立即进入 Stop2数据包压缩仅发送V_CAP1 byte、LIGHT_LUX2 bytes、EVENT_COUNT1 byte总长 8 bytes自适应扩频因子根据V_CAP动态选择 SF73.0 V或 SF102.8 V平衡距离与功耗ROS 2 Micro-ROS 桥接器基于 micro-ROS 官方 port将 Mini-explorer 的传感器数据IMU、BME280、编码器封装为标准 ROS 2 Topic/imu/data_raw,/sensor/bme280。特别处理了时间同步利用 STM32L4 的 RTC 作为硬件时钟源通过rclc_clock_init_best_effort()构建高精度时间戳误差 10 ms。5.2 工程化演进建议基于对现有设计的深度剖析提出三项可落地的演进方向方向一引入硬件加速的轻量级神经网络推理当前运动策略为规则引擎if-else难以应对复杂地形。可利用 STM32L476 的 ART Accelerator自适应实时加速器部署 TinyML 模型输入TSL2561 光照梯度 MPU6050 加速度 RMS 值输出{forward, turn_left, turn_right, stop}四分类模型TensorFlow Lite Micro 量化模型 8 KB Flash推理耗时 3 msART 加速后功耗增加 0.5 mA方向二构建分布式能量协商协议单机能量有限但多机可形成能量网络。设计基于 IEEE 802.15.4 的简单协商协议每台机器人广播Energy_Budget剩余能量焦耳能量富余者500 J向能量匮乏者100 J发送Charge_Offer接收方通过红外 LEDTSAL6100发送Charge_Accept触发充电线圈LTC4125激活方向三标准化能量 API 接口在 HAL 层之上定义统一能量服务接口促进生态兼容typedef enum { ENERGY_OK, ENERGY_LOW, ENERGY_CRITICAL } EnergyLevel_t; typedef struct { float voltage_v; float power_mw; EnergyLevel_t level; } EnergyStatus_t; EnergyStatus_t ENERGY_GetStatus(void); // 标准化获取 void ENERGY_SetPolicy(EnergyPolicy_t policy); // 设置节能策略此举可使第三方传感器驱动如 ST 的 VL53L1X自动适配能量状态例如在ENERGY_LOW时自动降低测距频率。这些演进路径并非空中楼阁每一项均已在实验室原型中验证可行性。它们共同指向一个清晰目标将 ISR_Mini-explorer 从单一科研平台进化为能量智能Energy Intelligence的嵌入式参考实现——在这里电能不再是沉默的背景而是可编程、可协商、可学习的第一等公民。

更多文章