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
10
11namespace designlab
12{
13
14InterpolateValidator::InterpolateValidator(const std::shared_ptr<const IHexapodCoordinateConverter>& converter,
15 const std::shared_ptr<const IHexapodJointCalculator>& calculator) :
16 converter_(converter),
17 calculator_(calculator),
18 interpolated_node_creator_{ converter_ }
19{
20}
21
22
23bool InterpolateValidator::IsValid(const RobotStateNode& current_node, const RobotStateNode& next_node) const
24{
25 // 補完するノード群を生成する.
26 const std::vector<RobotStateNode> interpolated_nodes =
27 interpolated_node_creator_.CreateInterpolatedNode(current_node, next_node);
28
29 // まず,現在のノードが可動範囲内であるか確認する.
30 const auto joint_current = calculator_->CalculateAllJointState(current_node);
31 if (!calculator_->IsValidAllJointState(current_node, joint_current))
32 {
33 return false;
34 }
35
36 // 次のノードが可動範囲内であるか確認する.
37 const auto joint_next = calculator_->CalculateAllJointState(next_node);
38 if (!calculator_->IsValidAllJointState(next_node, joint_next))
39 {
40 return false;
41 }
42
43 // 補完されたノードが可動範囲内であるか確認する.
44 for (const auto& node : interpolated_nodes)
45 {
46 const auto joint = calculator_->CalculateAllJointState(node);
47 if (!calculator_->IsValidAllJointState(node, joint))
48 {
49 return false;
50 }
51 }
52
53 return true;
54}
55
56}
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
ノード間を補間する.
グラフ構造のためのノード(頂点).旧名 LNODE