GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
xr_r1_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_XR_R1_CONST_H_
9#define DESIGNLAB_XR_R1_CONST_H_
10
11#include <array>
12
13#include "cassert_define.h"
14#include "math_util.h"
15
16
17namespace designlab {
18
23class XrR1Const final {
24private:
25 constexpr static int kPhantomXLegNum = 6;
26
27public:
28 // コンストラクタとコピーコンストラクタを削除し,実体を生成できないようにする.
29 XrR1Const() = delete;
30 XrR1Const(const XrR1Const& other) = delete;
31 XrR1Const& operator=(const XrR1Const& other) = delete;
32 XrR1Const(XrR1Const&& other) = delete;
33
35 constexpr static std::array<float, kPhantomXLegNum> kCoxaDefaultAngle = {
42 };
43
45 constexpr static float kCoxaAngleMin = math_util::ConvertDegToRad(-90.0f);
46
48 constexpr static float kCoxaAngleMax = math_util::ConvertDegToRad(90.0f);
49
50
52 constexpr static float kFemurAngleMin = math_util::ConvertDegToRad(-90.0f);
53
55 constexpr static float kFemurAngleMax = math_util::ConvertDegToRad(90.0f);
56
57
59 constexpr static float kTibiaAngleMin = math_util::ConvertDegToRad(-170.0f);
60
62 constexpr static float kTibiaAngleMax = math_util::ConvertDegToRad(0.0f);
63
64
65 constexpr static float kCoxaLength = 45.0f;
66 constexpr static float kFemurLength = 75.0f;
67 constexpr static float kTibiaLength = 140.0f;
68
70 constexpr static float kCoxaBaseOffsetY = 59.f;
71
73 constexpr static float kCenterCoxaBaseOffsetY = 91.5f;
74
76 constexpr static float kCoxaBaseOffsetX = 120.f;
77
79 constexpr static float kCoxaBaseOffsetZ = 0.f;
80
82 constexpr static float kBodyHeight = 45.0f;
83
84
89 constexpr static bool IsValidCoxaAngle(const int leg_index, const float angle) noexcept {
90 // 0 <= leg_index < kPhantomXLegNum であることを保証する.
91 assert(0 <= leg_index);
92 assert(leg_index < kPhantomXLegNum);
93
94 return (kCoxaAngleMin + kCoxaDefaultAngle[leg_index] <= angle &&
95 angle <= kCoxaAngleMax + kCoxaDefaultAngle[leg_index]);
96 };
97
101 constexpr static bool IsValidFemurAngle(const float angle) noexcept {
102 return kFemurAngleMin <= angle && angle <= kFemurAngleMax;
103 };
104
108 constexpr static bool IsValidTibiaAngle(const float angle) noexcept {
109 return kTibiaAngleMin <= angle && angle <= kTibiaAngleMax;
110 };
111
112
113 static_assert(kCoxaAngleMin < kCoxaAngleMax,
114 "kCoxaAngleMax > Min is required.");
115 static_assert(kFemurAngleMin < kFemurAngleMax,
116 "kFemurAngleMax > Min is required.");
117 static_assert(kTibiaAngleMin < kTibiaAngleMax,
118 "kTibiaAngleMax > Min is required.");
119
120 static_assert(kCoxaLength > 0.f,
121 "kCoxaLength and Coxa Link must be positive.");
122 static_assert(kFemurLength > 0.f,
123 "kFemurLength and Femur Link must be positive.");
124 static_assert(kTibiaLength > 0.f,
125 "kTibiaLength and Tibia Link must be positive.");
126};
127
128} // namespace designlab
129
130
131#endif // DESIGNLAB_XR_R1_CONST_H_
static constexpr float kTibiaAngleMin
第2関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
Definition xr_r1_const.h:59
XrR1Const(const XrR1Const &other)=delete
static constexpr float kCoxaBaseOffsetX
coxa linkの付け根までの長さ(上方向)[mm].
Definition xr_r1_const.h:76
static constexpr float kBodyHeight
Definition xr_r1_const.h:82
static constexpr bool IsValidCoxaAngle(const int leg_index, const float angle) noexcept
第1関節の角度が有効な範囲内かどうかを判定する.
Definition xr_r1_const.h:89
XrR1Const(XrR1Const &&other)=delete
static constexpr float kCoxaAngleMin
第1関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
Definition xr_r1_const.h:45
static constexpr std::array< float, kPhantomXLegNum > kCoxaDefaultAngle
第1関節の初期角度[rad]
Definition xr_r1_const.h:35
static constexpr float kFemurAngleMin
第2関節の可動範囲の最大値[rad].詳しくは referenceフォルダ参照.
Definition xr_r1_const.h:52
static constexpr float kFemurLength
第2関節部の長さ[mm].
Definition xr_r1_const.h:66
static constexpr float kCoxaBaseOffsetY
coxa linkの付け根(中央)までの長さ[mm].
Definition xr_r1_const.h:70
static constexpr float kCoxaLength
第1関節部の長さ[mm].
Definition xr_r1_const.h:65
static constexpr bool IsValidFemurAngle(const float angle) noexcept
第2関節の角度が有効な範囲内かどうかを判定する.
static constexpr float kTibiaLength
第3関節部の長さ[mm].
Definition xr_r1_const.h:67
static constexpr float kTibiaAngleMax
Definition xr_r1_const.h:62
static constexpr float kCoxaBaseOffsetZ
胴体の高さ[mm].
Definition xr_r1_const.h:79
XrR1Const & operator=(const XrR1Const &other)=delete
static constexpr bool IsValidTibiaAngle(const float angle) noexcept
第3関節の角度が有効な範囲内かどうかを判定する.
static constexpr float kCoxaAngleMax
第2関節の可動範囲の最小値[rad].詳しくは referenceフォルダ参照.
Definition xr_r1_const.h:48
static constexpr float kFemurAngleMax
第2関節の可動範囲の最小値[rad].詳しくは referenceフォルダ参照.
Definition xr_r1_const.h:55
static constexpr float kCenterCoxaBaseOffsetY
coxa linkの付け根(前方・後方)までの長さ[mm].
Definition xr_r1_const.h:73
constexpr T ConvertDegToRad(const T deg) noexcept
角度を [deg] から [rad] に変換する関数.
Definition math_util.h:119