@@ -3,7 +3,7 @@

import rospy
import struct
-from i2c import i2c
+from i2c import *
from math import *
from geometry_msgs.msg import Twist

@@ -15,13 +15,24 @@ class MoveBase:
self.set_speed(0, 0)
+               i2c_write_reg(0x50, 0x90, struct.pack("BB", 1, 1)) # switch direction
self.run()

def run(self):
-               rate = rospy.Rate(10.0)
+               rate = rospy.Rate(20.0)
while not rospy.is_shutdown():
+                       self.get_pos()
+                       #self.get_dist_forward()
+                       #self.get_dist_backward()
+                       #self.get_dist_left()
+                       #self.get_dist_right()
rate.sleep()

+       def get_pos(self):
+               s = i2c_read_reg(0x50, 0x10, 8)
+               hall1, hall2, hall3, hall4 = struct.unpack(">hhhh", s)
+               print hall1, hall2, hall3, hall4
+
def set_speed(self, left, right):
if left > 0: left+=80
elif left < 0: left-=80
@@ -33,10 +44,7 @@ class MoveBase:
if right > 255: right=255
elif right < -255: right=-255

-               dev = i2c(0x56)
-               s = struct.pack(">Bhh", 0x1, left, right)
-               dev.write(s)
-               dev.close()
+               i2c_write_reg(0x50, 0x1, struct.pack(">hhhh", right, right, left, left))

trans = msg.linear.x
@@ -46,6 +54,48 @@ class MoveBase:
left = trans*2-right
self.set_speed(left, right)

+       # http://rn-wissen.de/wiki/index.php/Sensorarten#Sharp_GP2D12
+       def get_dist_ir(self, num):
+               dev = i2c(0x52)
+               s = struct.pack("B", num)
+               dev.write(s)
+               dev.close()
+
+               sleep(2e-6)
+
+               dev = i2c(0x52)
+               dev.close()
+
+               val = struct.unpack(">H", s)[0]
+               return 15221/(val - -276.42)/100;
+
+       def get_dist_srf(self, num):
+               dev = i2c(0x52)
+               s = struct.pack("B", num)
+               dev.write(s)
+               dev.close()
+
+               sleep(50e-3)
+
+               dev = i2c(0x52)
+               dev.close()
+
+               return struct.unpack(">H", s)[0]/1000.0
+
+       def get_dist_left(self):
+               dist = self.get_dist_ir(0x1)
+
+       def get_dist_right(self):
+                dist = self.get_dist_ir(0x3)
+
+       def get_dist_forward(self):
+               dist = self.get_dist_srf(0x5)
+
+       def get_dist_backward(self):
+               dist = self.get_dist_srf(0x7)
+

if __name__ == "__main__":
MoveBase()