refactor(config) + feat(model): 每节点一份 TOML 取代 ROS yaml;8 关节两自由度腿与单连杆 IK

配置(节点自治,跨包不共享):
- 新增各节点自己的 config/<节点>.toml(deploy / remote / hardware),只放本节点参数;删除三份 *.yaml
- 各节点自带配置结构与加载器(deploy_config.h / remote_config.h / hardware_config.h),
  删除 state_machine/parameters/ 与 ControlParameters
- TOML 解析库 toml++ 改为系统安装:find_package(tomlplusplus REQUIRED),以 header-only 方式编译,
  库源码不进仓库、目标机不需部署运行时 .so
- launch 只传 config_file;改 TOML 不需重编,改配置头自动触发该节点重编

机器人模型(按本机构型改):
- 16 关节三关节腿 → 8 关节(每腿 摆臂 + 轮)
- IK 改为单连杆反解 θ = splay_sign·acos(h/L);趴下 h=0 → 摆臂水平(±90°)
- 步态倒向:趴下时前腿向前、后腿向后(splay_sign 前 +1 / 后 −1),与 M20 相反
- 起立/趴下用样条 + 速度前馈;轮 kp 恒 0;限位改为逐关节查表
- 精简死参数:机身长宽、髋偏置、轮半径、力矩限制、通用策略参数,以及 auto_calibrate 与 ±360° 回绕标定
- 硬件侧参数入库:电机量程(P65MAXS/W190S)、CAN 通道与仲裁 ID、使能帧数/间隔、每腿 bus/canid、台架增益

保留(未改动 HEAD 已有功能):多步态模型预加载与运行中切换、站立后自动进 RL 与就绪自检、
遥测四路上报、阻尼态单调时钟计时、策略输出 NaN 保护

验证(ROS Noetic 容器,干净构建):
- 四个包 catkin_make rc=0
- /joint_states 200 Hz(8 关节名与配置一致)、/motion_state 20 Hz
- IK 目标角:站立 ±16.3°、收腿 ±66.4°、趴下 ±90.0°;趴下指令实测峰值 1.5708 rad
- 协议 MotionParam=1/4 触发 idle→standup→liedown;自动进 RL 自检在零反馈下正确拦住

待实测:摆臂长度/站趴高度、各关节 dir/offset_deg;invicta_hardware 的 CAN 读写仍为 TODO
This commit is contained in:
2026-10-21 21:39:49 +08:00
parent cf70b1a1d7
commit a173383756
39 changed files with 1715 additions and 1088 deletions
@@ -1,14 +1,6 @@
<launch>
<!-- RL 部署节点:状态机 + 策略推理。参数在节点的私有命名空间下。
无硬件台架自测时(invicta_hardware 只发零位状态)关掉两个自检,
否则站立完成后永远不会自动进入 RL:
roslaunch invicta_deploy invicta_deploy.launch rl_require_pose:=false rl_require_imu:=false
-->
<arg name="rl_require_pose" default="true"/>
<arg name="rl_require_imu" default="true"/>
<!-- RL 部署节点:状态机 + 策略推理。参数来自本节点自己的 config/invicta_deploy.toml -->
<node pkg="invicta_deploy" type="invicta_deploy" name="invicta_deploy" output="screen">
<rosparam command="load" file="$(find invicta_deploy)/config/invicta_deploy.yaml"/>
<param name="rl/require_pose" value="$(arg rl_require_pose)"/>
<param name="rl/require_imu" value="$(arg rl_require_imu)"/>
<param name="config_file" value="$(find invicta_deploy)/config/invicta_deploy.toml"/>
</node>
</launch>