GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
型定義 | 関数 | 変数
designlab::leg_func 名前空間

このプログラムでは脚状態をビット(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より小さい数字.

型定義詳解

◆ LegGroundedBit

脚の遊脚・接地を表す型.6bitのビット型.接地が 1 遊脚が 0.

leg_state.h59 行目に定義があります。

◆ LegStateBit

using designlab::leg_func::LegStateBit = typedef std::bitset<kLegStateBitNum>

脚状態を保存する型.28bitのビット型.

leg_state.h56 行目に定義があります。

関数詳解

◆ ChangeAllLegGround()

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.cpp233 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ ChangeDiscreteComPos()

void designlab::leg_func::ChangeDiscreteComPos ( enums::DiscreteComPos  new_com_pattern,
LegStateBit leg_state 
)

重心のデータを変更する.

引数
[in]leg_state現在の脚状態.
[in]new_com_pattern新しい重心パターン.
戻り値
変更した重心パターンを返す.

leg_state.cpp244 行目に定義があります。

被呼び出し関係図:

◆ ChangeDiscreteLegPos()

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.cpp178 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ ChangeGround()

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.cpp210 行目に定義があります。

被呼び出し関係図:

◆ ChangeLegState()

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.cpp160 行目に定義があります。

呼び出し関係図:

◆ GetDiscreteComPos()

enums::DiscreteComPos designlab::leg_func::GetDiscreteComPos ( const LegStateBit leg_state)

現在の脚状態から重心パターンを取得する.

引数
[in]leg_state現在の脚状態.
戻り値
重心パターンを返す.

leg_state.cpp151 行目に定義があります。

被呼び出し関係図:

◆ GetDiscreteLegPos()

enums::DiscreteLegPos designlab::leg_func::GetDiscreteLegPos ( const LegStateBit leg_state,
int  leg_index 
)

脚状態を取得する.

引数
[in]leg_state現在の脚状態.
[in]leg_indexどの脚の状態を取得するか. 0 ~ 5 の整数で入力する.
戻り値
離散化された脚の位置を返す.

leg_state.cpp137 行目に定義があります。

被呼び出し関係図:

◆ GetGroundedLegIndexByVector()

void designlab::leg_func::GetGroundedLegIndexByVector ( const LegStateBit leg_state,
std::vector< int > *  res_index 
)

接地している脚の脚番号0~5を,引数で参照渡しする関数.

引数
[in]leg_state現在の脚状態.
[out]res_index接地している脚の脚番号を格納する変数.空であること.

leg_state.cpp103 行目に定義があります。

呼び出し関係図:

◆ GetGroundedLegNum()

int designlab::leg_func::GetGroundedLegNum ( const LegStateBit leg_state)

接地している脚の本数を返す関数.

引数
[in]leg_state現在の脚状態.
戻り値
接地している脚の本数.

leg_state.cpp81 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ GetLegGroundedBit()

LegGroundedBit designlab::leg_func::GetLegGroundedBit ( const LegStateBit leg_state)

脚が接地しているなら1,遊脚を0としたビット列で遊脚・接地脚の状態を返す.
例えば 0 番脚のみが遊脚しているなら 0b111 110 を返す.

引数
[in]leg_state現在の脚状態.
戻り値
脚が接地しているなら1,遊脚を0としたビット列で遊脚・接地脚の状態を返す.

leg_state.cpp62 行目に定義があります。

呼び出し関係図:

◆ GetLiftedLegIndexByVector()

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.cpp120 行目に定義があります。

呼び出し関係図:

◆ GetLiftedLegNum()

int designlab::leg_func::GetLiftedLegNum ( const LegStateBit leg_state)

遊脚している脚の本数を返す関数.

引数
[in]leg_state現在の脚状態.
戻り値
遊脚している脚の本数.

leg_state.cpp98 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ IsGrounded()

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.cpp43 行目に定義があります。

被呼び出し関係図:

◆ kLegPosMaskBit()

constexpr LegStateBit designlab::leg_func::kLegPosMaskBit ( 0b0111  )
constexpr

脚位置は4bitの下位三桁で管理されるので,そこをマスクする.

被呼び出し関係図:

◆ kLegStateMaskBit()

constexpr LegStateBit designlab::leg_func::kLegStateMaskBit ( 0b1111  )
constexpr

脚状態は4bitで管理されるので,そこをマスクする.

◆ MakeLegStateBit()

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離散化した脚位置を表す変数.
戻り値
LegStateBit 作成した脚状態を返す.

leg_state.cpp15 行目に定義があります。

被呼び出し関係図:

変数詳解

◆ kComPosBitNum

constexpr int designlab::leg_func::kComPosBitNum = 4
constexpr

重心パターンを表すビット数.

leg_state.h50 行目に定義があります。

◆ kComStateMaskBit

constexpr LegStateBit designlab::leg_func::kComStateMaskBit = (0b1111 << kShiftToComNum)
constexpr

重心パターンを保存するビットをマスクするビット.

leg_state.h76 行目に定義があります。

◆ kLegPosBitNum

constexpr int designlab::leg_func::kLegPosBitNum = 4
constexpr

脚位置を表すビット数.離散化された脚位置は3bit,遊脚・接地は1bit.あわせて4bit.

leg_state.h48 行目に定義があります。

◆ kLegStateBitNum

constexpr int designlab::leg_func::kLegStateBitNum = HexapodConst::kLegNum * kLegPosBitNum + kComPosBitNum
constexpr

脚状態を保存するビット数.28bit.

leg_state.h53 行目に定義があります。

◆ kShiftToComNum

constexpr int designlab::leg_func::kShiftToComNum = HexapodConst::kLegNum * 4
constexpr

重心パターンを保存するビットまで行くために,どれだけビットをシフトするか.

leg_state.h73 行目に定義があります。