ocs2_legged_robot

CMakeLists.txt文件

configure_file命令用于处理文件,将一个模板文件转换为一个实际的配置文件。
@ONLY:只替换使用@VAR@形式的变量占位符,不替换${VAR}形式的占位符。这可以防止意外替换模板文件中某些其他用途的变量。
package_path.h.in中的内容为
则会生成一个package_path.h文件,其内容如下

-Wno-ignored-attributes:忽略“ignored attributes”类型的警告,即在编译过程中如果某些属性被忽略,不要发出警告。
-Wno-invalid-partial-specialization:用于抑制与无效的部分特化相关的警告。在这个项目中,这个标志用于消除与Eigen Tensor库相关的不支持特化的警告。

QUIET选项表示如果没有找到包,不会输出错误信息,只是静默处理。
CT_HEADER_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include:指定头文件目录,用于Clang工具的处理。
CF_WERROR:启用Clang格式化中的所有警告并将它们视为错误。这意味着任何格式化问题都会导致构建失败,以强制代码格式一致。

Interface

需要传入的参数有:1. task文件, 2. urdf文件,3.轨迹参考文件,4.摩擦锥约束是否是硬约束
  1. 分别检查task文件、urdf文件、reference文件路径是否正确
  1. 加载模型设置。 ModelSettings为一个结构体,储存着位置误差增益(positionErrorGain)、支撑相时间(phaseTransitionStanceTime)、是否是自动微分(verboseCppAd)、是否需要重新编译与 CppAD 相关的库(recompileLibrariesCppAd)、CppAD模型路径(modelFolderCppAd)、活动关节名称(jointNames)、6自由度接触杆件名称(contactNames6DoF)、3自由度接触杆件名称(contactNames3DoF
    1. 通过loadModelSettings来加载模型设置,加载了positionErrorGainphaseTransitionStanceTimeverboseCppAdrecompileLibrariesCppAdmodelFolderCppAd,其余保持默认
  1. 加载mpc设置和rollout设置(mpc滚动展开相关)
  1. 加载ddp设置、sqp设置、ipm设置(实际只使用ddp/sqp/ipm的一个)
  1. 设置优化控制问题
    1. 创建Pinocchio接口指针
    2. 创建质心模型信息
      1. 本质上是初始化CentroidalModelInfoTpl结构体中储存的数据
      2. CentroidalModelInfoTpl结构体中包含了质心模型类型(centroidalModelType完整质心动力学模型/单刚体质心动力学模型)、三自由度接触(仅接触力)杆件数量、六自由度接触(接触力&接触力矩)杆件数量、广义坐标数量(四足机器人为6+12)、驱动关节数量、状态维度(12+6)、输入维度(12+9)、机器人整机质量、三自由度&六自由度接触杆件索引、质心惯量、质心到机身坐标系的位置
      3. 系统状态(x = [ linear_momentum / mass, angular_momentum / mass, base_position, base_orientation_zyx, joint_positions ]),线性动量和角动量是相对于质心坐标系(以CoM为原点并与惯性坐标系对齐的坐标系)来表示的。
      4. 系统输入(u = [ contact_forces, contact_wrenches, joint_velocities ]),接触力和接触力矩相对惯性坐标
    3. 初始化摆动腿轨迹规划指针
      1. 四足机器人足端轨迹规划程序主要由CubicSpline、SplineCpg和SwingTrajectoryPlanner三个类实现。
      2. CubicSpline类:实现了一个三次样条曲线,用于在两个给定节点之间生成平滑的轨迹,提供了计算位置、速度、加速度和时间导数的方法
      3. SplineCpg类:使用两个CubicSpline对象创建一个完整的摆动轨迹,将轨迹分为两部分:从起始点到中点,以及从中点到终点,提供了计算位置、速度、加速度和时间导数的方法
      4. SwingTrajectoryPlanner类:这是最高层的类,用于规划四足机器人的摆动轨迹,使用SplineCpg对象为每条腿生成轨迹,考虑了机器人的运动模式、地形高度和摆动参数,提供了更新轨迹和获取约束的方法
      5. SwingTrajectoryPlanner根据机器人的运动模式和轨迹信息初始化,对每条腿,它确定摆动阶段的开始和结束时间。然后,它使用SplineCpg为每个摆动阶段创建轨迹。SplineCpg内部使用两个CubicSpline对象来生成完整的摆动轨迹。最后,SwingTrajectoryPlanner提供方法来查询在给定时间点的位置和速度约束
    4. 初始化状态切换模型参考管理指针
    5. 创建自动微分类型的系统状态转换方程。基于pinocchio质心动力学自动微分版本创建
    6. 设定代价函数
      1. 系统过程代价函数为状态输入二次代价
      2. 系统终端代价函数为状态二次代价
    7. 为每条腿设定约束条件
      1. 摩擦锥约束,分为硬约束和软约束两类,使用哪种类型的约束在interface构造函数传入
      2. 零力约束(摆动腿足端力为0)
      3. 零速度约束(支撑腿相对世界坐标系足端速度为0)
      4. 足端法向速度约束(摆动腿应该沿地面法向跟踪参考速度)
    8. 设定Pre-computation
      1. 预计算逻辑:1. 计算每个脚的法向速度约束,2. 考虑位置误差增益,调整约束,3. 使用SwingTrajectoryPlanner获取Z方向的速度和位置约束
        • eeNormalVelConConfig: 用于设置单个脚的法向速度约束配置
    9. 设定rollout
    10. 设定初始化器
  1. 加载机器人初始状态