GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
dead_lock_checker.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
8#include "dead_lock_checker.h"
9
10
11namespace designlab
12{
13
15{
16 // ノードを前から追加する
17 node_vec_.push_front(node);
18
19 // 最大保持数を超えているならばその分だけ,後ろから削除する.
20 while (node_vec_.size() > kMaxDataNum)
21 {
22 node_vec_.pop_back();
23 }
24}
25
26
28{
29 if (node_vec_.size() < 1)
30 {
31 // 比較するためのノードがないならば即終了.
32 return false;
33 }
34
35 auto itr = node_vec_.begin(); // ノードの最初を指すイテレーターを取得して,
36 itr++; // 一つ進める.
37
38 for (size_t i = 0; i < kMaxDataNum; i++)
39 {
40 if (itr != node_vec_.end())
41 {
42 itr++;
43 }
44 }
45
46 // イテレーターが最後になるまでループする.
47 for (itr; itr != node_vec_.end(); itr++)
48 {
49 // 同じノードがあれば,動作がループしているとみなし,trueを返す.
50 if (node_vec_.front() == (*itr))
51 {
52 return true;
53 }
54 }
55
56 return false;
57}
58
59} // namespace designlab
void AddNode(const RobotStateNode &node)
ロボットが行った動作を追加する.上限数を超えたら,古いものから削除する.
bool IsDeadLock() const
直近に行った動作を比較して,ロボットが正しく動作できているか判断する.
グラフ構造のためのノード(頂点).旧名 LNODE