策略部署
策略运行器基类
Section titled “策略运行器基类”策略运行器基类 PolicyRunnerBase 定义了输入观测、输出动作和推理生命周期。
virtual RobotAction getRobotAction(const RobotBasicState&, const UserCommand&) = 0;virtual void OnEnter(const RobotBasicState&) = 0;virtual void SetDecimation(int d);ONNX 策略实现
Section titled “ONNX 策略实现”Lite3PolicyRunner 是 Lite3 的 ONNX 策略实现。
模型加载示例
Section titled “模型加载示例”session_ = Ort::Session(env_, policy_path_.c_str(), session_options_);观测与动作维度
Section titled “观测与动作维度”const int motor_num = 12;const int observation_dim = 45;const int action_dim = 12;观测向量组成:
current_observation_ << base_omega, // 3 维(角速度 * 0.25) projected_gravity, // 3 维(重力投影) command, // 3 维(速度指令) joint_pos_rl, // 12 维(关节位置 - 默认位置) joint_vel_rl, // 12 维(关节速度 * 0.05) last_action_eigen; // 12 维(上一步动作)VecXf current_action_eigen = Onnx_infer(current_observation_);机器人动作输出
Section titled “机器人动作输出”for (int i = 0; i < 4; ++i){ robot_action.goal_joint_pos.segment(i*3, 3) = tmp_action_eigen.segment(i*3, 3);}robot_action.kp = kp_; // Vec3f(30, 30, 30).replicate(4, 1)robot_action.kd = kd_; // Vec3f(1, 1, 1).replicate(4, 1)关节排列映射
Section titled “关节排列映射”策略和机器人的关节排列顺序可能不同,通过名称映射自动计算置换索引:
std::vector<std::string> robot_order = { "FL_HipX_joint", "FL_HipY_joint", "FL_Knee_joint", "FR_HipX_joint", "FR_HipY_joint", "FR_Knee_joint", "HL_HipX_joint", "HL_HipY_joint", "HL_Knee_joint", "HR_HipX_joint", "HR_HipY_joint", "HR_Knee_joint"};robot2policy_idx = generate_permutation(robot_order, policy_order);policy2robot_idx = generate_permutation(policy_order, robot_order);策略部署说明
Section titled “策略部署说明”模型文件位置
Section titled “模型文件位置”模型文件位于:
src/Lite3_sdk_deploy/policy/policy.onnxdof_default_eigen_policy << 0.0000, -0.8000, 1.6000, 0.0000, -0.8000, 1.6000, 0.0000, -0.8000, 1.6000, 0.0000, -0.8000, 1.6000;std::vector<float> action_scale_robot = {0.125, 0.25, 0.25, 0.125, 0.25, 0.25, 0.125, 0.25, 0.25, 0.125, 0.25, 0.25};