changeset 2:c4895760a38b

Get the IK right
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 30 Nov 2015 23:48:59 +0100
parents 15a0f4d2053b
children 755951b7ec90
files tote.hex tote.py
diffstat 2 files changed, 165 insertions(+), 164 deletions(-) [+]
line wrap: on
line diff
--- a/tote.hex	Mon Nov 30 20:33:38 2015 +0100
+++ b/tote.hex	Mon Nov 30 23:48:59 2015 +0100
@@ -11935,7 +11935,7 @@
 :10E9B000910D0000C91F0100C52F01003D34010069
 :04E9C000650D0000E1
 :020000040003F7
-:10E000004D50A50B696D706F7274206D6174680A54
+:10E000004D509C0B696D706F7274206D6174680A5D
 :10E01000696D706F7274207374727563740A0A6626
 :10E02000726F6D206D6963726F62697420696D70C3
 :10E030006F7274206932630A0A0A646566205F732E
@@ -11969,158 +11969,158 @@
 :10E1F0006C617373204C65673A0A2020202023202D
 :10E200004C656E67746873206F66206C6567207359
 :10E2100065676D656E74732C20696E206D6D0A20C4
-:10E22000202020636F7861203D2032322E3520205F
-:10E2300023206265747765656E207468652068695F
-:10E240007020616E6420746865206B6E65650A20BD
-:10E2500020202066656D7572203D203338202023F4
-:10E26000206265747765656E20746865206B6E65E5
-:10E270006520616E642074686520616E6B6C650A50
-:10E28000202020207469626961203D2033302020E5
-:10E2900023206265747765656E2074686520616E01
-:10E2A0006B6C6520616E642074686520666F6F74A6
-:10E2B0000A2020202062617365203D203135202016
-:10E2C000232066726F6D207468652063656E7465C7
-:10E2D00072206F6620626F64790A0A202020206411
-:10E2E0006566205F5F696E69745F5F2873656C6641
-:10E2F0002C206869705F736572766F2C206B6E6579
-:10E30000655F736572766F2C20616E6B6C655F73F1
-:10E310006572766F2C20785F6469722C20795F6457
-:10E320006972293A0A202020202020202073656C61
-:10E33000662E736572766F73203D20286869705F62
-:10E34000736572766F2C206B6E65655F7365727690
-:10E350006F2C20616E6B6C655F736572766F290A36
-:10E36000202020202020202073656C662E785F649A
-:10E370006972203D20785F6469720A202020202085
-:10E3800020202073656C662E795F646972203D20C1
-:10E39000795F6469720A20202020202020205351B8
-:10E3A000525432203D206D6174682E73717274284E
-:10E3B00032290A202020202020202073656C662E20
-:10E3C00078203D202873656C662E636F7861202B62
-:10E3D0002073656C662E66656D757229202F20533B
-:10E3E000515254320A202020202020202073656CB6
-:10E3F000662E79203D202D2873656C662E636F781C
-:10E4000061202B2073656C662E66656D7572292000
-:10E410002F205351525432202A2073656C662E7976
-:10E420005F6469720A202020202020202073656C00
-:10E43000662E7A203D202D73656C662E74696269A4
-: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
+:10E22000202020636F7861203D2020313220202083
+:10E230002023206265747765656E207468652068A8
+:10E24000697020616E6420746865206B6E65650A74
+:10E250002020202066656D7572203D2034322020FC
+:10E26000202023206265747765656E2074686520C0
+:10E270006B6E656520616E642074686520616E6BED
+:10E280006C650A202020207469626961203D20337A
+:10E29000382E35202023206265747765656E2074E2
+:10E2A000686520616E6B6C6520616E6420746865C2
+:10E2B00020666F6F740A2020202062617365203D04
+:10E2C0002020323120202020232066726F6D2074A0
+:10E2D00068652063656E746572206F6620626F6486
+:10E2E000790A0A20202020646566205F5F696E69D4
+:10E2F000745F5F2873656C662C206869705F736556
+:10E3000072766F2C206B6E65655F736572766F2C0D
+:10E3100020616E6B6C655F736572766F2C20785F21
+:10E320006469722C20795F646972293A0A2020207E
+:10E33000202020202073656C662E736572766F73C3
+:10E34000203D20286869705F736572766F2C206BA2
+:10E350006E65655F736572766F2C20616E6B6C65A0
+:10E360005F736572766F290A2020202020202020EC
+:10E3700073656C662E785F646972203D20785F64F7
+:10E3800069720A202020202020202073656C662ED0
+:10E39000795F646972203D20795F6469720A202088
+:10E3A0002020202020205351525432203D206D61E6
+:10E3B00074682E737172742832290A20202020205C
+:10E3C00020202073656C662E78203D202873656CB4
+:10E3D000662E636F7861202B2073656C662E6665F0
+:10E3E0006D757229202F2053515254320A2020205B
+:10E3F000202020202073656C662E79203D20287314
+:10E40000656C662E636F7861202B2073656C662EB9
+:10E4100066656D757229202F2053515254320A209F
+:10E420002020202020202073656C662E7A203D203D
+:10E430002D73656C662E74696269610A0A2020205A
+:10E4400020646566206D6F76655F746F2873656CF8
+:10E45000662C20783D4E6F6E652C20793D4E6F6E98
+:10E46000652C207A3D4E6F6E65293A0A20202020C7
+:10E47000202020202222224D6F766520746865209E
+:10E48000666F6F7420746F207468652073706563A5
+:10E49000696669656420706F696E742E0A0A2020AF
+:10E4A000202020202020496620616E79206F662080
+:10E4B00074686520636F6F7264696E617465732040
+:10E4C0006973204E6F6E652C206E6F206D6F7665C0
+:10E4D0006D656E742077696C6C20626520646F6E68
+:10E4E0006520696E20746861740A20202020202035
+:10E4F0002020617869732E0A2020202020202020EF
+:10E500002222220A20202020202020206966207834
+:10E51000206973204E6F6E653A0A2020202020204B
+:10E5200020202020202078203D2073656C662E78E6
+:10E530000A2020202020202020696620792069736D
+:10E54000204E6F6E653A0A202020202020202020B7
+:10E5500020202079203D2073656C662E790A2020CA
+:10E560002020202020206966207A206973204E6FA9
+:10E570006E653A0A20202020202020202020202004
+:10E580007A203D2073656C662E7A0A202020202098
+:10E5900020202066203D205F6E6F726D28782C2031
+:10E5A0007929202D2073656C662E636F78610A20AF
+:10E5B0002020202020202064203D205F6E6F726D7F
+:10E5C00028662C207A290A2020202020202020695B
+:10E5D000662064203E2073656C662E66656D7572DC
+:10E5E000202B2073656C662E74696269613A0A207B
+:10E5F00020202020202020202020207261697365A7
+:10E600002056616C75654572726F7228224F757461
+:10E61000206F6620726561636822290A202020200D
+:10E6200020202020686970203D206D6174682E6173
+:10E6300074616E3228792C2078290A20202020202D
+:10E640002020206B6E6565203D205F736F6C7665C2
+:10E650005F747269616E676C652873656C662E669F
+:10E66000656D75722C20642C2073656C662E746940
+:10E6700062696129202D206D6174682E6174616E5C
+:10E6800032282D7A2C2066290A20202020202020C4
+:10E6900020616E6B6C65203D205F736F6C76655FEB
+:10E6A000747269616E676C652873656C662E666549
+:10E6B0006D75722C2073656C662E74696269612CAD
+:10E6C0002064290A0A202020202020202068697048
+:10E6D000203D206D6174682E6465677265657328DE
+:10E6E00068697029202D2034350A20202020202020
+:10E6F00020206B6E6565203D206D6174682E646519
+:10E700006772656573286B6E6565290A2020202075
+:10E7100020202020616E6B6C65203D206D61746847
+:10E720002E6465677265657328616E6B6C65292060
+:10E730002D2039300A2020202020202020666F72D2
+:10E7400020736572766F2C20616E676C6520696E30
+:10E75000207A69702873656C662E736572766F73A4
+:10E760002C20286869702C206B6E65652C20616EEA
+:10E770006B6C6529293A0A202020202020202020A7
+:10E780002020206932632E777269746528307830D2
+:10E7900034203C3C20312C0A202020202020202026
+:10E7A00020202020202020202020202020207374C2
+:10E7B000727563742E7061636B28273C4242662732
+:10E7C0002C20736572766F2C20302C206D6174685C
+:10E7D0002E72616469616E7328616E676C652929A8
+:10E7E000290A202020202020202073656C662E78A6
+:10E7F000203D20780A202020202020202073656CD6
+:10E80000662E79203D20790A2020202020202020FB
+:10E8100073656C662E7A203D207A0A0A202020201B
+:10E82000646566206D6F76655F62792873656C66D6
+:10E830002C2064783D302C2064793D302C20647A83
+:10E840003D30293A0A202020202020202022222288
+:10E850004D6F76652074686520666F6F74206279ED
+:10E8600020746865207370656369666965642061FA
+:10E870006D6F756E742E2222220A20202020202007
+:10E88000202073656C662E6D6F76655F746F2873DC
+:10E89000656C662E78202B2064782C2073656C665E
+:10E8A0002E79202B2064792C2073656C662E7A20BB
+:10E8B0002B20647A290A0A202020206465662072B1
+:10E8C0006F746174655F62792873656C662C20646F
+:10E8D000656772656573293A0A2020202020202070
+:10E8E00020222222526F7461746520746865206C46
+:10E8F00065672061726F756E64207468652063655A
+:10E900006E746572206F662074686520626F64792A
+:10E9100020686F72697A6F6E74616C6C792E222236
+:10E92000220A202020202020202072616469616E4C
+:10E9300073203D206D6174682E72616469616E732D
+:10E940002864656772656573290A202020202020CD
+:10E95000202078203D2073656C662E78202B207354
+:10E96000656C662E626173650A20202020202020BD
+:10E970002079203D2073656C662E79202B207365ED
+:10E980006C662E626173650A2020202020202020E2
+:10E990006E78203D2078202A206D6174682E636F88
+:10E9A000732872616469616E7329202D2079202A91
+:10E9B000206D6174682E73696E2872616469616E7E
+:10E9C0007329202D2073656C662E626173650A20A1
+:10E9D000202020202020206E79203D2078202A2011
+:10E9E0006D6174682E73696E2872616469616E73FB
+:10E9F00029202B2079202A206D6174682E636F7383
+:10EA00002872616469616E7329202D2073656C66BC
+:10EA10002E626173650A202020202020202073654B
+:10EA20006C662E6D6F76655F746F286E782C206E25
+:10EA300079290A0A0A636C61737320526F626F74DA
+:10EA40003A0A20202020646566205F5F696E697441
+:10EA50005F5F2873656C66293A0A202020202020F9
+:10EA6000202073656C662E6C656773203D205B0A01
+:10EA70002020202020202020202020204C656728D6
+:10EA800020322C2020312C20302C202D312C202005
+:10EA900031292C0A20202020202020202020202066
+:10EAA0004C65672820352C2020342C20332C202D39
+:10EAB000312C202D31292C0A20202020202020201C
+:10EAC000202020204C65672820382C2020372C203F
+:10EAD000362C2020312C202D31292C0A20202020DA
+:10EAE00020202020202020204C65672831312C2038
+:10EAF00031302C20392C2020312C202031292C0A97
+:10EB000020202020202020205D0A0A2020202064B0
+:10EB10006566206D6F76655F62792873656C662C1B
+:10EB20002064783D302C2064793D302C20647A3D7F
+:10EB300030293A0A2020202020202020666F7220D1
+:10EB40006C656720696E2073656C662E6C656773F3
+:10EB50003A0A2020202020202020202020206C6520
+:10EB6000672E6D6F76655F6279286478202A206C45
+:10EB700065672E785F6469722C206479202A206C86
+:10EB800065672E795F6469722C20647A290A0A0A03
+:10EB9000726F626F74203D20526F626F7428290A71
+:10EBA0000000000000000000000000000000000065
 :0400000500011C6D6D
 :00000001FF
--- a/tote.py	Mon Nov 30 20:33:38 2015 +0100
+++ b/tote.py	Mon Nov 30 23:48:59 2015 +0100
@@ -20,10 +20,10 @@
 
 class Leg:
     # Lengths of leg segments, in mm
-    coxa = 22.5  # between the hip and the knee
-    femur = 38  # between the knee and the ankle
-    tibia = 30  # between the ankle and the foot
-    base = 15  # from the center of body
+    coxa =  12    # between the hip and the knee
+    femur = 42    # between the knee and the ankle
+    tibia = 38.5  # between the ankle and the foot
+    base =  21    # from the center of body
 
     def __init__(self, hip_servo, knee_servo, ankle_servo, x_dir, y_dir):
         self.servos = (hip_servo, knee_servo, ankle_servo)
@@ -31,7 +31,7 @@
         self.y_dir = y_dir
         SQRT2 = math.sqrt(2)
         self.x = (self.coxa + self.femur) / SQRT2
-        self.y = -(self.coxa + self.femur) / SQRT2 * self.y_dir
+        self.y = (self.coxa + self.femur) / SQRT2
         self.z = -self.tibia
 
     def move_to(self, x=None, y=None, z=None):
@@ -53,9 +53,10 @@
         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)
+
+        hip = math.degrees(hip) - 45
         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)))
@@ -80,10 +81,10 @@
 class Robot:
     def __init__(self):
         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),
+            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):