GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
phantomx_mk2_const.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_PHANTOMX_MK2_CONST_H_
9#define DESIGNLAB_PHANTOMX_MK2_CONST_H_
10
11#include <array>
12
13#include "cassert_define.h"
14#include "math_util.h"
15
16
17namespace designlab {
18
30class PhantomXMkIIConst final {
31private:
32 constexpr static int kPhantomXLegNum = 6;
33
34public:
35 // コンストラクタとコピーコンストラクタを削除し,実体を生成できないようにする.
37 PhantomXMkIIConst(const PhantomXMkIIConst& other) = delete;
40
42 constexpr static std::array<float, kPhantomXLegNum> kCoxaDefaultAngle = {
49 };
50
52 constexpr static float kCoxaAngleMin = math_util::ConvertDegToRad(-81.0f);
53
55 constexpr static float kCoxaAngleMax = math_util::ConvertDegToRad(81.0f);
56
57
59 constexpr static float kFemurAngleMin = math_util::ConvertDegToRad(-105.0f);
60
62 constexpr static float kFemurAngleMax = math_util::ConvertDegToRad(99.0f);
63
64
66 constexpr static float kTibiaAngleMin = math_util::ConvertDegToRad(-145.0f);
67
69 constexpr static float kTibiaAngleMax = math_util::ConvertDegToRad(25.5f);
70
71
72 constexpr static float kCoxaLength = 52.0f;
73 constexpr static float kFemurLength = 66.0f;
74 constexpr static float kTibiaLength = 130.0f;
75
77 constexpr static float kCoxaBaseOffsetY = 61.f;
78
80 constexpr static float kCenterCoxaBaseOffsetY = 103.4f;
81
83 constexpr static float kCoxaBaseOffsetX = 122.f;
84
86 constexpr static float kCoxaBaseOffsetZ = 1.116f;
87
89 constexpr static float kBodyHeight = 40.0f;
90
91
96 constexpr static bool IsValidCoxaAngle(const int leg_index, const float angle) noexcept {
97 // 0 <= leg_index < kPhantomXLegNum であることを保証する.
98 assert(0 <= leg_index);
99 assert(leg_index < kPhantomXLegNum);
100
101 return (kCoxaAngleMin + kCoxaDefaultAngle[leg_index] <= angle &&
102 angle <= kCoxaAngleMax + kCoxaDefaultAngle[leg_index]);
103 };
104
108 constexpr static bool IsValidFemurAngle(const float angle) noexcept {
109 return kFemurAngleMin <= angle && angle <= kFemurAngleMax;
110 };
111
115 constexpr static bool IsValidTibiaAngle(const float angle) noexcept {
116 return kTibiaAngleMin <= angle && angle <= kTibiaAngleMax;
117 };
118
119
120 static_assert(kCoxaAngleMin < kCoxaAngleMax,
121 "kCoxaAngleMax > Min is required.");
122 static_assert(kFemurAngleMin < kFemurAngleMax,
123 "kFemurAngleMax > Min is required.");
124 static_assert(kTibiaAngleMin < kTibiaAngleMax,
125 "kTibiaAngleMax > Min is required.");
126
127 static_assert(kCoxaLength > 0.f,
128 "kCoxaLength and Coxa Link must be positive.");
129 static_assert(kFemurLength > 0.f,
130 "kFemurLength and Femur Link must be positive.");
131 static_assert(kTibiaLength > 0.f,
132 "kTibiaLength and Tibia Link must be positive.");
133};
134
135} // namespace designlab
136
137
138#endif // DESIGNLAB_PHANTOMX_MK2_CONST_H_
PhantomX mk-Ⅱ のパラメータを定数で表現したもの.
static constexpr float kFemurLength
第2関節部の長さ[mm].
static constexpr float kTibiaAngleMax
static constexpr float kFemurAngleMin
第2関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
static constexpr float kCoxaBaseOffsetY
coxa linkの付け根(中央)までの長さ[mm].
static constexpr float kFemurAngleMax
第2関節の可動範囲の最小値[rad].詳しくは referenceフォルダ参照.
PhantomXMkIIConst(PhantomXMkIIConst &&other)=delete
static constexpr float kCenterCoxaBaseOffsetY
coxa linkの付け根(前方・後方)までの長さ[mm].
static constexpr bool IsValidFemurAngle(const float angle) noexcept
第2関節の角度が有効な範囲内かどうかを判定する.
static constexpr float kCoxaLength
第1関節部の長さ[mm].
static constexpr bool IsValidTibiaAngle(const float angle) noexcept
第3関節の角度が有効な範囲内かどうかを判定する.
static constexpr float kCoxaAngleMin
第1関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
static constexpr float kTibiaAngleMin
第2関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
static constexpr float kTibiaLength
第3関節部の長さ[mm].
PhantomXMkIIConst(const PhantomXMkIIConst &other)=delete
static constexpr std::array< float, kPhantomXLegNum > kCoxaDefaultAngle
第1関節の初期角度[rad]
PhantomXMkIIConst & operator=(const PhantomXMkIIConst &other)=delete
static constexpr float kBodyHeight
static constexpr bool IsValidCoxaAngle(const int leg_index, const float angle) noexcept
第1関節の角度が有効な範囲内かどうかを判定する.
static constexpr float kCoxaBaseOffsetX
coxa linkの付け根までの長さ(上方向)[mm].
static constexpr float kCoxaBaseOffsetZ
胴体の高さ[mm].
static constexpr float kCoxaAngleMax
第2関節の可動範囲の最小値[rad].詳しくは referenceフォルダ参照.
constexpr T ConvertDegToRad(const T deg) noexcept
角度を [deg] から [rad] に変換する関数.
Definition math_util.h:119