changeset 71:d4356df0be42

Do trimming on the arduino side
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Wed, 10 Sep 2014 20:37:27 +0200
parents 2d864e78240b
children 6be60d8eb0a2
files kubik.py servo/servo.ino
diffstat 2 files changed, 35 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/kubik.py	Fri Sep 05 18:55:56 2014 +0200
+++ b/kubik.py	Wed Sep 10 20:37:27 2014 +0200
@@ -27,20 +27,20 @@
     def __init__(self, serial):
         self.legs = (
             Leg(Servo(serial, 11, reverse=True),
-                Servo(serial, 4, reverse=False, trim=-8),
-                Servo(serial, 0, reverse=False, trim=5),
+                Servo(serial, 4, reverse=False),
+                Servo(serial, 0, reverse=False),
                 (-1, -1)),
             Leg(Servo(serial, 8, reverse=True),
-                Servo(serial, 7, reverse=True, trim=0),
-                Servo(serial, 3, reverse=True, trim=0),
+                Servo(serial, 7, reverse=True),
+                Servo(serial, 3, reverse=True),
                 (-1, 1)),
             Leg(Servo(serial, 9, reverse=False),
-                Servo(serial, 6, reverse=False, trim=5),
+                Servo(serial, 6, reverse=False),
                 Servo(serial, 2, reverse=False),
                 (1, 1)),
             Leg(Servo(serial, 10, reverse=False),
                 Servo(serial, 5, reverse=True),
-                Servo(serial, 1, reverse=True, trim=-5),
+                Servo(serial, 1, reverse=True),
                 (1, -1)),
         )
         super(Robot, self).__init__()
--- a/servo/servo.ino	Fri Sep 05 18:55:56 2014 +0200
+++ b/servo/servo.ino	Wed Sep 10 20:37:27 2014 +0200
@@ -13,6 +13,7 @@
 // Range of the servos.
 #define SERVO_FREQ_MIN 600
 #define SERVO_FREQ_MAX 2400
+#define SERVO_PIN_MIN 2
 
 // 3.3V maximum for the acceleration sensor.
 #define ACCEL_MAX 676
@@ -35,14 +36,19 @@
 
 int joints[12][2] {
 //  reverse, trim
-    {1, 50},
+    // ankles
+    {1, -50},  // front right
+    {-1, 0}, // front left
+    {1, -50},   // hind left
+    {-1, 50},  // hind right
+
+    // knees
+    {1, -70},
     {-1, -50},
-    {1, 0},
-    {-1, 0},
-    {1, -80},
-    {-1, 0},
-    {1, 50},
-    {-1, 0},
+    {1, 30},
+    {-1, -50},
+
+    // hips
     {-1, 0},
     {1, 0},
     {1, 0},
@@ -50,10 +56,10 @@
 };
 int legs[4][5] = {
 //  hip, knee, ankle, x_direction, y_direction
-    {11, 4, 0, -1, -1},
-    {8, 7, 3, -1, 1},
-    {9, 6, 2, 1, 1},
-    {10, 5, 1, 1, -1},
+    {11, 4, 0, -1, -1},  // front right
+    {8, 7, 3, -1, 1},  // front left
+    {9, 6, 2, 1, 1},  // hind left
+    {10, 5, 1, 1, -1},  // hind right
 };
 Servo servos[MAX_SERVO];
 int serial_command = 0;
@@ -83,6 +89,13 @@
     return low | (high << 8);
 }
 
+void servo_write(int servo, int us) {
+    int trim = joints[servo][1];
+    int pos = min(max(us + trim, SERVO_FREQ_MIN), SERVO_FREQ_MAX);
+    servos[servo].writeMicroseconds(pos);
+}
+
+
 void do_servo_degrees() {
     /* Move a single servo by degrees. */
     int servo = Serial.read();
@@ -108,7 +121,7 @@
     int pos = _serial_read_word();
     if (servo >= 0 && servo < MAX_SERVO &&
         pos >= SERVO_FREQ_MIN && pos <= SERVO_FREQ_MAX) {
-        servos[servo].writeMicroseconds(pos);
+        servo_write(servo, pos);
     }
 }
 
@@ -117,7 +130,7 @@
     for (int servo = 0; servo < MAX_SERVO; servo += 1) {
         int pos = _serial_read_word();
         if (pos >= SERVO_FREQ_MIN && pos <= SERVO_FREQ_MAX) {
-            servos[servo].writeMicroseconds(pos);
+            servo_write(servo, pos);
         }
     }
 }
@@ -220,8 +233,9 @@
 void unfold() {
     for (int servo = MAX_SERVO - 1; servo >= 0; servo -= 1) {
         /* First 2 pins are used for the serial. */
-        servos[servo].attach(servo + 2, SERVO_FREQ_MIN, SERVO_FREQ_MAX);
-        servos[servo].writeMicroseconds(1500);
+        servos[servo].attach(servo + SERVO_PIN_MIN,
+                             SERVO_FREQ_MIN, SERVO_FREQ_MAX);
+        servo_write(servo, 1500);
         /* Don't set all servos at once, save power. */
         delay(150);
     }