Exemplo n.º 1
0
    def __init__(self):
        self.logger = logging.getLogger(Config.LOGGING_NAME+".Hexapod")
        self.logger.info("Initializing Hexapod...")

        self.configParser = ConfigParser("BaralabaBob")
        self.configDir = path.join(path.dirname(Amelior.__file__), "config/model/BaralabaBob")
        self.config = self.configParser.loadConfig("hexapod.cfg")

        self.logger.debug("Connecting to TCP Serial Bridge...")
        self.comms = robotcommunication.RobotCommunication()
        self.comms.connect((Config.TCP_SERIAL_BRIDGE_IP, Config.TCP_SERIAL_BRIDGE_PORT))
        self.logger.debug("Changing to Servo Comms mode...")
        self.comms.send(bytes("S\r", "utf-8"))
        sleep(0.3)
        self.logger.info("Connected to TCP Serial Bridge")
        self._position = Position3D(0, 0, 0)

        EventHandler.addListener("serialUpdater", EventTypes.JOINT_SERVO_SIGNAL_CHANGE, self.updateServoSignal)
        EventHandler.addListener("updateOffset", EventTypes.JOINT_SERVO_OFFSET_CHANGE, self.updateServoPositionOffset)

        #Reads in the home directory of the config files, and joins it to the leg config location
        self.legs = legs.Legs(self.config)

        mandiblesConfig = path.join(self.configDir, self.config["mandiblesConfig"])
        self.mandibles = mandibles.Mandibles(mandiblesConfig)

        tailConfig = path.join(self.configDir, self.config["tailConfig"])
        self.tail = tail.Tail(tailConfig)

        self.on = False

        self.logger.info("Initialized Hexapod!")
Exemplo n.º 2
0
class Hexapod:
    def __init__(self):
        self.logger = logging.getLogger(Config.LOGGING_NAME+".Hexapod")
        self.logger.info("Initializing Hexapod...")

        self.configParser = ConfigParser("BaralabaBob")
        self.configDir = path.join(path.dirname(Amelior.__file__), "config/model/BaralabaBob")
        self.config = self.configParser.loadConfig("hexapod.cfg")

        self.logger.debug("Connecting to TCP Serial Bridge...")
        self.comms = robotcommunication.RobotCommunication()
        self.comms.connect((Config.TCP_SERIAL_BRIDGE_IP, Config.TCP_SERIAL_BRIDGE_PORT))
        self.logger.debug("Changing to Servo Comms mode...")
        self.comms.send(bytes("S\r", "utf-8"))
        sleep(0.3)
        self.logger.info("Connected to TCP Serial Bridge")
        self._position = Position3D(0, 0, 0)

        EventHandler.addListener("serialUpdater", EventTypes.JOINT_SERVO_SIGNAL_CHANGE, self.updateServoSignal)
        EventHandler.addListener("updateOffset", EventTypes.JOINT_SERVO_OFFSET_CHANGE, self.updateServoPositionOffset)

        #Reads in the home directory of the config files, and joins it to the leg config location
        self.legs = legs.Legs(self.config)

        mandiblesConfig = path.join(self.configDir, self.config["mandiblesConfig"])
        self.mandibles = mandibles.Mandibles(mandiblesConfig)

        tailConfig = path.join(self.configDir, self.config["tailConfig"])
        self.tail = tail.Tail(tailConfig)

        self.on = False

        self.logger.info("Initialized Hexapod!")

    def translate(self, x, y, z):
        self._position = Position3D(self._position.x+x, self._position.y+y, self._position.z+z)
        self.legs.moveBody(Position3D(x, y, z))

    def setPosition(self, position):
        self._position = position
        self.legs.moveBody(position)

    @property
    def position(self):
        return self._position

    @position.setter
    def position(self, position):
        self.setPosition(position)


    def start(self):
        pass

    def turnOn(self):
        self.legs.setSpeed(self.config["defaultSpeed"])
        #setOffsetPositions()
        self.legs.turnOn()
        self.mandibles.turnOn()
        self.tail.turnOn()

        self.on = True

    def step(self):
        self.legs.setSpeed(120)
        self.legs.getLeg(1).translate(0, 20, 40)
        self.legs.getLeg(4).translate(0, 20, 40)
        self.legs.getLeg(5).translate(0, 20, 40)

        time.sleep(0.3)

        self.legs.getLeg(1).translate(0, 20, -40)
        self.legs.getLeg(4).translate(0, 20, -40)
        self.legs.getLeg(5).translate(0, 20, -40)

        time.sleep(0.3)

        self.legs.getLeg(2).translate(0, 20, 40)
        self.legs.getLeg(3).translate(0, 20, 40)
        self.legs.getLeg(6).translate(0, 20, 40)

        time.sleep(0.3)

        self.legs.getLeg(2).translate(0, 20, -40)
        self.legs.getLeg(3).translate(0, 20, -40)
        self.legs.getLeg(6).translate(0, 20, -40)

        time.sleep(0.3)

        self.translate(0, 40, 0)

        time.sleep(1)

    def updateOffsets(self):
        self.mandibles.updateOffsets()
        self.legs.updateOffsets()
        self.tail.updateOffsets()


    def turnOff(self):
        #self.turnOn()
        self.legs.turnOff()
        self.mandibles.turnOff()
        self.tail.turnOff()

        self.on = False

    def smoothTest(self):
        factor = 1.5
        time.sleep(0.5)
        self.turnOn()
        while True:
            self.legs.getLeg(6).tibia.setAngle(84, time=1000)
            time.sleep(1.0)
            self.legs.getLeg(6).tibia.setAngle(0, time=1000)
            time.sleep(1.0)

    def updateServoSignal(self, data):
        packet = "#%d P%d T%d\r" % (data[1], data[2], data[3])
        self.comms.send(bytes(packet, 'utf-8'));

    def updateServoPositionOffset(self, data):
        packet = "#%d PO %d\r" % (data[0], data[1])
        self.comms.send(bytes(packet, 'utf-8'))