GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
interpolate_validator.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
10namespace designlab {
11
13 const std::shared_ptr<const IHexapodCoordinateConverter>& converter,
14 const std::shared_ptr<const IHexapodJointCalculator>& calculator)
15 : converter_(converter),
16 calculator_(calculator),
17 interpolated_node_creator_{converter_} {}
18
20 const RobotStateNode& next_node) const {
21 // 補完するノード群を生成する.
22 const std::vector<RobotStateNode> interpolated_nodes =
23 interpolated_node_creator_.CreateInterpolatedNode(current_node,
24 next_node);
25
26 // まず,現在のノードが可動範囲内であるか確認する.
27 const auto joint_current = calculator_->CalculateAllJointState(current_node);
28 if (!calculator_->IsValidAllJointState(current_node, joint_current)) {
29 return false;
30 }
31
32 // 次のノードが可動範囲内であるか確認する.
33 const auto joint_next = calculator_->CalculateAllJointState(next_node);
34 if (!calculator_->IsValidAllJointState(next_node, joint_next)) {
35 return false;
36 }
37
38 // 補完されたノードが可動範囲内であるか確認する.
39 for (const auto& node : interpolated_nodes) {
40 const auto joint = calculator_->CalculateAllJointState(node);
41 if (!calculator_->IsValidAllJointState(node, joint)) {
42 return false;
43 }
44 }
45
46 return true;
47}
48
49} // namespace designlab
bool IsValid(const RobotStateNode &current_node, const RobotStateNode &next_node) const
2つのノード間を矩形軌道で補完し,可動範囲外を通過しないか検証する.
InterpolateValidator(const std::shared_ptr< const IHexapodCoordinateConverter > &converter, const std::shared_ptr< const IHexapodJointCalculator > &calculator)
コンストラクタ.
std::vector< RobotStateNode > CreateInterpolatedNode(const RobotStateNode &node, const RobotStateNode &next_node) const
ノード間を補間する.
グラフ構造のためのノード(頂点).