Mercurial > ukubik
changeset 49:6ec1356c03ae
Add accelerometer
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Thu, 21 Aug 2014 20:58:00 +0200 |
| parents | dda48811342a |
| children | 6f765bd70359 |
| files | accel.py kubik.py robot.py scad/board.scad servo.py |
| diffstat | 5 files changed, 38 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accel.py Thu Aug 21 20:58:00 2014 +0200 @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import serial +import kubik + + +def show_accel(robot): + while True: + print robot.get_accel() + yield + + +robot = kubik.Robot(serial.Serial('/dev/rfcomm0', 9600)) +robot.run_animations([show_accel(robot)], 6)
--- a/kubik.py Thu Aug 21 11:12:55 2014 +0200 +++ b/kubik.py Thu Aug 21 20:58:00 2014 +0200 @@ -20,6 +20,8 @@ class Robot(robot.Robot): + accel_trim = [91.75, 89.5, 90.5] + def __init__(self, serial): self.legs = ( Leg(Servo(serial, 11, reverse=True),
--- a/robot.py Thu Aug 21 11:12:55 2014 +0200 +++ b/robot.py Thu Aug 21 20:58:00 2014 +0200 @@ -8,6 +8,7 @@ class Robot(object): legs = () + accel_trim = [90.0, 90.0, 90.0] def __init__(self): self.shift = [0.0, 0.0, 0.0] @@ -49,6 +50,16 @@ for leg in self.legs: leg.update(self.shift) + def get_accel(self): + probes = 4 + accels = [] + for probe in range(probes): + accels.append(self.legs[0].hip.get_sensors()) + values = [0, 0, 0] + for i in range(3): + values[i] = int(float(sum(a[i] for a in accels)) / probes - self.accel_trim[i]) + return values + def _run_animations(self, animations, fps=12): clock = pygame.time.Clock() while animations:
--- a/scad/board.scad Thu Aug 21 11:12:55 2014 +0200 +++ b/scad/board.scad Thu Aug 21 20:58:00 2014 +0200 @@ -127,7 +127,7 @@ rotate([0, 180, 0]) short_pin(); } } - translate([1.8, 22.8, -3]) rotate([0, 90, 0]) capacitor(); + // translate([1.8, 22.8, -3]) rotate([0, 90, 0]) capacitor(); } @@ -135,6 +135,7 @@ arduino_pro_mini_goldpins(); translate([2.54, 0, -1.75]) board(); translate([17.72, 33 - 2.54, -1]) rotate([0, 180, 90]) jumper(); +translate([17.72 - 7.62, 33 - 1.27 * 5 - 0.5, -3]) color("Orange") cube([7.62, 1, 1]); for (y=[0:3]) { translate([0, y * 2.54, -2.1]) rotate([0, 180, -90]) SG90_plug(); }
--- a/servo.py Thu Aug 21 11:12:55 2014 +0200 +++ b/servo.py Thu Aug 21 20:58:00 2014 +0200 @@ -31,10 +31,17 @@ def update_all(cls, servos): serial = servos[0].serial servos = sorted(servos, key=lambda servo: servo.index) - command = '0xfe%s' % ''.join('%c' % servo.calculate_angle() + command = '\xfe%s' % ''.join('%c' % servo.calculate_angle() for servo in servos) serial.write(command) + def get_sensors(self): + command = '\xfd' + self.serial.write(command) + while self.serial.read(1) != '\xff': + pass + return [ord(c) for c in self.serial.read(3)] + def calculate_angle(self): position = self.position if self.reverse:
