17 const std::shared_ptr<const IHexapodCoordinateConverter>& converter_ptr,
18 const std::shared_ptr<const IHexapodStatePresenter>& presenter_ptr,
19 const std::shared_ptr<const IHexapodPostureValidator>& checker_ptr,
22 maker_(converter_ptr),
23 selector_(checker_ptr),
24 next_move_(next_move),
25 converter_ptr_(converter_ptr),
26 presenter_ptr_(presenter_ptr),
27 checker_ptr_(checker_ptr) {}
31 std::vector<RobotStateNode>* output_graph)
const {
32 std::array<ComPosAndPolygon, ComCandidatePolygonMaker::kMakePolygonNum>
41 if (!candidate_polygons[i].is_able) {
67 !checker_ptr_->IsBodyInterferingWithGround(next_node, map_)) {
68 (*output_graph).push_back(next_node);
74 if ((*output_graph).empty()) {
78 (*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 DiscreteLegPos new_discretized_leg_pos, LegStateBit *leg_state)
脚の状態を変更する.遊脚を表すビットはそのまま.
void ChangeDiscreteComPos(const enums::DiscreteComPos new_com_pattern, LegStateBit *leg_state)
重心のデータを変更する.
HexapodMove
ロボットが次にどの動作をするのかを表す列挙体.
std::array< Vector3, HexapodConst::kLegNum > leg_pos
[4 * 3 * 6 = 72 byte] 脚先の座標.(coxa(脚の付け根)を原点とする)
leg_func::LegStateBit leg_state
[4 byte] 脚状態,重心パターンを bitで表す.旧名 leg_con.
constexpr void ChangeToNextNode(const int parent_index_, const HexapodMove next_move_)
次の動作を設定する関数. 深さを一つ深くして,親と次の動作を設定する.
void ChangeGlobalCenterOfMass(const Vector3 &new_com, bool do_change_leg_base_pos)
重心位置を変更する関数.