changeset 4:010d229c6d6d default tip

It walks
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Tue, 01 Dec 2015 11:47:18 +0100
parents 755951b7ec90
children
files tote.hex tote.py
diffstat 2 files changed, 166 insertions(+), 179 deletions(-) [+]
line wrap: on
line diff
--- a/tote.hex	Tue Dec 01 00:28:57 2015 +0100
+++ b/tote.hex	Tue Dec 01 11:47:18 2015 +0100
@@ -11935,7 +11935,7 @@
 :10E9B000910D0000C91F0100C52F01003D34010069
 :04E9C000650D0000E1
 :020000040003F7
-:10E000004D507B12696D706F7274206D6174680A77
+:10E000004D500112696D706F7274206D6174680AF1
 :10E01000696D706F7274207374727563740A0A6626
 :10E02000726F6D206D6963726F62697420696D70C3
 :10E030006F7274206932630A696D706F7274206D3B
@@ -12068,7 +12068,7 @@
 :10E820000A636C61737320526F626F743A0A20201E
 :10E830002020646566205F5F696E69745F5F28737E
 :10E84000656C66293A0A202020202020202073654C
-:10E850006C662E6C656773203D205B0A20202020AB
+:10E850006C662E6C656773203D20280A20202020DE
 :10E8600020202020202020204C65672820322C20CA
 :10E8700020312C20302C202D312C202031292C0A25
 :10E880002020202020202020202020204C656728C8
@@ -12078,7 +12078,7 @@
 :10E8C000312C202D31292C0A20202020202020200E
 :10E8D000202020204C65672831312C2031302C201D
 :10E8E000392C2020312C202031292C0A20202020D6
-:10E8F000202020205D0A0A20202020646566206DEB
+:10E8F00020202020290A0A20202020646566206D1F
 :10E900006F76655F62792873656C662C2064783D4C
 :10E91000302C2064793D302C20647A3D30293A0A2D
 :10E920002020202020202020666F72206C65672028
@@ -12086,150 +12086,143 @@
 :10E94000202020202020202020206C65672E6D6F45
 :10E9500076655F6279286478202A206C65672E7856
 :10E960005F6469722C206479202A206C65672E7997
-:10E970005F6469722C20647A290A0A2020202064AE
-:10E98000656620726F746174655F62792873656C67
-:10E99000662C2064656772656573293A0A20202019
-:10E9A0002020202020666F72206C656720696E2011
-:10E9B00073656C662E6C6567733A0A2020202020F0
-:10E9C000202020202020206C65672E726F746174D7
-:10E9D000655F62792864656772656573290A0A0A4A
-:10E9E000636C6173732043726565703A0A2020205E
-:10E9F000207370656564203D20310A20202020733B
-:10EA00007472696465203D2031340A20202020730F
-:10EA100068696674203D20380A20202020736869C8
-:10EA200066745F7374657073203D20320A20202065
-:10EA30002072616973655F6C6567203D2031300A23
-:10EA40002020202072616973655F73746570732084
-:10EA50003D20330A202020206E6578745F6C656746
-:10EA6000203D20280A202020202020202028322C71
-:10EA700020302C20332C2031292C202020232066EC
-:10EA80006F72776172640A202020202020202028C5
-:10EA9000312C20332C20302C2032292C20202023F4
-:10EAA000206261636B776172640A2020202020203D
-:10EAB000202028312C20322C20332C2030292C20CF
-:10EAC00020202320636C6F636B776973650A2020B5
-:10EAD00020202020202028332C20302C20312C20D6
-:10EAE00032292C2020202320636F756E7465722DCF
-:10EAF000636C6F636B776973650A20202020202088
-:10EB0000202028322C20332C20312C2030292C207E
-:10EB1000202023206C6566740A20202020202020DD
-:10EB20002028332C20322C20302C2031292C20205E
-:10EB300020232072696768740A20202020290A0A8D
-:10EB400020202020646566205F5F696E69745F5FC6
-:10EB50002873656C662C20726F626F74293A0A20E4
-:10EB60002020202020202073656C662E726F626F3B
-:10EB700074203D20726F626F740A202020202020B4
-:10EB8000202073656C662E73686966745F78203D1B
-:10EB900020300A202020202020202073656C662E43
-:10EBA00073686966745F79203D20300A2020202038
-:10EBB0002020202073656C662E6F6E5F67726F7504
-:10EBC0006E64203D206C69737428726F626F742EBE
-:10EBD0006C656773290A202020202020202073657F
-:10EBE0006C662E6478203D20300A202020202020D2
-:10EBF000202073656C662E6479203D20310A202028
-:10EC000020202020202073656C662E726F74617442
-:10EC1000696F6E203D20300A2020202020202020F7
-:10EC200073656C662E737072656164203D20300AD6
-:10EC300020202020202020206C6567203D20726F3E
-:10EC4000626F742E6C6567735B305D0A2020202034
-:10EC50002020202073656C662E68656967687420C3
-:10EC60003D206C65672E74696269610A0A20202064
-:10EC700020646566206D6F76652873656C66293A39
-:10EC80000A2020202020202020666F72206C6567DB
-:10EC900020696E2073656C662E6F6E5F67726F758C
-:10ECA0006E643A0A202020202020202020202020CE
-:10ECB0006C65672E6D6F76655F746F286C65672E67
-:10ECC00078202D2073656C662E6478202A206C6570
-:10ECD000672E785F646972202A2073656C662E73D4
-:10ECE000706565642C0A2020202020202020202010
-:10ECF00020202020202020202020202020206C6583
-:10ED0000672E79202D2073656C662E6479202A2069
-:10ED10006C65672E795F646972202A2073656C6662
-:10ED20002E73706565642C0A20202020202020206E
-:10ED300020202020202020202020202020202020D3
-:10ED40002D73656C662E686569676874290A2020D2
-:10ED5000202020202020202020206C65672E726F2C
-:10ED6000746174655F6279282D73656C662E726FAD
-:10ED7000746174696F6E202A206C65672E785F64F9
-:10ED80006972202A206C65672E795F646972202F72
-:10ED90002032290A0A2020202064656620737465C9
-:10EDA000702873656C662C206C6567293A0A2020F0
-:10EDB0002020202020206478203D20286C65672EAC
-:10EDC000785F646972202A2073656C662E736869A7
-:10EDD0006674202D2073656C662E73686966745F97
-:10EDE0007829202F2073656C662E73686966745FBE
-:10EDF00073746570730A20202020202020206479FD
-:10EE0000203D20286C65672E795F646972202A2076
-:10EE100073656C662E7368696674202D2073656C4B
-:10EE2000662E73686966745F7929202F2073656C7C
-:10EE3000662E73686966745F73746570730A202048
-:10EE4000202020202020666F722073746570206956
-:10EE50006E2072616E67652873656C662E736869D3
-:10EE600066745F7374657073293A0A20202020202D
-:10EE700020202020202020726F626F742E6D6F760C
-:10EE8000655F62792864782C2064792C2030290A07
-:10EE900020202020202020202020202073656C6648
-:10EEA0002E73686966745F78202B3D2064780A2091
-:10EEB000202020202020202020202073656C662E1A
-:10EEC00073686966745F79202B3D2064790A20207D
-:10EED000202020202020202020207969656C640AD1
-:10EEE000202020202020202073656C662E6F6E5F0E
-:10EEF00067726F756E642E72656D6F7665286C65CE
-:10EF000067290A2020202020202020666F7220738D
-:10EF100074657020696E2072616E67652873656C18
-:10EF2000662E72616973655F7374657073293A0A3E
-:10EF30002020202020202020202020206C65672EEB
-:10EF40006D6F76655F627928302C20302C207365D8
-:10EF50006C662E72616973655F6C6567290A202093
-:10EF6000202020202020202020207969656C640A40
-:10EF700020202020202020206C65672E6D6F766574
-:10EF80005F746F280A2020202020202020202020AD
-:10EF900020286C65672E686F6D65202B2073656C6B
-:10EFA000662E73686966745F78202B2073656C66C3
-:10EFB0002E6478202A0A20202020202020202020B3
-:10EFC00020202073656C662E737472696465292035
-:10EFD0002A206C65672E785F646972202B20736528
-:10EFE0006C662E7370726561642C0A2020202020CC
-:10EFF00020202020202020286C65672E686F6D65FA
-:10F00000202B2073656C662E73686966745F7920A7
-:10F010002B2073656C662E6479202A0A202020201C
-:10F0200020202020202020202073656C662E737401
-:10F030007269646529202A206C65672E795F64698E
-:10F0400072202B2073656C662E7370726561642C60
-:10F050000A20202020202020202020202073656CE2
-:10F06000662E72616973655F6C6567202A2073651F
-:10F070006C662E72616973655F7374657073202DA1
-:10F080002073656C662E6865696768740A202020A5
-:10F090002020202020290A20202020202020207924
-:10F0A00069656C640A202020202020202079696571
-:10F0B0006C640A2020202020202020666F7220739C
-:10F0C00074657020696E2072616E67652873656C67
-:10F0D000662E72616973655F7374657073202D208D
-:10F0E00031293A0A20202020202020202020202002
-:10F0F0006C65672E6D6F76655F627928302C2030E5
-:10F100002C202D73656C662E72616973655F6C656A
-:10F1100067290A202020202020202020202020795C
-:10F1200069656C640A202020202020202073656CF3
-:10F13000662E6F6E5F67726F756E642E617070659C
-:10F140006E64286C6567290A20202020202020205A
-:10F150007969656C640A0A20202020646566207243
-:10F16000756E2873656C662C207374657073293A0C
-:10F170000A20202020202020206C65675F696E64B3
-:10F180006578203D20300A20202020202020206685
-:10F190006F72207374657020696E2072616E67658E
-:10F1A000287374657073293A0A20202020202020BB
-:10F1B00020202020206C6567203D20726F626F74D4
-:10F1C0002E6C6567735B6C65675F696E6465785DFF
-:10F1D0000A202020202020202020202020666F725E
-:10F1E000206672616D6520696E2073656C662E7392
-:10F1F000746570286C6567293A0A20202020202039
-:10F200002020202020202020202073656C662E6D79
-:10F210006F766528290A2020202020202020202009
-:10F220002020202020206D6963726F6269742E7324
-:10F230006C656570283230290A202020202020208B
-:10F2400020202020206C65675F696E646578203D12
-:10F250002073656C662E6E6578745F6C65675B30D5
-:10F260005D5B6C65675F696E6465785D0A0A0A724A
-:10F270006F626F74203D20526F626F7428290A00FC
+:10E970005F6469722C20647A290A0A0A636C6173E5
+:10E98000732043726565703A0A20202020737065F9
+:10E990006564203D20302E37350A202020207374F6
+:10E9A00072696465203D2031340A2020202073687C
+:10E9B000696674203D20380A20202020736869662B
+:10E9C000745F7374657073203D20320A202020200C
+:10E9D00072616973655F6C6567203D2031300A2084
+:10E9E00020202072616973655F7374657073203DC8
+:10E9F00020320A202020206E6578745F6C656720C5
+:10EA00003D20280A202020202020202028322C20D1
+:10EA1000302C20332C2031292C2020202320666FFD
+:10EA200072776172640A2020202020202020283163
+:10EA30002C20332C20302C2032292C202020232065
+:10EA40006261636B776172640A202020202020209D
+:10EA50002028312C20322C20332C2030292C20202F
+:10EA6000202320636C6F636B776973650A20202015
+:10EA7000202020202028332C20302C20312C203224
+:10EA8000292C2020202320636F756E7465722D63FE
+:10EA90006C6F636B776973650A202020202020202B
+:10EAA0002028322C20332C20312C2030292C2020DF
+:10EAB0002023206C6566740A20202020202020203E
+:10EAC00028332C20322C20302C2031292C202020BF
+:10EAD000232072696768740A20202020290A0A20EE
+:10EAE000202020646566205F5F696E69745F5F281F
+:10EAF00073656C662C20726F626F74293A0A20204D
+:10EB000020202020202073656C662E726F626F7447
+:10EB1000203D20726F626F740A2020202020202068
+:10EB20002073656C662E73686966745F78203D207B
+:10EB3000300A202020202020202073656C662E7350
+:10EB4000686966745F79203D20300A2020202020EB
+:10EB500020202073656C662E6F6E5F67726F756E16
+:10EB600064203D206C69737428726F626F742E6C20
+:10EB7000656773290A202020202020202073656CDF
+:10EB8000662E6478203D20300A202020202020207E
+:10EB90002073656C662E6479203D20310A20202088
+:10EBA000202020202073656C662E726F746174695A
+:10EBB0006F6E203D20300A2020202020202020734E
+:10EBC000656C662E737072656164203D20300A208A
+:10EBD000202020202020206C6567203D20726F625D
+:10EBE0006F742E6C6567735B305D0A2020202020D7
+:10EBF00020202073656C662E686569676874203D07
+:10EC0000206C65672E74696269610A2020202020CB
+:10EC100020202073656C662E6C6173745F6C656771
+:10EC2000203D20300A0A20202020646566206D6F78
+:10EC300076652873656C66293A0A202020202020FA
+:10EC40002020666F72206C656720696E2073656C8A
+:10EC5000662E6F6E5F67726F756E643A0A202020B1
+:10EC60002020202020202020206478203D20736553
+:10EC70006C662E6478202A206C65672E785F646944
+:10EC800072202A2073656C662E73706565640A2095
+:10EC900020202020202020202020206479203D20BA
+:10ECA00073656C662E6479202A206C65672E795F07
+:10ECB000646972202A2073656C662E7370656564C2
+:10ECC0000A2020202020202020202020206C656782
+:10ECD0002E6D6F76655F746F286C65672E78202DBA
+:10ECE0002064782C206C65672E79202D2064792C87
+:10ECF000202D73656C662E686569676874290A2023
+:10ED00002020202020202020202020236C65672E1A
+:10ED1000726F746174655F6279282D73656C662EFD
+:10ED2000726F746174696F6E202A206C65672E782B
+:10ED30005F646972202A206C65672E795F6469724E
+:10ED4000202F2032290A20202020202020206D6919
+:10ED500063726F6269742E736C6565702832352931
+:10ED60000A0A202020206465662073746570287369
+:10ED7000656C662C206C6567293A0A2020202020CB
+:10ED80002020206478203D20286C65672E785F6401
+:10ED90006972202A2073656C662E73686966742018
+:10EDA0002D2073656C662E73686966745F78292000
+:10EDB0002F2073656C662E73686966745F73746563
+:10EDC00070730A20202020202020206479203D20FC
+:10EDD000286C65672E795F646972202A2073656CE0
+:10EDE000662E7368696674202D2073656C662E73B9
+:10EDF000686966745F7929202F2073656C662E73AD
+:10EE0000686966745F73746570730A20202020201F
+:10EE1000202020666F72207374657020696E2072E6
+:10EE2000616E67652873656C662E73686966745FCA
+:10EE30007374657073293A0A202020202020202036
+:10EE400020202020726F626F742E6D6F76655F6276
+:10EE5000792864782C2064792C2030290A202020FD
+:10EE600020202020202020202073656C662E7368CF
+:10EE70006966745F78202B3D2064780A202020206A
+:10EE8000202020202020202073656C662E73686966
+:10EE900066745F79202B3D2064790A202020202091
+:10EEA0002020202020202073656C662E6D6F7665F3
+:10EEB00028290A202020202020202073656C662E1F
+:10EEC0006F6E5F67726F756E642E72656D6F7665BB
+:10EED000286C6567290A2020202020202020666FCA
+:10EEE00072207374657020696E2072616E67652888
+:10EEF00073656C662E72616973655F737465707398
+:10EF0000293A0A2020202020202020202020206CA8
+:10EF100065672E6D6F76655F627928302C20302C06
+:10EF20002073656C662E72616973655F6C65672915
+:10EF30000A20202020202020202020202073656C03
+:10EF4000662E6D6F766528290A202020202020203B
+:10EF5000206C65672E6D6F76655F746F280A2020C0
+:10EF6000202020202020202020206C65672E686F24
+:10EF70006D65202B202873656C662E736869667436
+:10EF80005F78202B2073656C662E6478202A0A2017
+:10EF90002020202020202020202020202020202071
+:10EFA0002020202020202073656C662E73747269E7
+:10EFB000646529202A206C65672E785F6469722059
+:10EFC0002B2073656C662E7370726561642C0A2049
+:10EFD00020202020202020202020206C65672E6803
+:10EFE0006F6D65202B202873656C662E73686966CB
+:10EFF000745F79202B2073656C662E6479202A0A51
+:10F000002020202020202020202020202020202000
+:10F01000202020202020202073656C662E737472BF
+:10F0200069646529202A206C65672E795F6469729E
+:10F03000202B2073656C662E7370726561642C0AD8
+:10F0400020202020202020202020202073656C6696
+:10F050002E72616973655F6C6567202A2073656C29
+:10F06000662E72616973655F7374657073202D20FD
+:10F0700073656C662E6865696768740A20202020B5
+:10F0800020202020290A20202020202020207365F5
+:10F090006C662E6D6F766528290A2020202020209E
+:10F0A000202073656C662E6D6F766528290A2020F6
+:10F0B000202020202020666F7220737465702069E4
+:10F0C0006E2072616E67652873656C662E72616969
+:10F0D00073655F7374657073202D2031293A0A209F
+:10F0E00020202020202020202020206C65672E6DED
+:10F0F0006F76655F627928302C20302C202D736567
+:10F100006C662E72616973655F6C6567290A2020E1
+:10F110002020202020202020202073656C662E6D6A
+:10F120006F766528290A2020202020202020736562
+:10F130006C662E6F6E5F67726F756E642E61707095
+:10F14000656E64286C6567290A2020202020202015
+:10F150002073656C662E6D6F766528290A0A0A721F
+:10F160006F626F74203D20526F626F7428290A67A6
+:10F17000616974203D20437265657028726F626F0B
+:10F1800074290A666F72207374657020696E20722C
+:10F19000616E6765283136293A0A202020206C6587
+:10F1A00067203D20726F626F742E6C6567735B67BA
+:10F1B0006169742E6C6173745F6C65675D0A2020F1
+:10F1C0002020676169742E73746570286C656729E7
+:10F1D0000A20202020676169742E6C6173745F6C53
+:10F1E0006567203D20676169742E6E6578745F6C79
+:10F1F00065675B305D5B676169742E6C6173745F1A
+:10F200006C65675D0A00000000000000000000005F
 :0400000500011C6D6D
 :00000001FF
--- a/tote.py	Tue Dec 01 00:28:57 2015 +0100
+++ b/tote.py	Tue Dec 01 11:47:18 2015 +0100
@@ -66,29 +66,25 @@
 
 class Robot:
     def __init__(self):
-        self.legs = [
+        self.legs = (
             Leg( 2,  1, 0, -1,  1),
             Leg( 5,  4, 3, -1, -1),
             Leg( 8,  7, 6,  1, -1),
             Leg(11, 10, 9,  1,  1),
-        ]
+        )
 
     def move_by(self, dx=0, dy=0, dz=0):
         for leg in self.legs:
             leg.move_by(dx * leg.x_dir, dy * leg.y_dir, dz)
 
-    def rotate_by(self, degrees):
-        for leg in self.legs:
-            leg.rotate_by(degrees)
-
 
 class Creep:
-    speed = 1
+    speed = 0.75
     stride = 14
     shift = 8
     shift_steps = 2
     raise_leg = 10
-    raise_steps = 3
+    raise_steps = 2
     next_leg = (
         (2, 0, 3, 1),   # forward
         (1, 3, 0, 2),   # backward
@@ -109,13 +105,15 @@
         self.spread = 0
         leg = robot.legs[0]
         self.height = leg.tibia
+        self.last_leg = 0
 
     def move(self):
         for leg in self.on_ground:
-            leg.move_to(leg.x - self.dx * leg.x_dir * self.speed,
-                        leg.y - self.dy * leg.y_dir * self.speed,
-                        -self.height)
-            leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
+            dx = self.dx * leg.x_dir * self.speed
+            dy = self.dy * leg.y_dir * self.speed
+            leg.move_to(leg.x - dx, leg.y - dy, -self.height)
+            #leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
+        microbit.sleep(25)
 
     def step(self, leg):
         dx = (leg.x_dir * self.shift - self.shift_x) / self.shift_steps
@@ -124,34 +122,30 @@
             robot.move_by(dx, dy, 0)
             self.shift_x += dx
             self.shift_y += dy
-            yield
+            self.move()
         self.on_ground.remove(leg)
         for step in range(self.raise_steps):
             leg.move_by(0, 0, self.raise_leg)
-            yield
+            self.move()
         leg.move_to(
-            (leg.home + self.shift_x + self.dx *
-             self.stride) * leg.x_dir + self.spread,
-            (leg.home + self.shift_y + self.dy *
-             self.stride) * leg.y_dir + self.spread,
+            leg.home + (self.shift_x + self.dx *
+                        self.stride) * leg.x_dir + self.spread,
+            leg.home + (self.shift_y + self.dy *
+                        self.stride) * leg.y_dir + self.spread,
             self.raise_leg * self.raise_steps - self.height
         )
-        yield
-        yield
+        self.move()
+        self.move()
         for step in range(self.raise_steps - 1):
             leg.move_by(0, 0, -self.raise_leg)
-            yield
+            self.move()
         self.on_ground.append(leg)
-        yield
-
-    def run(self, steps):
-        leg_index = 0
-        for step in range(steps):
-            leg = robot.legs[leg_index]
-            for frame in self.step(leg):
-                self.move()
-                microbit.sleep(20)
-            leg_index = self.next_leg[0][leg_index]
+        self.move()
 
 
 robot = Robot()
+gait = Creep(robot)
+for step in range(16):
+    leg = robot.legs[gait.last_leg]
+    gait.step(leg)
+    gait.last_leg = gait.next_leg[0][gait.last_leg]