serbo4soku

Dependencies:   mbed nhk19mr2_can_info splitData SerialHalfDuplex_HM

Files at this revision

API Documentation at this revision

Comitter:
yuto17320508
Date:
Tue Feb 12 07:51:07 2019 +0000
Parent:
12:2ac37fe6c3bb
Child:
14:d7cb429946f4
Commit message:
coment

Changed in this revision

OneLeg/OneLeg.h Show annotated file Show diff for this revision Revisions of this file
Walk/Walk.cpp Show annotated file Show diff for this revision Revisions of this file
Walk/Walk.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/OneLeg/OneLeg.h	Mon Feb 11 13:32:46 2019 +0000
+++ b/OneLeg/OneLeg.h	Tue Feb 12 07:51:07 2019 +0000
@@ -12,12 +12,12 @@
     float leglength1_;
     float leglength2_;
     void CalServoRad(float x_m, float y_m);
+    void SetRad(float rad, int servo_num);
 
   public:
     OneLeg(float between_servo_half_m,
            float leglength1, float leglength2);
     void MoveServo(int servo_num);
-    void SetRad(float rad, int servo_num);
     float GetRad(int servo_num);
     float GetX_m();
     float GetY_m();
--- a/Walk/Walk.cpp	Mon Feb 11 13:32:46 2019 +0000
+++ b/Walk/Walk.cpp	Tue Feb 12 07:51:07 2019 +0000
@@ -1,13 +1,12 @@
 #include "Walk.h"
 #include "math.h"
 const float M_PI = 3.141592;
-Orbit::Orbit(float stridetime_s, float risetime_s, float stride_m, float height_m, float ground_m)
+
+//Orbitは足毎の軌道をあらわす。
+
+Orbit::Orbit(int orbitType)
 {
-    stridetime_s_ = stridetime_s;
-    risetime_s_ = risetime_s;
-    stride_m_ = stride_m;
-    height_m_ = height_m;
-    ground_m_ = ground_m;
+    orbitType_ = orbitType;
 }
 //着地中の動き.直線軌道.等速
 OneLeg Orbit::StrideLine_(OneLeg leg, float phasetime_s)
--- a/Walk/Walk.h	Mon Feb 11 13:32:46 2019 +0000
+++ b/Walk/Walk.h	Tue Feb 12 07:51:07 2019 +0000
@@ -2,22 +2,27 @@
 #define INCLUDED_WALK_H
 #include "OneLeg.h"
 
-//足の軌道を設定するクラス。
+//足の軌道を設定するクラス。軌道は様々であることを考慮してコンストラクタでの代入は控えたい
 class Orbit
 {
+    int orbitType;
     float stridetime_s_;
     float risetime_s_;
     float stride_m_;
     float height_m_; //足の上げ幅
     float ground_m_; //着地するときの高さ
-    OneLeg StrideLine_(OneLeg leg, float phasetime_s);
+    OneLeg StrideLine_(OneLeg leg, float phasetime_s);//時間をもとに位置を取得したインスタンスを直接返して代入させる
     OneLeg RiseEllipse_(OneLeg leg, float phasetime_s);
-    OneLeg OrbitEllipse_(OneLeg leg, float phasetime_s);
+    OneLeg OrbitEllipse_(OneLeg leg, float phasetime_s);//Stride, Riseを組み合わせて周期を作る
 
   public:
     Orbit(){};
-    Orbit(float stridetime_s, float risetime_s, float stride_m, float height_m, float ground_m);
+    //コンストラクタは代入のみ
+    Orbit(int orbitType);
+    //このクラスのメイン privateへのアクセス関数
     OneLeg GetOrbit(OneLeg leg, float phasetime_s);
+    
+    void SetStraightParam(float stridetime_s, float risetime_s, float stride_m, float height_m, float ground_m);
     float GetOneWalkTime(); //足一周の時間
 };
 
@@ -28,9 +33,14 @@
     float offsettime_s_[4];
 
   public:
+    //4脚の軌道, 位相を代入して歩行方法を確定する
+    //コンストラクタではメンバの代入のみ行っている
     Walk(Orbit orbit[4], float offsettime_s[4], float cycletime_s);
-    float cycletime_s_;
+    float cycletime_s_;//計算周期
     Orbit orbit_[4];
+    //参照渡しされたonelegそれぞれにorbit_::GetOrbit関数を代入
+    //GetOrbit関数にて軌道, 時間をもとに位置を決める
+    //直接参照しているのはこの関数だけ
     void Cal4LegsPosi(OneLeg (&leg)[4]);
 };
 #endif
\ No newline at end of file
--- a/main.cpp	Mon Feb 11 13:32:46 2019 +0000
+++ b/main.cpp	Tue Feb 12 07:51:07 2019 +0000
@@ -10,7 +10,7 @@
 const float kBetweenServoHalf_m = 0.06f * 0.5; //サーボ間の距離の半分
 const float kLegLength1 = 0.1f;
 const float kLegLength2 = 0.2f;
-const float kServoSpan_ms = 0; //サーボの送信間隔
+const float kServoSpan_ms = 7.0f; //サーボの送信間隔
 ///////////////
 Timer timer;
 KondoServo servo[2] = {
@@ -32,13 +32,14 @@
 
 int main()
 {
-    printf("When you push any key, this robot starts.\r\n");
+    /*printf("When you push any key, this robot starts.\r\n");
     while (pc.readable() == 0) //キーボード押したらスタート
-        ;
+        ;*/
     printf("move start\r\n");
     //各足の軌道の設定.今回は全部同じにすることで直線を描く。
     float stridetime_s = 1, risetime_s = 0.3, stride_m = 0.2f, height_m = 0.03f, ground_m = 0.14f;
-    Orbit orbit[4] = {
+    Orbit straightOrbit[4] = {
+        
         Orbit(stridetime_s, risetime_s, stride_m, height_m, ground_m),
         Orbit(stridetime_s, risetime_s, stride_m, height_m, ground_m),
         Orbit(stridetime_s, risetime_s, stride_m, height_m, ground_m),
@@ -47,11 +48,14 @@
     //4足の軌道と位相ずれOffsetTime_sをまとめる
     float offset_time_s[4] = {
         0,
-        orbit[0].GetOneWalkTime() * 0.5,
+        straightOrbit[0].GetOneWalkTime() * 0.5,
         0,
-        orbit[0].GetOneWalkTime() * 0.5,
+        straightOrbit[0].GetOneWalkTime() * 0.5,
     };
-    Walk straight(orbit, offset_time_s, kCycleTime_s);
+    //4つの足のorbit, 位相を代入してstraightという歩行パターンを作成している
+    //このインスタンスはlegそれぞれの計算を行う役割を担う
+    //orbitはここでしか使わないあくまで鍵のような扱い
+    Walk straight(straightOrbit, offset_time_s, kCycleTime_s);
     //実際にWalkの指示通りに動かす
     float dist_m = 0.5f;
     Move(straight, leg, dist_m);
@@ -59,6 +63,7 @@
     printf("program end\r\n");
 }
 
+//到達判定が来ない間同じ歩行方法でループ
 void Move(Walk WalkWay, OneLeg (&leg)[4], float dist_m)
 {
     timer.reset();