GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
node_creator_builder_ground_conforming_rot.cpp
[詳解]
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
9
10#include <vector>
11
12#include "cassert_define.h"
21
22namespace designlab {
23
25 const std::shared_ptr<const IHexapodCoordinateConverter>& converter_ptr,
26 const std::shared_ptr<const IHexapodStatePresenter>& presenter_ptr,
27 const std::shared_ptr<const IHexapodPostureValidator>& checker_ptr)
28 : converter_ptr_(converter_ptr),
29 presenter_ptr_(presenter_ptr),
30 checker_ptr_(checker_ptr) {
31 assert(converter_ptr_ != nullptr);
32 assert(presenter_ptr_ != nullptr);
33 assert(checker_ptr_ != nullptr);
34}
35
37 const DividedMapState& map,
38 std::map<HexapodMove, std::unique_ptr<INodeCreator>>* node_creator) const {
39 using enum DiscreteLegPos;
40 using enum HexapodMove;
41
42 assert(node_creator != nullptr); // node_creator が nullptr でない.
43 assert(node_creator->size() == 0); // node_creator は空でなければならない.
44
45 // 追加したい場合,以下のように記述する.
46 // (*node_creator)[HexapodMove::???] =
47 // std::make_unique<クラス名>(クラスのコンストラクタの引数);
48 // この場合,HexapodMove::???のノードを作成するクラスは,^~~~~~ である.
49
50 const auto hierarchy_list = std::vector<DiscreteLegPos>{
55
56 (*node_creator)[kLegHierarchyChange] =
57 std::make_unique<NodeCreatorLegHierarchy>(kLegUpDown, hierarchy_list);
58
59 (*node_creator)[kLegUpDown] = std::make_unique<NodeCreatorLegUpDown>(
60 map, converter_ptr_, presenter_ptr_, checker_ptr_, kComUpDown);
61
62 (*node_creator)[kComUpDown] = std::make_unique<NodeCreatorComUpDown>(
63 map, converter_ptr_, presenter_ptr_, checker_ptr_, kComMove);
64
65 (*node_creator)[HexapodMove::kComMove] =
66 std::make_unique<NodeCreatorComMoveStraight>(
67 map, converter_ptr_, presenter_ptr_, checker_ptr_, kBodyPitchRot);
68
69 (*node_creator)[kBodyPitchRot] = std::make_unique<NodeCreatorBodyRot>(
70 map, converter_ptr_, checker_ptr_, Vector3{0, 1, 0}, kLegHierarchyChange);
71}
72
73} // namespace designlab
マップを格子状に分割して管理するクラス.
NodeCreatorBuilderGroundConformingRot(const std::shared_ptr< const IHexapodCoordinateConverter > &converter_ptr, const std::shared_ptr< const IHexapodStatePresenter > &presenter_ptr, const std::shared_ptr< const IHexapodPostureValidator > &checker_ptr)
void Build(const DividedMapState &map, std::map< HexapodMove, std::unique_ptr< INodeCreator > > *node_creator) const override
INodeCreatorを生成する.
DiscreteLegPos
離散化された脚位置を表す列挙体. 先行研究では 1~7の int型の数値で表現されているが, 可読性を上げるために列挙体にした. 離散化された脚位置は 3bit (0 ~ 7)の範囲で表現される...
@ kUpperBack
現在の位置より後方かつ上方にある.
@ kBack
現在の位置より後方にある.
@ kCenter
現在の位置にある.
@ kUpperFront
現在の位置より前方かつ上方にある.
@ kFront
現在の位置より前方にある.
@ kLowerBack
現在の位置より後方かつ下方にある.
@ kLowerFront
現在の位置より前方かつ下方にある.
HexapodMove
ロボットが次にどの動作をするのかを表す列挙体.
@ kBodyPitchRot
ピッチ軸周りの回転.
@ kLegUpDown
脚の上下移動.
@ kComMove
重心の平行移動.Center Of Massで重心のこと.
@ kComUpDown
重心の上下移動.
@ kLegHierarchyChange
脚の平行移動.脚の階層を変更する.
3次元の位置ベクトルを表す構造体.