一、ocs2_quadrotor
STATE_DIM = 12;INPUT_DIM = 4;
state:位置、角度、位置导数、角速度、
input:Fz,Mx.My,Mz
1、QuadrotorInterface.h
定义一个类QuadrotorInterface,作用:
QuadrotorInterface(const std::string& taskFile, const std::string& libraryFolder);
构造函数,接受两个参数,如果生成的库不存在,则创建生成库的目录,如果输入的任务文件或 urdf 文件不存在,则抛出无效参数错误。
@param [in] taskFile:MPC 配置文件的绝对路径
@param [in] libraryFolder: 要生成 CppAD 库的目录的绝对路径。
const vector_t& getInitialState() { return initialState_; }
返回系统的初始状态,存储在initialState_变量中。
ddp::Settings& ddpSettings() { return ddpSettings_; }
返回DDP(Dual Dynamic Programming)求解器的相关设置,存储在ddpSettings_对象中,用户可以修改这些设置。
mpc::Settings& mpcSettings() { return mpcSettings_; }
返回MPC(Model Predictive Control)控制器的相关设置,存储在mpcSettings_对象中,用户也可以修改这些设置。
const OptimalControlProblem& getOptimalControlProblem() const override { return problem_; }
返回一个常量引用指向最优控制问题实例problem_,该实例包含了描述双积分系统动力学、成本函数等信息。
std::shared_ptr<ReferenceManagerInterface> getReferenceManagerPtr() const override { return referenceManagerPtr_; }
返回一个指向参考管理器实例的智能指针,用于处理参考轨迹。
const RolloutBase& getRollout() const { return *rolloutPtr_; }
返回一个常量引用指向rolloutPtr_,它是一个实现了时间触发式 rollout策略的对象。
const Initializer& getInitializer() const override { return *operatingPointPtr_; }
返回一个常量引用指向线性系统初始化器实例,用于对控制系统进行初始化。
ddpSettings_ 和 mpcSettings_ 分别保存了DDP和MPC算法的设置参数。
problem_ 是一个最优控制问题实例,包含四旋翼系统的具体模型信息。
referenceManagerPtr_ 是一个指向参考管理器对象的智能指针。
rolloutPtr_ 指向一个实现Rollout策略的对象,用于模拟系统动态行为。
operatingPointPtr_ 指向一个用于初始化系统的对象。
initialState_ 存储了系统的初始状态。
2、pyBindModule.cpp
#include <ocs2_python_interface/PybindMacros.h>
#include <ocs2_quadrotor/QuadrotorPyBindings.h>
CREATE_ROBOT_PYTHON_BINDINGS(ocs2::quadrotor::QuadrotorPyBindings, QuadrotorPyBindings)
这段C++代码是利用ocs2库中的宏定义CREATE_ROBOT_PYTHON_BINDINGS来为ocs2::quadrotor命名空间下的QuadrotorPyBindings类创建Python接口绑定。通过这种方式,C++编写的ocs2::quadrotor::QuadrotorPyBindings类的功能可以被Python程序直接调用和使用。
具体来说:
-
#include <ocs2_quadrotor/QuadrotorPyBindings.h>:引入了ocs2库中与四旋翼相关的C++类的头文件,其中包含了要转换为Python接口的QuadrotorPyBindings类的声明和实现。
-
#include <ocs2_python_interface/PybindMacros.h>:包含了一系列用于生成Python绑定的宏定义和工具函数