GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
interface_hexapod_posture_validator.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_INTERFACE_HEXAPOD_POSTURE_VALIDATOR_H_
9#define DESIGNLAB_INTERFACE_HEXAPOD_POSTURE_VALIDATOR_H_
10
11#include <array>
12
13#include "divided_map_state.h"
14#include "hexapod_const.h"
15#include "leg_state.h"
16#include "math_vector3.h"
17#include "robot_state_node.h"
18
19
20namespace designlab
21{
22
27{
28public:
29 virtual ~IHexapodPostureValidator() = default;
30
31
37 virtual bool IsLegInRange(const int leg_index, const Vector3& leg_pos) const = 0;
38
45 const leg_func::LegStateBit leg_state,
46 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const
47 {
48 for (int i = 0; i < HexapodConst::kLegNum; i++)
49 {
50 if (leg_func::IsGrounded(leg_state, i) && !IsLegInRange(i, leg_pos[i]))
51 {
52 return false;
53 }
54 }
55
56 return true;
57 }
58
63 virtual bool IsLegInterfering(
64 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const = 0;
65
74 virtual float CalculateStabilityMargin(const leg_func::LegStateBit& leg_state,
75 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const = 0;
76
82 virtual bool IsStable(const leg_func::LegStateBit& leg_state,
83 const std::array<Vector3, HexapodConst::kLegNum>& leg_pos) const = 0;
84
90 const RobotStateNode& node, const DividedMapState& divided_map) const = 0;
91};
92
93} // namespace designlab
94
95
96#endif // DESIGNLAB_INTERFACE_HEXAPOD_POSTURE_VALIDATOR_H_
マップを格子状に分割して管理するクラス.
static constexpr int kLegNum
6脚ロボットが有効な姿勢をとっているかを チェックする処理のインターフェース.
virtual float CalculateStabilityMargin(const leg_func::LegStateBit &leg_state, const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const =0
安定余裕(Stability Margin)を計算する. 詳しくは「不整地における歩行機械の静的安定性評価基準」 という論文を読んで欲しい. 接地脚を繋いで作られる多角形の辺と重心の距離の最小値を計...
virtual ~IHexapodPostureValidator()=default
bool IsAllLegInRange(const leg_func::LegStateBit leg_state, const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const
全ての脚が可動範囲内にあるかどうかを判定する.
virtual bool IsLegInterfering(const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const =0
脚が他の脚と干渉しているかどうかを判定する.
virtual bool IsLegInRange(const int leg_index, const Vector3 &leg_pos) const =0
脚が可動範囲内にあるかどうかを判定する.
virtual bool IsBodyInterferingWithGround(const RobotStateNode &node, const DividedMapState &divided_map) const =0
胴体が地面と干渉しているかどうかを判定する.
virtual bool IsStable(const leg_func::LegStateBit &leg_state, const std::array< Vector3, HexapodConst::kLegNum > &leg_pos) const =0
安定余裕を用いて,静的に安定しているかどうかを判定する.
bool IsGrounded(const LegStateBit &leg_state, const int leg_index)
脚番号 leg_index 0 ~ 5 に応じて,その脚が接地しているかを調べる. 脚は右前脚を0番として,時計回りに0,1,2,3,4,5となる.左前足が5番.
Definition leg_state.cpp:43
std::bitset< kLegStateBitNum > LegStateBit
脚状態を保存する型.28bitのビット型.
Definition leg_state.h:56
グラフ構造のためのノード(頂点).旧名 LNODE
3次元の位置ベクトルを表す構造体.