GaitGeneration by Graph Search
|
グラフ構造のためのノード(頂点).旧名 LNODE [詳解]
#include <robot_state_node.h>
公開メンバ関数 | |
constexpr | RobotStateNode () |
constexpr | RobotStateNode (const leg_func::LegStateBit &state, const std::array< Vector3, HexapodConst::kLegNum > &pos, const std::array< Vector3, HexapodConst::kLegNum > &ref_pos, const Vector3 &com, const Quaternion &q, const HexapodMove move, const int parent, const int d) |
RobotStateNode (const RobotStateNode &other)=default | |
RobotStateNode (RobotStateNode &&other) noexcept=default | |
RobotStateNode & | operator= (const RobotStateNode &other)=default |
~RobotStateNode ()=default | |
void | ChangeGlobalCenterOfMass (const designlab::Vector3 &new_com, bool do_change_leg_base_pos) |
重心位置を変更する関数. | |
void | ChangePosture (const std::shared_ptr< const IHexapodCoordinateConverter > &converter_ptr, const designlab::Quaternion &new_posture) |
クォータニオンを変更し,胴体を回転させる関数. | |
void | ChangeLootNode () |
自身を根ノードに変更する関数. depthを0に,parent_numを-1に初期化する. | |
constexpr void | ChangeToNextNode (const int parent_index_, const HexapodMove next_move_) |
次の動作を設定する関数. 深さを一つ深くして,親と次の動作を設定する. | |
constexpr bool | IsLootNode () const |
自身が根ノードであるか判定する. | |
std::string | ToString () const |
ノードの情報を文字列に変換する関数. デバッグ用に詳細な情報を出力する. | |
std::string | ToCsvString () const |
ノードの情報を csv形式の文字列に変換する関数. カンマ区切りで出力する. | |
constexpr bool | operator== (const RobotStateNode &other) const |
比較演算子 | |
constexpr bool | operator!= (const RobotStateNode &other) |
静的公開メンバ関数 | |
static RobotStateNode | FromString (const std::string &str) |
文字列をノードの情報に変換する関数. | |
公開変数類 | |
leg_func::LegStateBit | leg_state |
[4 byte] 脚状態,重心パターンを bitで表す.旧名 leg_con. | |
std::array< Vector3, HexapodConst::kLegNum > | leg_pos |
[4 * 3 * 6 = 72 byte] 脚先の座標.(coxa(脚の付け根)を原点とする) | |
std::array< Vector3, HexapodConst::kLegNum > | leg_reference_pos |
Vector3 | center_of_mass_global_coord |
[4 * 3 = 12byte] グローバル座標系における重心の位置.旧名 GCOM | |
Quaternion | posture |
[4 * 4 = 16byte] 姿勢を表すクォータニオン. | |
HexapodMove | next_move |
int | parent_index |
int | depth |
[4 byte] 自身の深さ.一番上の親が深さ0となる. | |
静的公開変数類 | |
static constexpr int | kNoParentIndex = -1 |
親がいないことを表す値. | |
グラフ構造のためのノード(頂点).旧名 LNODE
この構造体は,グラフ構造のためのノード(頂点)である.
ノードは,脚の状態,脚先の座標,脚接地の基準点の座標,重心の位置, ロールピッチヨーの回転角度,親ノードの番号,次の動作,深さを持つ.
すなわちロボットの現在の状態を表している. しかし,脚の関節角度など一部の情報を持ってはいない.
これは実時間内に,グラフ探索を終えるための工夫である.
先行研究のプログラムに比べて大きく内容を変更したが, 基本的な構造は同じである. また,ロボットの座標系は通例,進行方向をXの正,ロボットの真上をZの正, y軸は右手座標系でとる. このプログラムもそのように統一する.
過去のプログラムではそれがバラバラになっていたため, 途中で座標系を変換する処理が多々あったが, 煩雑なうえ,時間がかかるので,全て統一する.
robot_state_node.h の 46 行目に定義があります。
|
inlineconstexpr |
robot_state_node.h の 50 行目に定義があります。
|
inlineconstexpr |
robot_state_node.h の 70 行目に定義があります。
|
default |
|
defaultnoexcept |
|
default |
void designlab::RobotStateNode::ChangeGlobalCenterOfMass | ( | const designlab::Vector3 & | new_com, |
bool | do_change_leg_base_pos | ||
) |
重心位置を変更する関数.
[in] | new_com | 新しい重心位置.グローバル座標系. |
[in] | do_change_leg_base_pos | 遊脚中の脚の接地基準地点の座標を変更するかどうか |
脚位置は脚の付け根からの相対座標で表現されている.
遊脚している脚は一緒に移動するが, 接地脚は移動しないため座標を変更してやる必要がある.
robot_state_node.cpp の 22 行目に定義があります。
|
inline |
自身を根ノードに変更する関数.
depthを0に,parent_numを-1に初期化する.
robot_state_node.h の 114 行目に定義があります。
void designlab::RobotStateNode::ChangePosture | ( | const std::shared_ptr< const IHexapodCoordinateConverter > & | converter_ptr, |
const designlab::Quaternion & | new_posture | ||
) |
クォータニオンを変更し,胴体を回転させる関数.
[in] | converter_ptr | 座標変換クラスのポインタ. |
[in] | new_posture | 新しい姿勢.単位クォータニオン. |
robot_state_node.cpp の 43 行目に定義があります。
|
inlineconstexpr |
次の動作を設定する関数.
深さを一つ深くして,親と次の動作を設定する.
[in] | parent_index_ | 親ノードの番号. |
[in] | next_move_ | 次の動作. |
robot_state_node.h の 125 行目に定義があります。
|
static |
文字列をノードの情報に変換する関数.
[in] | str | ノードの情報をまとめた文字列,カンマ区切り. |
robot_state_node.cpp の 147 行目に定義があります。
|
inlineconstexpr |
自身が根ノードであるか判定する.
true | 自身が根ノードである. |
false | 自身が根ノードでない. |
robot_state_node.h の 137 行目に定義があります。
|
inlineconstexpr |
robot_state_node.h の 185 行目に定義があります。
|
default |
|
inlineconstexpr |
比較演算子
robot_state_node.h の 159 行目に定義があります。
std::string designlab::RobotStateNode::ToCsvString | ( | ) | const |
ノードの情報を csv形式の文字列に変換する関数.
カンマ区切りで出力する.
robot_state_node.cpp の 138 行目に定義があります。
std::string designlab::RobotStateNode::ToString | ( | ) | const |
ノードの情報を文字列に変換する関数.
デバッグ用に詳細な情報を出力する.
robot_state_node.cpp の 70 行目に定義があります。
Vector3 designlab::RobotStateNode::center_of_mass_global_coord |
[4 * 3 = 12byte] グローバル座標系における重心の位置.旧名 GCOM
robot_state_node.h の 202 行目に定義があります。
int designlab::RobotStateNode::depth |
[4 byte] 自身の深さ.一番上の親が深さ0となる.
robot_state_node.h の 217 行目に定義があります。
|
staticconstexpr |
親がいないことを表す値.
robot_state_node.h の 48 行目に定義があります。
std::array<Vector3, HexapodConst::kLegNum> designlab::RobotStateNode::leg_pos |
[4 * 3 * 6 = 72 byte] 脚先の座標.(coxa(脚の付け根)を原点とする)
robot_state_node.h の 195 行目に定義があります。
std::array<Vector3, HexapodConst::kLegNum> designlab::RobotStateNode::leg_reference_pos |
[4 * 3 * 6 = 72 byte] 脚接地の基準点の座標. 離散化した時に4になる地点.(coxa(脚の付け根)を原点とする)
robot_state_node.h の 199 行目に定義があります。
leg_func::LegStateBit designlab::RobotStateNode::leg_state |
[4 byte] 脚状態,重心パターンを bitで表す.旧名 leg_con.
robot_state_node.h の 192 行目に定義があります。
HexapodMove designlab::RobotStateNode::next_move |
[4 byte] 次の動作を代入する. 元のプログラムでは int debug が担っていた仕事を行う.
robot_state_node.h の 210 行目に定義があります。
int designlab::RobotStateNode::parent_index |
[4 byte] 自身の親が vector 配列のどこにいるのかを記録する. 親がいないなら負の値をとる.
robot_state_node.h の 214 行目に定義があります。
Quaternion designlab::RobotStateNode::posture |
[4 * 4 = 16byte] 姿勢を表すクォータニオン.
robot_state_node.h の 205 行目に定義があります。