GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
xr_r1.h
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
8#ifndef DESIGNLAB_XR_R1_H_
9#define DESIGNLAB_XR_R1_H_
10
16
17
18namespace designlab {
19
22class XrR1 :
27public:
28 explicit XrR1(const XrR1ParameterRecord& parameter_record);
29
30
32 const int leg_index, const Vector3& leg_pos) const noexcept override;
33
35 const int leg_index, const Vector3& leg_pos,
36 const HexapodJointState& joint_state) const noexcept override;
37
38
40 const Vector3& converted_position, int leg_index,
41 const Vector3& center_of_mass_global, const Quaternion& robot_quat,
42 const bool consider_rot) const override;
43
45 const Vector3& converted_position, int leg_index,
46 const Vector3& center_of_mass_global, const Quaternion& robot_quat,
47 const bool consider_rot) const override;
48
50 const Vector3& converted_position,
51 const Vector3& center_of_mass_global, const Quaternion& robot_quat,
52 const bool consider_rot) const override;
53
55 const Vector3& converted_position, int leg_index) const;
56
58 const Vector3& converted_position, int leg_index) const;
59
60
61 Vector3 GetFreeLegPosLegCoordinate(int leg_index) const noexcept override;
62
63 Vector3 GetLegBasePosRobotCoordinate(int leg_index) const noexcept override;
64
65 float GetGroundHeightMarginMin() const noexcept override;
66
67 float GetGroundHeightMarginMax() const noexcept override;
68
69
70 bool IsLegInRange(int leg_index, const Vector3& leg_pos) const override;
71
73 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const override;
74
76 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const override;
77
78 bool IsStable(const leg_func::LegStateBit& leg_state,
79 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const override;
80
82 const RobotStateNode& node,
83 const DividedMapState& devide_map) const override;
84
85private:
86 static constexpr int kMaxLegRSize{ 200 };
87
88
89 std::array<float, kMaxLegRSize> InitMaxLegR() const;
90 std::array<Vector2, HexapodConst::kLegNum> InitMinLegPosXY() const;
91 std::array<Vector2, HexapodConst::kLegNum> InitMaxLegPosXY() const;
92
94 const float kBodyLiftingHeightMin;
95
97 const float kBodyLiftingHeightMax;
98
99 const float kMovableCoxaAngleMin;
100 const float kMovableCoxaAngleMax;
101
102 const float kMinLegR;
103 const float kMaxLegR;
104
105 const float kFreeLegHeight;
106 const float kStableMargin;
107
108 const float kMinLegDistance;
109
112 std::array<float, kMaxLegRSize> kMaxLegRArray;
113
115 std::array<Vector2, HexapodConst::kLegNum> kMinLegPosXY;
116
118 std::array<Vector2, HexapodConst::kLegNum> kMaxLegPosXY;
119
120
122 const std::array<Vector3, HexapodConst::kLegNum> leg_base_pos_robot_coordinate_;
123
125 const std::array<Vector3, HexapodConst::kLegNum> free_leg_pos_leg_coordinate_;
126};
127
128} // namespace designlab
129
130
131#endif // DESIGNLAB_XR_R1_H_
マップを格子状に分割して管理するクラス.
ロボットは重心位置・アクチュエータなど様々な点を基準とする座標系を持つ. これらを相互に変換する処理のインターフェース.
間接角度や角速度を計算する処理のインターフェース.
6脚ロボットが有効な姿勢をとっているかを チェックする処理のインターフェース.
6脚ロボットの状態を表示するクラス.
bool IsStable(const leg_func::LegStateBit &leg_state, const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const override
安定余裕を用いて,静的に安定しているかどうかを判定する.
Definition xr_r1.cpp:514
float GetGroundHeightMarginMax() const noexcept override
地面の最大高さと重心位置を最大どれだけ離すかを返す.
Definition xr_r1.cpp:463
bool IsLegInterfering(const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const override
脚が他の脚と干渉しているかどうかを判定する.
Definition xr_r1.cpp:427
float GetGroundHeightMarginMin() const noexcept override
地面の最大高さと重心位置を最小どれだけ離すかを返す.
Definition xr_r1.cpp:459
Vector3 GetFreeLegPosLegCoordinate(int leg_index) const noexcept override
遊脚する位置を返す,脚座標系.
Definition xr_r1.cpp:368
bool IsBodyInterferingWithGround(const RobotStateNode &node, const DividedMapState &devide_map) const override
胴体が地面と干渉しているかどうかを判定する.
Definition xr_r1.cpp:520
bool IsValidJointState(const int leg_index, const Vector3 &leg_pos, const HexapodJointState &joint_state) const noexcept override
指定した脚のHexapodJointStateが正しく計算できているかを調べる. 目標座標に届かない場合や,間接の可動範囲外まで動いてしまう場合, 戻り値は false になる.
Definition xr_r1.cpp:258
HexapodJointState CalculateJointState(const int leg_index, const Vector3 &leg_pos) const noexcept override
指定した脚の関節のグローバル座標と,角度を計算する. 重たいのでグラフ探索や,描画処理中にループで使用することは推奨しない. 間接の可動範囲外まで動いてしまう場合でも,...
Definition xr_r1.cpp:52
Vector3 ConvertGlobalToLegCoordinate(const Vector3 &converted_position, int leg_index, const Vector3 &center_of_mass_global, const Quaternion &robot_quat, const bool consider_rot) const override
グローバル座標系で表現されている座標を,脚座標系に変換する.
Definition xr_r1.cpp:302
float CalculateStabilityMargin(const leg_func::LegStateBit &leg_state, const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const override
安定余裕(Stability Margin)を計算する. 詳しくは「不整地における歩行機械の静的安定性評価基準」 という論文を読んで欲しい. 接地脚を繋いで作られる多角形の辺と重心の距離の最小値を計...
Definition xr_r1.cpp:467
Vector3 ConvertLegToRobotCoordinate(const Vector3 &converted_position, int leg_index) const
脚座標系で表現されている座標を,ロボット座標系に変換する.
Definition xr_r1.cpp:362
bool IsLegInRange(int leg_index, const Vector3 &leg_pos) const override
脚が可動範囲内にあるかどうかを判定する.
Definition xr_r1.cpp:385
Vector3 GetLegBasePosRobotCoordinate(int leg_index) const noexcept override
脚の付け根の座標(leg base position )を取得する.ロボット座標系.
Definition xr_r1.cpp:376
Vector3 ConvertRobotToGlobalCoordinate(const Vector3 &converted_position, const Vector3 &center_of_mass_global, const Quaternion &robot_quat, const bool consider_rot) const override
ロボット座標系で表現されている座標を,グローバル座標系に変換する.
Definition xr_r1.cpp:344
Vector3 ConvertRobotToLegCoordinate(const Vector3 &converted_position, int leg_index) const
ロボット座標系で表現されている座標を,脚座標系に変換する.
Definition xr_r1.cpp:357
Vector3 ConvertLegToGlobalCoordinate(const Vector3 &converted_position, int leg_index, const Vector3 &center_of_mass_global, const Quaternion &robot_quat, const bool consider_rot) const override
脚座標系で表現されている座標を,グローバル座標系に変換する.
Definition xr_r1.cpp:324
std::bitset< kLegStateBitNum > LegStateBit
脚状態を保存する型.28bitのビット型.
Definition leg_state.h:55
ロボットの関節の状態を表す構造体.
クォータニオンを表す構造体.
グラフ構造のためのノード(頂点).
3次元の位置ベクトルを表す構造体.