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