https://github.com/xbpeng/DeepTerrainRL
Tip revision: ed82e2ebe5f14fa875cc3d0a2180c64980408e8f authored by Glen on 19 October 2016, 17:49:36 UTC
Update README.md
Update README.md
Tip revision: ed82e2e
RaptorController.h
#pragma once
#include "sim/PDController.h"
#include "sim/ImpPDController.h"
#include "sim/SimRaptor.h"
#include "sim/RBDModel.h"
#include "sim/TerrainRLCharController.h"
class cRaptorController : public virtual cTerrainRLCharController
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
enum eStateParam
{
eStateParamRootPitch,
eStateParamSpineCurve,
eStateParamStanceHip,
eStateParamStanceKnee,
eStateParamStanceAnkle,
eStateParamSwingHip,
eStateParamSwingKnee,
eStateParamSwingAnkle,
eStateParamMax
};
typedef Eigen::Matrix<double, eStateParamMax, 1> tStateParams;
enum eMiscParam
{
eMiscParamTransTime,
eMiscParamCv,
eMiscParamCd,
eMiscParamForceX,
eMiscParamForceY,
eMiscParamMax
};
typedef Eigen::Matrix<double, eMiscParamMax, 1> tMiscParams;
enum eState
{
eStateContact,
eStateDown,
eStatePassing,
eStateUp,
eStateMax,
eStateInvalid,
};
struct tStateDef
{
std::string mName;
bool mTransTime;
bool mTransContact;
eState mNext;
};
enum eStance
{
eStanceRight,
eStanceLeft,
eStanceMax
};
cRaptorController();
virtual ~cRaptorController();
virtual void Init(cSimCharacter* character, const tVector& gravity, const std::string& param_file);
virtual void Reset();
virtual void Clear();
virtual void Update(double time_step);
virtual void SeCtrlStateParams(eState state, const tStateParams& params);
virtual void TransitionState(int state);
virtual void TransitionState(int state, double phase);
virtual void SetTransTime(double time);
virtual int GetNumStates() const;
virtual void SetMode(eMode mode);
virtual void CommandAction(int action_id);
virtual void CommandRandAction();
virtual int GetDefaultAction() const;
virtual void SetDefaultAction(int action_id);
virtual int GetNumActions() const;
virtual void BuildCtrlOptParams(int ctrl_params_id, Eigen::VectorXd& out_params) const;
virtual void SetCtrlParams(int ctrl_params_id, const Eigen::VectorXd& params);
virtual void SetCtrlOptParams(int ctrl_params_id, const Eigen::VectorXd& params);
virtual void BuildActionOptParams(int action_id, Eigen::VectorXd& out_params) const;
virtual int GetNumParams() const;
virtual int GetNumOptParams() const;
virtual void FetchOptParamScale(Eigen::VectorXd& out_scale) const;
virtual void OutputOptParams(const std::string& file, const Eigen::VectorXd& params) const;
virtual void OutputOptParams(FILE* f, const Eigen::VectorXd& params) const;
virtual void SetParams(const Eigen::VectorXd& params);
virtual void BuildOptParams(Eigen::VectorXd& out_params) const;
virtual void SetOptParams(const Eigen::VectorXd& opt_params);
virtual void SetOptParams(const Eigen::VectorXd& opt_params, Eigen::VectorXd& out_params) const;
virtual void ReadParams(const std::string& file);
virtual void ReadParams(std::ifstream& f_stream);
virtual double CalcReward() const;
virtual tVector GetTargetVel() const;
virtual eStance GetStance() const;
virtual void BuildFromMotion(int ctrl_params_id, const cMotion& motion);
virtual double GetPrevCycleTime() const;
virtual const tVector& GetPrevDistTraveled() const;
virtual int GetNumJointsPerLeg() const;
virtual int GetSwingHip() const;
virtual int GetSwingKnee() const;
virtual int GetSwingAnkle() const;
virtual int GetSwingToe() const;
virtual int GetStanceHip() const;
virtual int GetStanceKnee() const;
virtual int GetStanceAnkle() const;
virtual int GetStanceToe() const;
virtual void BuildNormPose(Eigen::VectorXd& pose) const;
protected:
struct tBlendAction
{
int mID;
int mParamIdx0;
int mParamIdx1;
double mBlend;
bool mCyclic;
};
enum ePoliState
{
ePoliStateGround,
ePoliStatePose,
ePoliStateVel,
ePoliStateMax
};
tVector mGravity;
cImpPDController mImpPDCtrl;
std::shared_ptr<cRBDModel> mRBDModel;
Eigen::MatrixXd mJacobian;
eStance mStance;
std::vector<Eigen::VectorXd> mCtrlParams;
int mDefaultAction;
std::vector<tBlendAction> mActions;
std::stack<int> mCommands;
bool mEnableGravityCompensation;
bool mEnableVirtualForces;
double mPrevCycleTime;
double mCurrCycleTime;
tVector mPrevCOM;
tVector mPrevDistTraveled;
double mPrevStumbleCount;
double mCurrStumbleCount;
virtual void ResetParams();
virtual bool LoadControllers(const std::string& file);
virtual bool ParseControllers(const Json::Value& root);
virtual bool ParseControllerFiles(const Json::Value& root);
virtual bool ParseActions(const Json::Value& root);
virtual bool ParseAction(const Json::Value& root, tBlendAction& out_action) const;
virtual bool HasCtrlParams() const;
virtual void UpdateState(double time_step);
virtual void UpdateAction();
virtual void UpdateRBDModel();
virtual void UpdatePDCtrls(double time_step, Eigen::VectorXd& out_tau);
virtual void UpdateStumbleCounter(double time_step);
virtual void UpdateStanceHip();
virtual void ApplySwingFeedback(Eigen::VectorXd& out_tau);
virtual void ApplyStanceFeedback(Eigen::VectorXd& out_tau);
virtual void ApplyGravityCompensation(Eigen::VectorXd& out_tau);
virtual void ApplyVirtualForces(Eigen::VectorXd& out_tau);
virtual const tStateDef& GetCurrStateDef() const;
virtual tStateParams GetCurrParams() const;
virtual double GetTargetRootPitch() const;
virtual double GetRootPitch() const;
virtual void SetStateParams(const tStateParams& params);
virtual void SetupPassiveMode();
virtual double GetTransTime() const;
virtual double GetCv() const;
virtual double GetCd() const;
virtual bool CheckContact(int joint_id) const;
virtual bool IsActiveVFEffector(int joint_id) const;
virtual tVector GetEffectorVF() const;
virtual Eigen::MatrixXd BuildContactBasis(const Eigen::VectorXd& pose, bool& out_has_support) const;
const std::string& GetStateName(eState state) const;
const std::string& GetStateParamName(eStateParam param) const;
virtual void GetOptParams(const Eigen::VectorXd& ctrl_params, Eigen::VectorXd& out_opt_params) const;
std::string BuildOptParamsJson(const Eigen::VectorXd& opt_params) const;
virtual void BuildStateParamsFromPose(const Eigen::VectorXd& pose, tStateParams& out_params);
virtual double CalcSpineCurve(const Eigen::VectorXd& pose) const;
virtual const Eigen::VectorXd& GetCtrlParams(int ctrl_id) const;
virtual bool IsCurrActionCyclic() const;
virtual void ApplyAction(int action_id);
virtual void ApplyAction(const tAction& action);
virtual void NewCycleUpdate();
virtual void BlendCtrlParams(const tBlendAction& action, Eigen::VectorXd& out_params) const;
virtual void PostProcessParams(Eigen::VectorXd& out_params) const;
virtual bool IsOptParam(int param_idx) const;
virtual void BuildPoliStatePose(Eigen::VectorXd& out_pose) const;
virtual void BuildPoliStateVel(Eigen::VectorXd& out_vel) const;
virtual void FlipStance();
virtual void SetStance(eStance stance);
// TODO: refactor these so as to not need separate methods
virtual void FlipPoseStance(Eigen::VectorXd& out_pose) const;
virtual void FlipPoliPoseStance(Eigen::VectorXd& out_pose) const;
virtual tVector GetEndEffectorContactPos(int joint_id) const;
virtual void RecordDistTraveled();
virtual int PopCommand();
virtual bool HasCommands() const;
virtual void ClearCommands();
virtual void ProcessCommand(tAction& out_action);
virtual void BuildBaseAction(int action_id, tAction& out_action) const;
};