#ifndef __LEVER_ARM_EFFECT_H__ #define __LEVER_ARM_EFFECT_H__ #include "util/util.h" #include "param/vector3.h" class LeverArm { public: LeverArm() {} virtual ~LeverArm() {} /** * レバーアーム長をb-frameのXYZ座標形式で返す関数 * 単位はm/s^2 */ virtual Vector3 lever_arm() const = 0; }; /** * 腕の長さがない場合 * */ class NoLever : public LeverArm{ public: Vector3 lever_arm() const { return Vector3(); } }; /** * 071004(F704)時の前方アンテナ * 設置がXが右方、Yが後方, Zが下方であることに注意 * */ class LA_MuPAL_F_071004 : public LeverArm{ public: Vector3 lever_arm() const { return Vector3( -0.20 - 0.55, 4.96 - 7.20, -3.40 - (-1.89) //GAIAと同一平面上とする ); } }; /** * 071004(F704)時の後方アンテナ * 設置がXが右方、Yが後方, Zが下方であることに注意 * */ class LA_MuPAL_R_071004 : public LeverArm{ public: Vector3 lever_arm() const { return Vector3( -0.44 - 0.55, 10.56 - 7.20, -3.46 - (-1.89) //GAIAと同一平面上とする ); } }; typedef struct { const char *name; LeverArm *lever_arm; } LeverArmItem; LeverArmItem lever_arms[] = { {"NoLever", (LeverArm *)new NoLever()}, {"MuPAL_F_071004", (LeverArm *)new LA_MuPAL_F_071004()}, {"MuPAL_R_071004", (LeverArm *)new LA_MuPAL_R_071004()} }; #endif /* __LEVER_ARM_EFFECT_H__ */ extern LeverArmItem lever_arms[];