changeset 1:15a0f4d2053b

Optimize a little bit
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 30 Nov 2015 20:33:38 +0100
parents cf1496aa9176
children c4895760a38b
files tote.hex tote.py
diffstat 2 files changed, 138 insertions(+), 162 deletions(-) [+]
line wrap: on
line diff
--- a/tote.hex	Mon Nov 30 19:30:45 2015 +0100
+++ b/tote.hex	Mon Nov 30 20:33:38 2015 +0100
@@ -11935,7 +11935,7 @@
 :10E9B000910D0000C91F0100C52F01003D34010069
 :04E9C000650D0000E1
 :020000040003F7
-:10E000004D508D0C696D706F7274206D6174680A6B
+:10E000004D50A50B696D706F7274206D6174680A54
 :10E01000696D706F7274207374727563740A0A6626
 :10E02000726F6D206D6963726F62697420696D70C3
 :10E030006F7274206932630A0A0A646566205F732E
@@ -12003,139 +12003,124 @@
 :10E410002F205351525432202A2073656C662E7976
 :10E420005F6469720A202020202020202073656C00
 :10E43000662E7A203D202D73656C662E74696269A4
-:10E44000610A0A20202020646566205F696E766577
-:10E450007273655F6B696E656D6174696373287350
-:10E46000656C662C20782C20792C207A293A0A2099
-:10E470002020202020202022222243616C63756C02
-:10E4800061746520746865203320616E676C657304
-:10E49000206F6620746865206C65672C20696E208B
-:10E4A000646567726565732E2222220A202020206F
-:10E4B0002020202066203D205F6E6F726D28782C12
-:10E4C000207929202D2073656C662E636F78610A90
-:10E4D000202020202020202064203D205F6E6F72AD
-:10E4E0006D28662C207A290A202020202020202038
-:10E4F00069662064203E2073656C662E66656D75C6
-:10E5000072202B2073656C662E74696269613A0A09
-:10E5100020202020202020202020202072616973CC
-:10E52000652056616C75654572726F7228224F7551
-:10E5300074206F6620726561636822290A2020209A
-:10E540002020202020686970203D206D6174682E95
-:10E550006174616E3228792C2078290A20202020CD
-:10E56000202020206B6E6565203D205F736F6C76E8
-:10E57000655F747269616E676C652873656C662E81
-:10E5800066656D75722C20642C2073656C662E7424
-:10E590006962696129202D206D6174682E61746142
-:10E5A0006E32282D7A2C2066290A20202020202057
-:10E5B0002020616E6B6C65203D205F736F6C76650B
-:10E5C0005F747269616E676C652873656C662E6630
-:10E5D000656D75722C2073656C662E746962696155
-:10E5E0002C2064290A20202020202020206B6E650A
-:10E5F00065203D206D6174682E6465677265657382
-:10E60000286B6E6565290A202020202020202061AB
-:10E610006E6B6C65203D206D6174682E6465677259
-:10E6200065657328616E6B6C6529202D2039300A71
-:10E630002020202020202020686970203D202D6D82
-:10E640006174682E646567726565732868697029EE
-:10E65000202D203435202A2073656C662E795F6466
-:10E6600069720A2020202020202020726574757293
-:10E670006E206869702C206B6E65652C20616E6B56
-:10E680006C650A0A20202020646566206D6F76651F
-:10E690005F746F2873656C662C20783D4E6F6E65D5
-:10E6A0002C20793D4E6F6E652C207A3D4E6F6E6545
-:10E6B000293A0A20202020202020202222224D6FCB
-:10E6C00076652074686520666F6F7420746F20749F
-:10E6D00068652073706563696669656420706F6939
-:10E6E0006E742E0A0A202020202020202049662037
-:10E6F000616E79206F662074686520636F6F726445
-:10E70000696E61746573206973204E6F6E652C208D
-:10E710006E6F206D6F76656D656E742077696C6CB9
-:10E7200020626520646F6E6520696E207468617474
-:10E730000A2020202020202020617869732E0A20C2
-:10E74000202020202020202222220A2020202020D9
-:10E7500020202069662078206973204E6F6E653A0C
-:10E760000A20202020202020202020202078203D4A
-:10E770002073656C662E780A20202020202020201F
-:10E7800069662079206973204E6F6E653A0A2020F1
-:10E790002020202020202020202079203D2073656B
-:10E7A0006C662E790A2020202020202020696620F7
-:10E7B0007A206973204E6F6E653A0A20202020204F
-:10E7C000202020202020207A203D2073656C662E9A
-:10E7D0007A0A202020202020202073656C662E7568
-:10E7E000706461746528782C20792C207A290A209D
-:10E7F0002020202020202073656C662E78203D206C
-:10E80000780A202020202020202073656C662E7935
-:10E81000203D20790A202020202020202073656CB4
-:10E82000662E7A203D207A0A0A2020202064656620
-:10E83000206D6F76655F62792873656C662C206445
-:10E84000783D302C2064793D302C20647A3D30298D
-:10E850003A0A20202020202020202222224D6F76DC
-:10E86000652074686520666F6F7420627920746813
-:10E87000652073706563696669656420616D6F7595
-:10E880006E742E2222220A20202020202020207395
-:10E89000656C662E6D6F76655F746F2873656C6648
-:10E8A0002E78202B2064782C2073656C662E7920BE
-:10E8B0002B2064792C2073656C662E7A202B2064C3
-:10E8C0007A290A0A2020202064656620726F74610C
-:10E8D00074655F62792873656C662C206465677265
-:10E8E000656573293A0A202020202020202022223A
-:10E8F00022526F7461746520746865206C656720AE
-:10E9000061726F756E64207468652063656E7465EE
-:10E9100072206F662074686520626F647920686F6A
-:10E9200072697A6F6E74616C6C792E2222220A20D1
-:10E930002020202020202072616469616E73203DB8
-:10E94000206D6174682E72616469616E73286465FC
-:10E950006772656573290A202020202020202078F6
-:10E96000203D2073656C662E78202B2073656C66C5
-:10E970002E626173650A202020202020202079202B
-:10E980003D2073656C662E79202B2073656C662E96
-:10E99000626173650A20202020202020206E7820CC
-:10E9A0003D2078202A206D6174682E636F73287271
-:10E9B000616469616E7329202D2079202A206D61A0
-:10E9C00074682E73696E2872616469616E732920A0
-:10E9D0002D2073656C662E626173650A20202020ED
-:10E9E000202020206E79203D2078202A206D61741F
-:10E9F000682E73696E2872616469616E7329202BB9
-:10EA00002079202A206D6174682E636F73287261EB
-:10EA10006469616E7329202D2073656C662E6261B6
-:10EA200073650A202020202020202073656C662E2C
-:10EA30006D6F76655F746F286E782C206E79290A69
-:10EA40000A20202020646566207570646174652842
-:10EA500073656C662C20782C20792C207A293A0A50
-:10EA6000202020202020202022222253656E642096
-:10EA700074686520706F736974696F6E7320746F4A
-:10EA80002074686520736572766F732E2222220AC5
-:10EA90002020202020202020616E676C6573203D9F
-:10EAA0002073656C662E5F696E76657273655F6B49
-:10EAB000696E656D617469637328782C20792C20E8
-:10EAC0007A290A2020202020202020666F722073BF
-:10EAD0006572766F2C20616E676C6520696E207A96
-:10EAE00069702873656C662E736572766F732C205F
-:10EAF000616E676C6573293A0A202020202020204F
-:10EB000020202020206932632E77726974652830B6
-:10EB1000783034203C3C20312C0A2020202020203A
-:10EB200020202020202020202020202020202020E5
-:10EB30007374727563742E7061636B28273C424254
-:10EB400066272C20736572766F2C20302C206D6127
-:10EB500074682E72616469616E7328616E676C659A
-:10EB60002929290A0A0A636C61737320526F626F44
-:10EB7000743A0A20202020646566205F5F696E6910
-:10EB8000745F5F2873656C66293A0A202020202074
-:10EB900020202073656C662E6C656773203D205BBA
-:10EBA0000A2020202020202020202020204C6567C3
-:10EBB00028322C20312C20302C202D312C203129B2
-:10EBC0002C0A2020202020202020202020204C65DE
-:10EBD0006728352C20342C20332C202D312C202D4F
-:10EBE00031292C0A20202020202020202020202015
-:10EBF0004C656728382C20372C20362C20312C20CF
-:10EC000031292C0A202020202020202020202020F4
-:10EC10004C65672831312C2031302C20392C2031A3
-:10EC20002C202D31292C0A20202020202020205D7E
-:10EC30000A0A20202020646566207570646174656E
-:10EC40002873656C66293A0A202020202020202085
-:10EC5000666F72206C656720696E2073656C662E26
-:10EC60006C6567733A0A2020202020202020202075
-:10EC700020206C65672E75706461746528290A0A06
-:10EC80000A726F626F74203D20526F626F74282980
-:10EC90000A0000000000000000000000000000006A
+:10E44000610A0A20202020646566206D6F76655F72
+:10E45000746F2873656C662C20783D4E6F6E652C4A
+:10E4600020793D4E6F6E652C207A3D4E6F6E65298A
+:10E470003A0A20202020202020202222224D6F76C0
+:10E48000652074686520666F6F7420746F207468EF
+:10E49000652073706563696669656420706F696E75
+:10E4A000742E0A0A20202020202020204966206186
+:10E4B0006E79206F662074686520636F6F7264697F
+:10E4C0006E61746573206973204E6F6E652C206ECB
+:10E4D0006F206D6F76656D656E742077696C6C204A
+:10E4E000626520646F6E6520696E20746861740ACD
+:10E4F0002020202020202020617869732E0A2020EF
+:10E500002020202020202222220A2020202020201B
+:10E51000202069662078206973204E6F6E653A0A64
+:10E5200020202020202020202020202078203D2076
+:10E5300073656C662E780A20202020202020206918
+:10E54000662079206973204E6F6E653A0A2020207C
+:10E5500020202020202020202079203D2073656C61
+:10E56000662E790A20202020202020206966207A2B
+:10E57000206973204E6F6E653A0A202020202020EB
+:10E580002020202020207A203D2073656C662E7A82
+:10E590000A202020202020202066203D205F6E6F52
+:10E5A000726D28782C207929202D2073656C662EB9
+:10E5B000636F78610A202020202020202064203DE5
+:10E5C000205F6E6F726D28662C207A290A20202029
+:10E5D000202020202069662064203E2073656C6620
+:10E5E0002E66656D7572202B2073656C662E7469BE
+:10E5F0006269613A0A20202020202020202020204B
+:10E600002072616973652056616C75654572726F21
+:10E610007228224F7574206F6620726561636822CC
+:10E62000290A2020202020202020686970203D20F9
+:10E630006D6174682E6174616E3228792C2078299E
+:10E640000A20202020202020206B6E6565203D20A0
+:10E650005F736F6C76655F747269616E676C652855
+:10E6600073656C662E66656D75722C20642C207344
+:10E67000656C662E746962696129202D206D617454
+:10E68000682E6174616E32282D7A2C2066290A204A
+:10E6900020202020202020616E6B6C65203D205FB3
+:10E6A000736F6C76655F747269616E676C652873F1
+:10E6B000656C662E66656D75722C2073656C662EB2
+:10E6C00074696269612C2064290A2020202020209E
+:10E6D00020206B6E6565203D206D6174682E646539
+:10E6E0006772656573286B6E6565290A2020202096
+:10E6F00020202020616E6B6C65203D206D61746868
+:10E700002E6465677265657328616E6B6C65292080
+:10E710002D2039300A2020202020202020686970F8
+:10E72000203D202D6D6174682E6465677265657388
+:10E730002868697029202D203435202A2073656CC3
+:10E74000662E795F6469720A202020202020202014
+:10E75000666F7220736572766F2C20616E676C65D0
+:10E7600020696E207A69702873656C662E736572F5
+:10E77000766F732C20286869702C206B6E65652C71
+:10E7800020616E6B6C6529293A0A20202020202008
+:10E790002020202020206932632E7772697465283A
+:10E7A00030783034203C3C20312C0A20202020209E
+:10E7B0002020202020202020202020202020202059
+:10E7C000207374727563742E7061636B28273C42EA
+:10E7D0004266272C20736572766F2C20302C206DBA
+:10E7E0006174682E72616469616E7328616E676C12
+:10E7F000652929290A202020202020202073656CEB
+:10E80000662E78203D20780A2020202020202020FD
+:10E8100073656C662E79203D20790A202020202007
+:10E8200020202073656C662E7A203D207A0A0A200B
+:10E83000202020646566206D6F76655F627928739D
+:10E84000656C662C2064783D302C2064793D302C3A
+:10E8500020647A3D30293A0A2020202020202020E0
+:10E860002222224D6F76652074686520666F6F7472
+:10E8700020627920746865207370656369666965D4
+:10E880006420616D6F756E742E2222220A20202072
+:10E89000202020202073656C662E6D6F76655F7476
+:10E8A0006F2873656C662E78202B2064782C20737B
+:10E8B000656C662E79202B2064792C2073656C663C
+:10E8C0002E7A202B20647A290A0A202020206465D1
+:10E8D0006620726F746174655F62792873656C6617
+:10E8E0002C2064656772656573293A0A2020202010
+:10E8F00020202020222222526F74617465207468C7
+:10E9000065206C65672061726F756E642074686540
+:10E910002063656E746572206F662074686520627E
+:10E920006F647920686F72697A6F6E74616C6C794C
+:10E930002E2222220A202020202020202072616402
+:10E9400069616E73203D206D6174682E7261646927
+:10E95000616E732864656772656573290A202020DB
+:10E96000202020202078203D2073656C662E7820A2
+:10E970002B2073656C662E626173650A202020204F
+:10E980002020202079203D2073656C662E79202B75
+:10E990002073656C662E626173650A20202020203A
+:10E9A0002020206E78203D2078202A206D61746818
+:10E9B0002E636F732872616469616E7329202D2044
+:10E9C00079202A206D6174682E73696E28726164E3
+:10E9D00069616E7329202D2073656C662E626173E8
+:10E9E000650A20202020202020206E79203D2078DC
+:10E9F000202A206D6174682E73696E2872616469C3
+:10EA0000616E7329202B2079202A206D6174682E75
+:10EA1000636F732872616469616E7329202D20739E
+:10EA2000656C662E626173650A20202020202020FC
+:10EA30002073656C662E6D6F76655F746F286E78D7
+:10EA40002C206E79290A0A0A636C61737320526F55
+:10EA5000626F743A0A20202020646566205F5F6937
+:10EA60006E69745F5F2873656C66293A0A202020FE
+:10EA7000202020202073656C662E6C656773203D16
+:10EA8000205B0A2020202020202020202020204C35
+:10EA9000656728322C20312C20302C20312C202D61
+:10EAA00031292C0A20202020202020202020202056
+:10EAB0004C656728352C20342C20332C202D312C0C
+:10EAC000202D31292C0A2020202020202020202029
+:10EAD00020204C656728382C20372C20362C202D00
+:10EAE000312C2031292C0A202020202020202020F9
+:10EAF0002020204C65672831312C2031302C2039E2
+:10EB00002C20312C2031292C0A20202020202020CC
+:10EB1000205D0A0A20202020646566206D6F7665DE
+:10EB20005F62792873656C662C2064783D302C20F8
+:10EB300064793D302C20647A3D30293A0A20202027
+:10EB40002020202020666F72206C656720696E206F
+:10EB500073656C662E6C6567733A0A20202020204E
+:10EB6000202020202020206C65672E6D6F76655F49
+:10EB70006279286478202A206C65672E785F646942
+:10EB8000722C206479202A206C65672E795F646975
+:10EB9000722C20647A290A0A0A726F626F74203D0F
+:10EBA00020526F626F7428290A00000000000000E4
 :0400000500011C6D6D
 :00000001FF
--- a/tote.py	Mon Nov 30 19:30:45 2015 +0100
+++ b/tote.py	Mon Nov 30 20:33:38 2015 +0100
@@ -34,20 +34,6 @@
         self.y = -(self.coxa + self.femur) / SQRT2 * self.y_dir
         self.z = -self.tibia
 
-    def _inverse_kinematics(self, x, y, z):
-        """Calculate the 3 angles of the leg, in degrees."""
-        f = _norm(x, y) - self.coxa
-        d = _norm(f, z)
-        if d > self.femur + self.tibia:
-            raise ValueError("Out of reach")
-        hip = math.atan2(y, x)
-        knee = _solve_triangle(self.femur, d, self.tibia) - math.atan2(-z, f)
-        ankle = _solve_triangle(self.femur, self.tibia, d)
-        knee = math.degrees(knee)
-        ankle = math.degrees(ankle) - 90
-        hip = -math.degrees(hip) - 45 * self.y_dir
-        return hip, knee, ankle
-
     def move_to(self, x=None, y=None, z=None):
         """Move the foot to the specified point.
 
@@ -60,7 +46,19 @@
             y = self.y
         if z is None:
             z = self.z
-        self.update(x, y, z)
+        f = _norm(x, y) - self.coxa
+        d = _norm(f, z)
+        if d > self.femur + self.tibia:
+            raise ValueError("Out of reach")
+        hip = math.atan2(y, x)
+        knee = _solve_triangle(self.femur, d, self.tibia) - math.atan2(-z, f)
+        ankle = _solve_triangle(self.femur, self.tibia, d)
+        knee = math.degrees(knee)
+        ankle = math.degrees(ankle) - 90
+        hip = -math.degrees(hip) - 45 * self.y_dir
+        for servo, angle in zip(self.servos, (hip, knee, ankle)):
+            i2c.write(0x04 << 1,
+                      struct.pack('<BBf', servo, 0, math.radians(angle)))
         self.x = x
         self.y = y
         self.z = z
@@ -78,26 +76,19 @@
         ny = x * math.sin(radians) + y * math.cos(radians) - self.base
         self.move_to(nx, ny)
 
-    def update(self, x, y, z):
-        """Send the positions to the servos."""
-        angles = self._inverse_kinematics(x, y, z)
-        for servo, angle in zip(self.servos, angles):
-            i2c.write(0x04 << 1,
-                      struct.pack('<BBf', servo, 0, math.radians(angle)))
-
 
 class Robot:
     def __init__(self):
         self.legs = [
-            Leg(2, 1, 0, -1, 1),
+            Leg(2, 1, 0, 1, -1),
             Leg(5, 4, 3, -1, -1),
-            Leg(8, 7, 6, 1, 1),
-            Leg(11, 10, 9, 1, -1),
+            Leg(8, 7, 6, -1, 1),
+            Leg(11, 10, 9, 1, 1),
         ]
 
-    def update(self):
+    def move_by(self, dx=0, dy=0, dz=0):
         for leg in self.legs:
-            leg.update()
+            leg.move_by(dx * leg.x_dir, dy * leg.y_dir, dz)
 
 
 robot = Robot()