20 const std::shared_ptr<const IHexapodCoordinateConverter>& converter_ptr,
21 const std::shared_ptr<const IHexapodStatePresenter>& presenter_ptr,
22 const std::shared_ptr<const IHexapodPostureValidator>& checker_ptr,
25 maker_(converter_ptr),
26 selector_(checker_ptr),
27 next_move_(next_move),
28 converter_ptr_(converter_ptr),
29 presenter_ptr_(presenter_ptr),
30 checker_ptr_(checker_ptr)
36 const int current_num,
37 std::vector<RobotStateNode>* output_graph)
const
39 std::array<ComPosAndPolygon, ComCandidatePolygonMaker::kMakePolygonNum> candidate_polygons;
48 if (!candidate_polygons[i].is_able) {
continue; }
52 if (selector_.
GetComFromPolygon(candidate_polygons[i].polygon, current_node, &result_com))
71 !checker_ptr_->IsBodyInterferingWithGround(next_node, map_))
73 (*output_graph).push_back(next_node);
79 if ((*output_graph).empty())
84 (*output_graph).push_back(next_node);
static constexpr int kMakePolygonNum
作成する多角形の数.
void MakeCandidatePolygon(const RobotStateNode &node, std::array< ComPosAndPolygon, kMakePolygonNum > *output_poly) const
現在のロボットの状態を表すノードから, 重心位置の候補地点を示す多角形を作成する.
bool GetComFromPolygon(const Polygon2 &polygon, const RobotStateNode ¤t_node, Vector3 *output_com) const
重心を求める.
static constexpr int kLegNum
void Create(const RobotStateNode ¤t_node, int current_num, std::vector< RobotStateNode > *output_graph) const override
現在のノードから次のノード群を生成する.
NodeCreatorComMove(const DividedMapState &devide_map, const std::shared_ptr< const IHexapodCoordinateConverter > &converter_ptr, const std::shared_ptr< const IHexapodStatePresenter > &presenter_ptr, const std::shared_ptr< const IHexapodPostureValidator > &checker_ptr, HexapodMove next_move)
void ChangeDiscreteLegPos(const int leg_index, const enums::DiscreteLegPos new_discretized_leg_pos, LegStateBit *leg_state)
脚の状態を変更する.遊脚を表すビットはそのまま.
void ChangeDiscreteComPos(const enums::DiscreteComPos new_com_pattern, LegStateBit *leg_state)
重心のデータを変更する.
HexapodMove
ロボットが次にどの動作をするのかを表す列挙体.
グラフ構造のためのノード(頂点).旧名 LNODE
std::array< Vector3, HexapodConst::kLegNum > leg_pos
[4 * 3 * 6 = 72 byte] 脚先の座標.(coxa(脚の付け根)を原点とする)
void ChangeGlobalCenterOfMass(const designlab::Vector3 &new_com, bool do_change_leg_base_pos)
重心位置を変更する関数.
leg_func::LegStateBit leg_state
[4 byte] 脚状態,重心パターンを bitで表す.旧名 leg_con.
constexpr void ChangeToNextNode(const int parent_index_, const HexapodMove next_move_)
次の動作を設定する関数. 深さを一つ深くして,親と次の動作を設定する.