GaitGeneration by Graph Search
|
このプログラムでは脚状態をビット(28bit)の情報で表す. そのデータを処理するための関数. [詳解]
型定義 | |
using | LegStateBit = std::bitset< kLegStateBitNum > |
脚状態を保存する型.28bitのビット型. | |
using | LegGroundedBit = std::bitset< HexapodConst::kLegNum > |
脚の遊脚・接地を表す型.6bitのビット型.接地が 1 遊脚が 0. | |
関数 | |
LegStateBit | MakeLegStateBit (enums::DiscreteComPos discrete_com_pos, const std::array< bool, HexapodConst::kLegNum > &is_ground, const std::array< enums::DiscreteLegPos, HexapodConst::kLegNum > &leg_pos) |
脚状態を作成して返す関数.脚状態は重心パターン, 脚の接地・遊脚,離散化した脚位置のデータが含まれる. | |
bool | IsGrounded (const LegStateBit &leg_state_bit, int leg_index) |
脚番号 leg_index 0 ~ 5 に応じて,その脚が接地しているかを調べる. 脚は右前脚を0番として,時計回りに0,1,2,3,4,5となる.左前足が5番. | |
LegGroundedBit | GetLegGroundedBit (const LegStateBit &leg_state) |
脚が接地しているなら1,遊脚を0としたビット列で遊脚・接地脚の状態を返す. 例えば 0 番脚のみが遊脚しているなら 0b111 110 を返す. | |
int | GetGroundedLegNum (const LegStateBit &leg_state) |
接地している脚の本数を返す関数. | |
int | GetLiftedLegNum (const LegStateBit &leg_state) |
遊脚している脚の本数を返す関数. | |
void | GetGroundedLegIndexByVector (const LegStateBit &leg_state, std::vector< int > *res_index) |
接地している脚の脚番号0~5を,引数で参照渡しする関数. | |
void | GetLiftedLegIndexByVector (const LegStateBit &leg_state, std::vector< int > *res_index) |
遊脚している脚の脚番号0~5を,引数_res_numberで参照渡しする関数. | |
enums::DiscreteLegPos | GetDiscreteLegPos (const LegStateBit &leg_state, int leg_index) |
脚状態を取得する. | |
enums::DiscreteComPos | GetDiscreteComPos (const LegStateBit &leg_state) |
現在の脚状態から重心パターンを取得する. | |
void | ChangeLegState (int leg_index, enums::DiscreteLegPos new_discretized_leg_pos, bool is_ground, LegStateBit *leg_state) |
脚の情報を変更する. | |
void | ChangeDiscreteLegPos (int leg_index, enums::DiscreteLegPos new_discretized_leg_pos, LegStateBit *leg_state) |
脚の状態を変更する.遊脚を表すビットはそのまま. | |
void | ChangeGround (int leg_index, bool is_ground, LegStateBit *leg_state) |
脚の接地・遊脚情報を変更する. | |
void | ChangeAllLegGround (const LegGroundedBit &is_ground_list, LegStateBit *leg_state) |
全ての脚の接地・遊脚情報を変更する. | |
void | ChangeDiscreteComPos (enums::DiscreteComPos new_com_pattern, LegStateBit *leg_state) |
重心のデータを変更する. | |
constexpr LegStateBit | kLegPosMaskBit (0b0111) |
脚位置は4bitの下位三桁で管理されるので,そこをマスクする. | |
constexpr LegStateBit | kLegStateMaskBit (0b1111) |
脚状態は4bitで管理されるので,そこをマスクする. | |
変数 | |
constexpr int | kLegPosBitNum = 4 |
脚位置を表すビット数.離散化された脚位置は3bit,遊脚・接地は1bit.あわせて4bit. | |
constexpr int | kComPosBitNum = 4 |
重心パターンを表すビット数. | |
constexpr int | kLegStateBitNum = HexapodConst::kLegNum * kLegPosBitNum + kComPosBitNum |
脚状態を保存するビット数.28bit. | |
constexpr int | kShiftToComNum = HexapodConst::kLegNum * 4 |
重心パターンを保存するビットまで行くために,どれだけビットをシフトするか. | |
constexpr LegStateBit | kComStateMaskBit = (0b1111 << kShiftToComNum) |
重心パターンを保存するビットをマスクするビット. | |
このプログラムでは脚状態をビット(28bit)の情報で表す. そのデータを処理するための関数.
脚状態って言ってるけど離散化された重心位置も入ってる.
1脚の脚状態を4bitで表す 最上位0:遊脚,1:接地. 残り3bitで離散化した脚位置.
離散化した脚位置は基準位置を4として,それより前にあるなら4より大きい数字, 後ろにあるならば4より小さい数字.
using designlab::leg_func::LegGroundedBit = typedef std::bitset<HexapodConst::kLegNum> |
脚の遊脚・接地を表す型.6bitのビット型.接地が 1 遊脚が 0.
leg_state.h の 59 行目に定義があります。
using designlab::leg_func::LegStateBit = typedef std::bitset<kLegStateBitNum> |
脚状態を保存する型.28bitのビット型.
leg_state.h の 56 行目に定義があります。
void designlab::leg_func::ChangeAllLegGround | ( | const LegGroundedBit & | is_ground_list, |
LegStateBit * | leg_state | ||
) |
全ての脚の接地・遊脚情報を変更する.
[in] | is_ground_list | 脚が接地しているかを表す.接地しているならば true. 遊脚しているならば false. |
[in,out] | leg_state | 現在の脚状態,これをもとに新しい脚状態を作成する. |
leg_state.cpp の 233 行目に定義があります。
void designlab::leg_func::ChangeDiscreteComPos | ( | enums::DiscreteComPos | new_com_pattern, |
LegStateBit * | leg_state | ||
) |
重心のデータを変更する.
[in] | leg_state | 現在の脚状態. |
[in] | new_com_pattern | 新しい重心パターン. |
leg_state.cpp の 244 行目に定義があります。
void designlab::leg_func::ChangeDiscreteLegPos | ( | int | leg_index, |
enums::DiscreteLegPos | new_discretized_leg_pos, | ||
LegStateBit * | leg_state | ||
) |
脚の状態を変更する.遊脚を表すビットはそのまま.
[in] | leg_index | 脚の番号.0~5の範囲内でなければアサートで止まる. |
[in] | new_discretized_leg_pos | 新しい脚状態. |
[in,out] | leg_state | 現在の脚状態,これをもとに新しい脚状態を作成する. |
leg_state.cpp の 178 行目に定義があります。
void designlab::leg_func::ChangeGround | ( | int | leg_index, |
bool | is_ground, | ||
LegStateBit * | leg_state | ||
) |
脚の接地・遊脚情報を変更する.
[in] | leg_index | 脚の番号.0~5の範囲内でなければアサートで止まる. |
[in] | is_ground | 脚が接地しているかを表す.接地しているならば true. 遊脚しているならば false. |
[in,out] | leg_state | 現在の脚状態,これをもとに新しい脚状態を作成する. |
leg_state.cpp の 210 行目に定義があります。
void designlab::leg_func::ChangeLegState | ( | int | leg_index, |
enums::DiscreteLegPos | new_discretized_leg_pos, | ||
bool | is_ground, | ||
LegStateBit * | leg_state | ||
) |
脚の情報を変更する.
[in] | leg_index | 脚の番号 0~5. |
[in] | new_discretized_leg_pos | 新しい脚状態. |
[in] | is_ground | 脚が接地しているかを表す.接地しているならば true. 遊脚しているならば false. |
[in,out] | leg_state | 現在の脚状態,これをもとに新しい脚状態を作成する. |
leg_state.cpp の 160 行目に定義があります。
enums::DiscreteComPos designlab::leg_func::GetDiscreteComPos | ( | const LegStateBit & | leg_state | ) |
現在の脚状態から重心パターンを取得する.
[in] | leg_state | 現在の脚状態. |
leg_state.cpp の 151 行目に定義があります。
enums::DiscreteLegPos designlab::leg_func::GetDiscreteLegPos | ( | const LegStateBit & | leg_state, |
int | leg_index | ||
) |
脚状態を取得する.
[in] | leg_state | 現在の脚状態. |
[in] | leg_index | どの脚の状態を取得するか. 0 ~ 5 の整数で入力する. |
leg_state.cpp の 137 行目に定義があります。
void designlab::leg_func::GetGroundedLegIndexByVector | ( | const LegStateBit & | leg_state, |
std::vector< int > * | res_index | ||
) |
接地している脚の脚番号0~5を,引数で参照渡しする関数.
[in] | leg_state | 現在の脚状態. |
[out] | res_index | 接地している脚の脚番号を格納する変数.空であること. |
leg_state.cpp の 103 行目に定義があります。
int designlab::leg_func::GetGroundedLegNum | ( | const LegStateBit & | leg_state | ) |
接地している脚の本数を返す関数.
[in] | leg_state | 現在の脚状態. |
leg_state.cpp の 81 行目に定義があります。
LegGroundedBit designlab::leg_func::GetLegGroundedBit | ( | const LegStateBit & | leg_state | ) |
脚が接地しているなら1,遊脚を0としたビット列で遊脚・接地脚の状態を返す.
例えば 0 番脚のみが遊脚しているなら 0b111 110 を返す.
[in] | leg_state | 現在の脚状態. |
leg_state.cpp の 62 行目に定義があります。
void designlab::leg_func::GetLiftedLegIndexByVector | ( | const LegStateBit & | leg_state, |
std::vector< int > * | res_index | ||
) |
遊脚している脚の脚番号0~5を,引数_res_numberで参照渡しする関数.
[in] | leg_state | 現在の脚状態. |
[out] | res_index | 遊脚している脚の脚番号を格納する変数.空であること. |
leg_state.cpp の 120 行目に定義があります。
int designlab::leg_func::GetLiftedLegNum | ( | const LegStateBit & | leg_state | ) |
遊脚している脚の本数を返す関数.
[in] | leg_state | 現在の脚状態. |
leg_state.cpp の 98 行目に定義があります。
bool designlab::leg_func::IsGrounded | ( | const LegStateBit & | leg_state_bit, |
int | leg_index | ||
) |
脚番号 leg_index 0 ~ 5 に応じて,その脚が接地しているかを調べる.
脚は右前脚を0番として,時計回りに0,1,2,3,4,5となる.左前足が5番.
[in] | leg_state_bit | 現在の脚状態. |
[in] | leg_index | どの脚を調べるか. 0 ~ 5 の整数で入力する. |
true | 脚が接地している. |
false | 脚が遊脚している. |
leg_state.cpp の 43 行目に定義があります。
|
constexpr |
脚位置は4bitの下位三桁で管理されるので,そこをマスクする.
|
constexpr |
脚状態は4bitで管理されるので,そこをマスクする.
LegStateBit designlab::leg_func::MakeLegStateBit | ( | enums::DiscreteComPos | discrete_com_pos, |
const std::array< bool, HexapodConst::kLegNum > & | is_ground, | ||
const std::array< enums::DiscreteLegPos, HexapodConst::kLegNum > & | leg_pos | ||
) |
脚状態を作成して返す関数.脚状態は重心パターン, 脚の接地・遊脚,離散化した脚位置のデータが含まれる.
[in] | discrete_com_pos | どの重心パターンか.詳しくは com_type.h に記述. |
[in] | is_ground | 脚が接地しているかを表す bool型の配列. 接地しているならば true.遊脚しているならば false. |
[in] | leg_pos | 離散化した脚位置を表す変数. |
leg_state.cpp の 15 行目に定義があります。
|
constexpr |
重心パターンを表すビット数.
leg_state.h の 50 行目に定義があります。
|
constexpr |
重心パターンを保存するビットをマスクするビット.
leg_state.h の 76 行目に定義があります。
|
constexpr |
脚位置を表すビット数.離散化された脚位置は3bit,遊脚・接地は1bit.あわせて4bit.
leg_state.h の 48 行目に定義があります。
|
constexpr |
脚状態を保存するビット数.28bit.
leg_state.h の 53 行目に定義があります。
|
constexpr |
重心パターンを保存するビットまで行くために,どれだけビットをシフトするか.
leg_state.h の 73 行目に定義があります。