OSDN Git Service

PID.h: I項がオーバーしないようにI項クリップ設定を追加。
[tondenhei/et2013.git] / ETLineTracer.cpp
1 #include "ETLineTracer.h"\r
2 #include "LinePos.h"\r
3 #include "Runner.h"\r
4 \r
5 ETLineTracer::ETLineTracer(LinePos& linepos, Runner& runner)\r
6         : m_linepos(linepos), m_runner(runner), m_pid(0.3, 0.001, 10.0)\r
7 {\r
8         m_pid.SetClip(-50,50);\r
9         m_pid.SetIntegralClip(-500,500);\r
10 }\r
11 ETLineTracer::~ETLineTracer(void)\r
12 {\r
13 }\r
14 void ETLineTracer::Run(int speed)\r
15 {\r
16         int forward = 0;\r
17         int turn = 0;\r
18         CalcOutput(speed,m_linepos.GetLinePos(),forward,turn);\r
19         m_runner.Run(forward,turn);\r
20 }\r
21 bool ETLineTracer::IsException() const\r
22 {\r
23         return m_runner.IsException();\r
24 }\r
25 void ETLineTracer::Stop()\r
26 {\r
27         m_runner.Stop();\r
28 }\r
29 void ETLineTracer::Reset()\r
30 {\r
31         m_runner.Reset();\r
32         m_pid.ResetPrevDiff();\r
33 }\r
34 void ETLineTracer::CalcOutput(int speed, int linepos, int& forward, int& turn)\r
35 {\r
36         forward = speed * 7 / 10;       // \82Æ\82è\82 \82¦\82¸\82Ì\8eÀ\91\95\r
37         turn =static_cast<int>(m_pid.CalcControlValue(static_cast<float>(linepos)));\r
38 }\r