Exemplo n.º 1
0
def connect():
  pandas = Panda.list()
  print(pandas)

  # make sure two pandas are connected
  if len(pandas) != 2:
    print("Connect white and grey/black panda to run this test!")
    assert False

  # connect
  pandas[0] = Panda(pandas[0])
  pandas[1] = Panda(pandas[1])

  white_panda = None
  gps_panda = None

  # find out which one is white (for spamming the CAN buses)
  if pandas[0].is_white() and not pandas[1].is_white():
    white_panda = pandas[0]
    gps_panda = pandas[1]
  elif not pandas[0].is_white() and pandas[1].is_white():
    white_panda = pandas[1]
    gps_panda = pandas[0]
  else:
    print("Connect white and grey/black panda to run this test!")
    assert False
  return white_panda, gps_panda
Exemplo n.º 2
0
    def __init__(self):
        # create simulation (GUI)
        self.urdfRootPath = pybullet_data.getDataPath()
        p.connect(p.GUI)
        p.setGravity(0, 0, -9.81)

        # set up camera
        self._set_camera()

        # load some scene objects
        p.loadURDF(os.path.join(self.urdfRootPath, "plane.urdf"),
                   basePosition=[0, 0, -0.65])
        p.loadURDF(os.path.join(self.urdfRootPath, "table/table.urdf"),
                   basePosition=[0.5, 0, -0.65])
        p.loadURDF(os.path.join(self.urdfRootPath, "table/table.urdf"),
                   basePosition=[0.5, 1, -0.65])

        # example YCB object
        obj1 = YCBObject('003_cracker_box')
        obj1.load()
        p.resetBasePositionAndOrientation(obj1.body_id, [0.7, -0.2, 0.1],
                                          [0, 0, 0, 1])

        # example RBO object
        obj2 = RBOObject('book')
        obj2.load()
        p.resetBasePositionAndOrientation(obj2.body_id, [0.8, 1.1, 0.5],
                                          [0, 0, 1, 1])

        # load a panda robot
        self.panda1 = Panda([0, 0, 0])
        self.panda2 = Panda([0, 1, 0])
Exemplo n.º 3
0
def test_throughput(serial=None):
  connect_wifi(serial)
  p = Panda(serial)

  # enable output mode
  p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)

  # send heartbeat
  p.send_heartbeat()

  # enable CAN loopback mode
  p.set_can_loopback(True)

  p = Panda("WIFI")

  for speed in [100,250,500,750,1000]:
    # send heartbeat
    p.send_heartbeat()

    # set bus 0 speed to speed
    p.set_can_speed_kbps(0, speed)
    time.sleep(0.1)

    comp_kbps = time_many_sends(p, 0)

    # bit count from https://en.wikipedia.org/wiki/CAN_bus
    saturation_pct = (comp_kbps/speed) * 100.0
    #assert_greater(saturation_pct, 80)
    #assert_less(saturation_pct, 100)

    print("WIFI loopback 100 messages at speed %d, comp speed is %.2f, percent %.2f" % (speed, comp_kbps, saturation_pct))
Exemplo n.º 4
0
def tesla_tester():

    try:
        print("Trying to connect to Panda over USB...")
        p = Panda()

    except AssertionError:
        print("USB connection failed. Trying WiFi...")

        try:
            p = Panda("WIFI")
        except:
            print(
                "WiFi connection timed out. Please make sure your Panda is connected and try again."
            )
            sys.exit(0)

    body_bus_speed = 125  # Tesla Body busses (B, BF) are 125kbps, rest are 500kbps
    body_bus_num = 1  # My TDC to OBD adapter has PT on bus0 BDY on bus1 and CH on bus2
    p.set_can_speed_kbps(body_bus_num, body_bus_speed)

    # Now set the panda from its default of SAFETY_SILENT (read only) to SAFETY_ALLOUTPUT
    # Careful, as this will let us send any CAN messages we want (which could be very bad!)
    print("Setting Panda to output mode...")
    p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)

    # BDY 0x248 is the MCU_commands message, which includes folding mirrors, opening the trunk, frunk, setting the cars lock state and more. For our test, we will edit the 3rd byte, which is MCU_lockRequest. 0x01 will lock, 0x02 will unlock:
    print("Unlocking Tesla...")
    p.can_send(0x248, b"\x00\x00\x02\x00\x00\x00\x00\x00", body_bus_num)

    #Or, we can set the first byte, MCU_frontHoodCommand + MCU_liftgateSwitch, to 0x01 to pop the frunk, or 0x04 to open/close the trunk (0x05 should open both)
    print("Opening Frunk...")
    p.can_send(0x248, b"\x01\x00\x00\x00\x00\x00\x00\x00", body_bus_num)

    #Back to safety...
    print("Disabling output on Panda...")
    p.set_safety_mode(Panda.SAFETY_SILENT)

    print(
        "Reading VIN from 0x568. This is painfully slow and can take up to 3 minutes (1 minute per message; 3 messages needed for full VIN)..."
    )

    vin = {}
    while True:
        #Read the VIN
        can_recv = p.can_recv()
        for address, _, dat, src in can_recv:
            if src == body_bus_num:
                if address == 1384:  #0x568 is VIN
                    vin_index = int(binascii.hexlify(dat)
                                    [:2])  #first byte is the index, 00, 01, 02
                    vin_string = binascii.hexlify(dat)[
                        2:]  #rest of the string is the actual VIN data
                    vin[vin_index] = vin_string.decode("hex")
                    print("Got VIN index " + str(vin_index) + " data " +
                          vin[vin_index])
        #if we have all 3 parts of the VIN, print it and break out of our while loop
        if 0 in vin and 1 in vin and 2 in vin:
            print("VIN: " + vin[0] + vin[1] + vin[2][:3])
            break
Exemplo n.º 5
0
    def __init__(self):

        print "Panda/CanBus shell:"
        print "Ctrl-C - interrupt running command"
        print "Ctrl-D - exit canshell"
        print(" ! <expr> - evaluate python expression")
        print(" help - list commands")
        print(" help <command> - command help")
        print("")

        cmd.Cmd.__init__(self)
        self.__baseline__ = set()
        self.__ignore__ = set()

        try:
            print("Trying to connect to Panda over USB...")
            self.panda = Panda()

        except AssertionError:
            print("USB connection failed. Trying WiFi...")

        #self.panda = None
        try:
            self.panda = Panda("WIFI")
        except:
            print(
                "WiFi connection timed out. Please make sure your Panda is connected and try again."
            )
            sys.exit(0)

        self.panda.can_clear(0)
Exemplo n.º 6
0
def test_send_recv(serial_sender=None, serial_reciever=None):
    p_send = Panda(serial_sender)
    p_recv = Panda(serial_reciever)

    p_send.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
    p_send.set_can_loopback(False)

    p_recv.set_can_loopback(False)

    assert not p_send.legacy
    assert not p_recv.legacy

    p_send.can_send_many([(0x1ba, 0, "message", 0)] * 2)
    time.sleep(0.05)
    p_recv.can_recv()
    p_send.can_recv()

    busses = [0, 1, 2]

    for bus in busses:
        for speed in [100, 250, 500, 750, 1000]:
            p_send.set_can_speed_kbps(bus, speed)
            p_recv.set_can_speed_kbps(bus, speed)
            time.sleep(0.05)

            comp_kbps = time_many_sends(p_send, bus, p_recv, two_pandas=True)

            saturation_pct = (comp_kbps / speed) * 100.0
            assert_greater(saturation_pct, 80)
            assert_less(saturation_pct, 100)

            print(
                "two pandas bus {}, 100 messages at speed {:4d}, comp speed is {:7.2f}, percent {:6.2f}"
                .format(bus, speed, comp_kbps, saturation_pct))
def run_test(sleep_duration):
    global counter, nonzero_bus_errors, zero_bus_errors, content_errors

    pandas = Panda.list()
    print(pandas)

    # make sure two pandas are connected
    if len(pandas) != 2:
        print("Connect white/grey and black panda to run this test!")
        assert False

    # connect
    pandas[0] = Panda(pandas[0])
    pandas[1] = Panda(pandas[1])

    black_panda = None
    other_panda = None

    # find out which one is black
    if pandas[0].is_black() and not pandas[1].is_black():
        black_panda = pandas[0]
        other_panda = pandas[1]
    elif not pandas[0].is_black() and pandas[1].is_black():
        black_panda = pandas[1]
        other_panda = pandas[0]
    else:
        print("Connect white/grey and black panda to run this test!")
        assert False

    # disable safety modes
    black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
    other_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)

    # test health packet
    print("black panda health", black_panda.health())
    print("other panda health", other_panda.health())

    # test black -> other
    while True:
        test_buses(black_panda, other_panda, True, [(0, False, [0]),
                                                    (1, False, [1]),
                                                    (2, False, [2]),
                                                    (1, True, [0])],
                   sleep_duration)
        test_buses(black_panda, other_panda, False, [(0, False, [0]),
                                                     (1, False, [1]),
                                                     (2, False, [2]),
                                                     (0, True, [0, 1])],
                   sleep_duration)
        counter += 1
        print("Number of cycles:", counter, "Non-zero bus errors:",
              nonzero_bus_errors, "Zero bus errors:", zero_bus_errors,
              "Content errors:", content_errors)

        # Toggle relay
        black_panda.set_safety_mode(Panda.SAFETY_NOOUTPUT)
        time.sleep(1)
        black_panda.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
        time.sleep(1)
    def test_friends_of(self):
        ivo = Panda("Ivo", "*****@*****.**", "male")
        mina = Panda("Mina", "*****@*****.**", "female")
        self.assertFalse(self.network.friends_of(ivo))

        self.network.make_friends(self.peshko, self.marto)
        self.network.make_friends(self.peshko, mina)
        self.assertEqual(self.network.friends_of(self.peshko),
                         [self.marto, mina])
Exemplo n.º 9
0
def can_logger():

    try:
        print("Trying to connect to Panda over USB...")
        p = Panda()

    except AssertionError:
        print("USB connection failed. Trying WiFi...")

        try:
            p = Panda("WIFI")
        except:
            print(
                "WiFi connection timed out. Please make sure your Panda is connected and try again."
            )
            sys.exit(0)

    try:
        outputfile = open('output.csv', 'wb')
        csvwriter = csv.writer(outputfile)
        #Write Header
        csvwriter.writerow(['Bus', 'MessageID', 'Message', 'MessageLength'])
        print("Writing csv file output.csv. Press Ctrl-C to exit...\n")

        bus0_msg_cnt = 0
        bus1_msg_cnt = 0
        bus2_msg_cnt = 0

        while True:
            can_recv = p.can_recv()

            for address, _, dat, src in can_recv:
                csvwriter.writerow([
                    str(src),
                    str(hex(address)), "0x" + binascii.hexlify(dat),
                    len(dat)
                ])

                if src == 0:
                    bus0_msg_cnt += 1
                elif src == 1:
                    bus1_msg_cnt += 1
                elif src == 2:
                    bus2_msg_cnt += 1

                print("Message Counts... Bus 0: " + str(bus0_msg_cnt) +
                      " Bus 1: " + str(bus1_msg_cnt) + " Bus 2: " +
                      str(bus2_msg_cnt),
                      end='\r')

    except KeyboardInterrupt:
        print("\nNow exiting. Final message Counts... Bus 0: " +
              str(bus0_msg_cnt) + " Bus 1: " + str(bus1_msg_cnt) + " Bus 2: " +
              str(bus2_msg_cnt))
        outputfile.close()
Exemplo n.º 10
0
    def test_connection_level(self):
        # Wannabe Graph again :D
        ivo = Panda("Ivo", "*****@*****.**", "male")
        rado = Panda("Rado", "*****@*****.**", "male")
        mimi = Panda('mimi', '*****@*****.**', 'female')
        gosho = Panda('gosho', '*****@*****.**', 'male')
        tony = Panda('tony', '*****@*****.**', 'female')
        sasho = Panda('sasho', '*****@*****.**', 'male')
        pesho = Panda('pesho', '*****@*****.**', 'male')
        kremena = Panda('kremena', '*****@*****.**', 'female')
        sad = Panda('sad', '*****@*****.**', 'male')

        self.network.make_friends(ivo, rado)
        self.network.make_friends(ivo, gosho)
        self.network.make_friends(ivo, mimi)
        self.network.make_friends(rado, mimi)
        self.network.make_friends(rado, tony)
        self.network.make_friends(tony, gosho)
        self.network.make_friends(kremena, pesho)
        self.network.make_friends(kremena, tony)
        self.network.make_friends(kremena, mimi)
        self.network.make_friends(sasho, gosho)

        self.assertEqual(self.network.connection_level(ivo, rado), 1)
        self.assertEqual(self.network.connection_level(kremena, rado), 2)
        self.assertEqual(self.network.connection_level(ivo, sad), -1)
        self.assertEqual(self.network.connection_level(mimi, tony), 2)
        self.assertEqual(self.network.connection_level(pesho, gosho), 3)
    def test_connection_level(self):
        ivo = Panda("Ivo", "*****@*****.**", "male")
        mina = Panda("Mina", "*****@*****.**", "female")
        tony = Panda("Tony", "*****@*****.**", "female")

        self.network.make_friends(ivo, tony)
        self.network.make_friends(self.marto, ivo)
        self.network.make_friends(self.marto, self.peshko)
        self.network.make_friends(self.peshko, mina)
        self.network.make_friends(mina, tony)

        self.assertEqual(self.network.connection_level(ivo, mina), 2)
Exemplo n.º 12
0
    def test_connection_level(self):
        rado = Panda("Rado", "*****@*****.**", "male")
        pavli = Panda("Pavli", "*****@*****.**", "male")
        maria = Panda("maria", "*****@*****.**", "female")

        self.network.make_friends(self.ivo, rado)
        self.network.make_friends(rado, pavli)
        self.network.make_friends(pavli, maria)

        self.assertEqual(self.network.connection_level(self.ivo, rado), 1)
        self.assertEqual(self.network.connection_level(self.ivo, pavli), 2)
        self.assertEqual(self.network.connection_level(self.ivo, maria), 3)
Exemplo n.º 13
0
def test_elm_panda_safety_mode_ISO15765():
    s = elm_connect()
    serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None
    p_car = Panda(serial) # Configure this so the messages will send
    p_car.set_can_speed_kbps(0, 500)
    p_car.set_safety_mode(Panda.SAFETY_ALLOUTPUT)

    p_elm = Panda("WIFI")
    p_elm.set_safety_mode(0xE327);

    #sim = elm_car_simulator.ELMCarSimulator(serial, lin=False)
    #sim.start()

    def did_send(p, addr, dat, bus):
        p.can_send(addr, dat, bus)
        t = time.time()
        while time.time()-t < 0.5:
            msg = p.can_recv()
            for addrin, _, datin, busin in msg:
                if (0x80 | bus) == busin and addr == addrin and datin == dat:
                    return True
            time.sleep(0.01)
        return False

    try:
        sync_reset(s) # Reset elm (which requests the ELM327 safety mode)

        #29 bit
        assert not did_send(p_elm, 0x18DB33F1, b'\x02\x01\x00\x00\x00\x00\x00\x00', 1) #wrong canid
        assert not did_send(p_elm, 0x18DB33F1, b'\x02\x01\x00', 0) #wrong length
        assert not did_send(p_elm, 0x10000000, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr
        assert not did_send(p_elm, 0x18DAF133, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr (phy addr)
        assert not did_send(p_elm, 0x18DAF000, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr
        assert not did_send(p_elm, 0x18DAF1F3, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr! (phys rsp to elm)

        assert did_send(p_elm, 0x18DB33F1, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #good! (obd func req)
        assert did_send(p_elm, 0x18DA10F1, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #good! (phys response)

        #11 bit
        assert not did_send(p_elm, 0X7DF, b'\x02\x01\x00\x00\x00\x00\x00\x00', 1) #wrong canid
        assert not did_send(p_elm, 0X7DF, b'\x02\x01\x00', 0) #wrong length
        assert not did_send(p_elm, 0xAA, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr
        assert not did_send(p_elm, 0x7DA, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr (phy addr)
        assert not did_send(p_elm, 0x7E8, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #bad addr (sending 'response')

        assert did_send(p_elm, 0x7DF, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #good! (obd func req)
        assert did_send(p_elm, 0x7E1, b'\x02\x01\x00\x00\x00\x00\x00\x00', 0) #good! (phys response)

    finally:
        s.close()
Exemplo n.º 14
0
def main():
    filename = 'output.txt'

    network = PandaSocialNetwork()
    ivo = Panda("Ivo", "*****@*****.**", "male")
    rado = Panda("Rado", "*****@*****.**", "male")
    mimi = Panda('mimi', '*****@*****.**', 'female')
    gosho = Panda('gosho', '*****@*****.**', 'male')
    tony = Panda('tony', '*****@*****.**', 'female')
    sasho = Panda('sasho', '*****@*****.**', 'male')
    pesho = Panda('pesho', '*****@*****.**', 'male')
    kremena = Panda('kremena', '*****@*****.**', 'female')

    network.make_friends(ivo, rado)
    network.make_friends(ivo, gosho)
    network.make_friends(ivo, mimi)
    network.make_friends(rado, mimi)
    network.make_friends(rado, tony)
    network.make_friends(tony, gosho)
    network.make_friends(kremena, pesho)
    network.make_friends(kremena, tony)
    network.make_friends(kremena, mimi)
    network.make_friends(sasho, gosho)

    network.save(filename)
    network1 = PandaSocialNetwork()
    network1.load(filename)
    print(network1.how_many_gender_in_network(3, kremena, 'male'))
Exemplo n.º 15
0
def test_elm_panda_safety_mode_KWPFast():
    serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None
    p_car = Panda(serial)  # Configure this so the messages will send
    p_car.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
    p_car.kline_drain()

    p_elm = Panda("WIFI")
    p_elm.set_safety_mode(Panda.SAFETY_ELM327)

    def get_checksum(dat):
        result = 0
        result += sum(map(ord, dat)) if isinstance(b'dat', str) else sum(dat)
        return struct.pack("B", result % 0x100)

    def timed_recv_check(p, bus, goodmsg):
        t = time.time()
        msg = bytearray()

        while time.time() - t < 0.5 and len(msg) != len(goodmsg):
            msg += p._handle.controlRead(Panda.REQUEST_OUT, 0xe0, bus, 0,
                                         len(goodmsg) - len(msg))
            #print("Received", repr(msg))
            if msg == goodmsg:
                return True
            time.sleep(0.01)
        return False

    def kline_send(p, x, bus=2):
        p.kline_drain(bus=bus)
        p._handle.bulkWrite(2, bytes([bus]) + x)
        return timed_recv_check(p, bus, x)

    def did_send(priority, toaddr, fromaddr, dat, bus=2, checkbyte=None):
        msgout = struct.pack("BBB", priority | len(dat), toaddr,
                             fromaddr) + dat
        msgout += get_checksum(msgout) if checkbyte is None else checkbyte
        print("Sending", hex(priority), hex(toaddr), hex(fromaddr),
              repr(msgout))

        if not kline_send(p_elm, msgout, bus=bus):
            return False
        return timed_recv_check(p_car, bus, msgout)

    assert not did_send(0xC0, 0x33, 0xF1, b'\x01\x0F', bus=3)  # wrong bus
    assert not did_send(0xC0, 0x33, 0xF1, b'')  # wrong length
    assert not did_send(0xB0, 0x33, 0xF1, b'\x01\x0E')  # bad priority
    assert not did_send(0xC0, 0x00, 0xF1, b'\x01\x0D')  # bad addr
    assert not did_send(0xC0, 0x33, 0x00, b'\x01\x0C')  # bad addr

    assert did_send(0xC0, 0x33, 0xF1, b'\x01\x0B')  # good! (obd func req)
Exemplo n.º 16
0
    def test_how_many_genders(self):
        # Wannabe Graph again :D
        ivo = Panda("Ivo", "*****@*****.**", "male")
        rado = Panda("Rado", "*****@*****.**", "male")
        mimi = Panda('mimi', '*****@*****.**', 'female')
        gosho = Panda('gosho', '*****@*****.**', 'male')
        tony = Panda('tony', '*****@*****.**', 'female')
        sasho = Panda('sasho', '*****@*****.**', 'male')
        pesho = Panda('pesho', '*****@*****.**', 'male')
        kremena = Panda('kremena', '*****@*****.**', 'female')

        self.network.make_friends(ivo, rado)
        self.network.make_friends(ivo, gosho)
        self.network.make_friends(ivo, mimi)
        self.network.make_friends(rado, mimi)
        self.network.make_friends(rado, tony)
        self.network.make_friends(tony, gosho)
        self.network.make_friends(kremena, pesho)
        self.network.make_friends(kremena, tony)
        self.network.make_friends(kremena, mimi)
        self.network.make_friends(sasho, gosho)

        self.assertEqual(
            self.network.how_many_gender_in_network(1, rado, 'female'), 2)
        self.assertEqual(
            self.network.how_many_gender_in_network(1, rado, 'male'), 1)
        self.assertEqual(
            self.network.how_many_gender_in_network(1, rado, 'female'), 2)
        self.assertEqual(
            self.network.how_many_gender_in_network(2, rado, 'male'), 2)
        self.assertEqual(
            self.network.how_many_gender_in_network(3, kremena, 'male'), 5)
Exemplo n.º 17
0
def test_recv_only(serial=None):
  connect_wifi(serial)
  p = Panda(serial)
  p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
  p.set_can_loopback(True)
  pwifi = Panda("WIFI")

  # TODO: msg_count=1000 drops packets, is this fixable?
  for msg_count in [10,100,200]:
    speed = 500
    p.set_can_speed_kbps(0, speed)
    comp_kbps = time_many_sends(p, 0, pwifi, msg_count)
    saturation_pct = (comp_kbps/speed) * 100.0

    print("HT WIFI loopback %d messages at speed %d, comp speed is %.2f, percent %.2f" % (msg_count, speed, comp_kbps, saturation_pct))
Exemplo n.º 18
0
    def load(self, file_name):

        with open('socialNetwork.json', "r") as f:
            data = json.load(f)
            f.close()

        for key, value in data.items():
            key_split = key.split(',')
            self.graph[Panda(key_split[0], 'da', 'dwa')] = []
            for v in value:
                v_split = v.split(',')
                self.graph[Panda(key_split[0], 'da',
                                 'dwa')].append(Panda(v_split[0], 'da', 'dwa'))

        return data
Exemplo n.º 19
0
 def wrapper():
   p = Panda()
   for i in [0, 1, 2, 0xFFFF]:
     p.can_clear(i)
   p.reset()
   p.close()
   fn()
Exemplo n.º 20
0
    def __init__(self,
                 sn,
                 silent=False,
                 can_kbaud=500,
                 can=True,
                 can11b=True,
                 can29b=True,
                 lin=True):
        self.__p = Panda(sn if sn else Panda.list()[0])
        self.__on = True
        self.__stop = False
        self.__silent = silent

        self.__lin_timer = None
        self.__lin_active = False
        self.__lin_enable = lin
        self.__lin_monitor_thread = threading.Thread(target=self.__lin_monitor)

        self.__can_multipart_data = None
        self.__can_kbaud = can_kbaud
        self.__can_extra_noise_msgs = deque()
        self.__can_enable = can
        self.__can11b = can11b
        self.__can29b = can29b
        self.__can_monitor_thread = threading.Thread(target=self.__can_monitor)
Exemplo n.º 21
0
def send_thread(sender_serial):
  while True:
    try:
      if jungle:
        sender = PandaJungle(sender_serial)
      else:
        sender = Panda(sender_serial)
        sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT)

      sender.set_can_loopback(False)
      can_sock = messaging.sub_sock('can')

      while True:
        tsc = messaging.recv_one(can_sock)
        snd = can_capnp_to_can_list(tsc.can)
        snd = list(filter(lambda x: x[-1] <= 2, snd))

        try:
          sender.can_send_many(snd)
        except usb1.USBErrorTimeout:
          pass

        # Drain panda message buffer
        sender.can_recv()
    except Exception:
      traceback.print_exc()
      time.sleep(1)
Exemplo n.º 22
0
    def wrapper(panda_serials=None, **kwargs):
        # Change panda_serials to a list
        if panda_serials is not None:
            if not isinstance(panda_serials, list):
                panda_serials = [panda_serials]

        # Connect to pandas
        pandas = []
        for panda_serial in panda_serials:
            pandas.append(Panda(serial=panda_serial))

        # Initialize pandas
        for panda in pandas:
            panda.set_can_loopback(False)
            panda.set_gmlan(None)
            panda.set_esp_power(False)
            for bus, speed in [(0, SPEED_NORMAL), (1, SPEED_NORMAL),
                               (2, SPEED_NORMAL), (3, SPEED_GMLAN)]:
                panda.set_can_speed_kbps(bus, speed)
            clear_can_buffers(panda)
            _thread.start_new_thread(heartbeat_thread, (panda, ))
            panda.set_power_save(False)

        # Run test function
        ret = fn(*pandas, **kwargs)

        # Close all connections
        for panda in pandas:
            panda.close()

        # Return test function result
        return ret
Exemplo n.º 23
0
def test_udp_doesnt_drop():
    connect_wifi()

    p = Panda()
    p.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
    p.set_can_loopback(True)

    pwifi = PandaWifiStreaming()
    while 1:
        if len(pwifi.can_recv()) == 0:
            break

    for msg_count in [1, 100]:
        for i in range({1: 0x80, 100: 0x20}[msg_count]):
            pwifi.kick()

            speed = 500
            p.set_can_speed_kbps(0, speed)
            comp_kbps = time_many_sends(p,
                                        0,
                                        pwifi,
                                        msg_count=msg_count,
                                        msg_id=0x100 + i)
            saturation_pct = (comp_kbps / speed) * 100.0

            if msg_count == 1:
                sys.stdout.write(".")
                sys.stdout.flush()
            else:
                print(
                    "UDP WIFI loopback %d messages at speed %d, comp speed is %.2f, percent %.2f"
                    % (msg_count, speed, comp_kbps, saturation_pct))
                assert_greater(saturation_pct, 40)
                assert_less(saturation_pct, 100)
        print("")
Exemplo n.º 24
0
    def wrapper(panda_type=None, **kwargs):
        # Change panda_types to a list
        if panda_type is not None:
            if not isinstance(panda_type, list):
                panda_type = [panda_type]

        # If not done already, get panda serials and their type
        global _panda_serials
        if _panda_serials == None:
            _panda_serials = []
            for serial in Panda.list():
                p = Panda(serial=serial)
                _panda_serials.append((serial, p.get_type()))
                p.close()

        # Find a panda with the correct types and add the corresponding serial
        serials = []
        for p_type in panda_type:
            found = False
            for serial, pt in _panda_serials:
                # Never take the same panda twice
                if (pt == p_type) and (serial not in serials):
                    serials.append(serial)
                    found = True
                    break
            if not found:
                raise IOError(
                    "No unused panda found for type: {}".format(p_type))
        return fn(serials, **kwargs)
Exemplo n.º 25
0
	def __generatePandas(self):
		"""
		Generate randomly positioned pandas in a way that there is
		a minimum distance between them and the spikes
		"""
		i = 0
		while(i < self.pandaNumber):
			colisionDetected = False
			x = randrange(50 - self.gameWidth/2, -50 + self.gameWidth/2)
			y = randrange(50 - self.gameHeight/2, -50 + self.gameHeight/2)
			pandaPoint = Point3(x, y, 1.5)

			for panda in Panda.pandaList:
				point = panda.pandaHandle.getPos(self.render)
				dist = (point.getXy() - pandaPoint.getXy()).lengthSquared()
				if dist < 100:
					colisionDetected = True
					break
			if colisionDetected:
				continue

			for spike in Spike.spikeNormalList:
				point = spike.spikeHandle.getPos(self.render)
				dist = (point.getXy() - pandaPoint.getXy()).lengthSquared()
				if dist < 100:
					colisionDetected = True
					break
			if colisionDetected:
				continue

			self.ga.internalPop[i].setParams(pandaId = i)
			Panda(self, x, y, self.ga.internalPop[i])
			i += 1
    def test_are_pandas_connected(self):
        self.network.make_friends(self.peshko, self.marto)
        self.assertTrue(
            self.network.connection_level(self.peshko, self.marto) != 0)

        ivo = Panda("Ivo", "*****@*****.**", "male")
        self.assertFalse(self.network.connection_level(self.peshko, ivo) != 0)
Exemplo n.º 27
0
def update_panda():
    panda = None
    panda_dfu = None

    cloudlog.info("Connecting to panda")

    while True:
        # break on normal mode Panda
        panda_list = Panda.list()
        if len(panda_list) > 0:
            cloudlog.info("Panda found, connecting")
            panda = Panda(panda_list[0])
            break

        # flash on DFU mode Panda
        panda_dfu = PandaDFU.list()
        if len(panda_dfu) > 0:
            cloudlog.info("Panda in DFU mode found, flashing recovery")
            panda_dfu = PandaDFU(panda_dfu[0])
            panda_dfu.recover()

        time.sleep(1)

    fw_fn = get_firmware_fn()
    fw_signature = get_expected_signature(fw_fn)

    try:
        serial = panda.get_serial()[0].decode("utf-8")
    except Exception:
        serial = None

    panda_version = "bootstub" if panda.bootstub else panda.get_version()
    panda_signature = b"" if panda.bootstub else panda.get_signature()
    cloudlog.warning(
        "Panda %s connected, version: %s, signature %s, expected %s" % (
            serial,
            panda_version,
            panda_signature.hex(),
            fw_signature.hex(),
        ))

    if panda.bootstub or panda_signature != fw_signature:
        cloudlog.info("Panda firmware out of date, update required")
        panda.flash(fw_fn)
        cloudlog.info("Done flashing")

    if panda.bootstub:
        cloudlog.info(
            "Flashed firmware not booting, flashing development bootloader")
        panda.recover()
        cloudlog.info("Done flashing bootloader")

    if panda.bootstub:
        cloudlog.info("Panda still not booting, exiting")
        raise AssertionError

    panda_signature = panda.get_signature()
    if panda_signature != fw_signature:
        cloudlog.info("Version mismatch after flashing, exiting")
        raise AssertionError
Exemplo n.º 28
0
    def __init__(self):
        # create simulation
        self.urdfRootPath = pybullet_data.getDataPath()
        p.connect(p.GUI)  # DIRECT or GUI
        p.setGravity(0, 0, -9.81)

        # set up camera
        self._set_camera()

        # load some scene objects
        p.loadURDF(os.path.join(self.urdfRootPath, "plane.urdf"),
                   basePosition=[0, 0, -0.65])
        p.loadURDF(os.path.join(self.urdfRootPath, "table/table.urdf"),
                   basePosition=[0.5, 0, -0.65])

        # obstacle
        obj1 = YCBObject('003_cracker_box')
        obj1.load()
        p.resetBasePositionAndOrientation(obj1.body_id, [0.5, 0.0, 0.05],
                                          [0, 0, 0, 1])

        # target
        obj2 = YCBObject('002_master_chef_can')
        obj2.load()
        p.resetBasePositionAndOrientation(obj2.body_id, [0.75, 0.0, 0.01],
                                          [0, 0, 0, 1])

        # load a panda robot
        self.panda = Panda()
Exemplo n.º 29
0
def update_panda():
    with open(os.path.join(BASEDIR, "VERSION")) as f:
        repo_version = f.read()
    repo_version += "-EON" if os.path.isfile('/EON') else "-DEV"

    panda = None
    panda_dfu = None

    cloudlog.info("Connecting to panda")

    while True:
        # break on normal mode Panda
        panda_list = Panda.list()
        if len(panda_list) > 0:
            cloudlog.info("Panda found, connecting")
            panda = Panda(panda_list[0])
            break

        # flash on DFU mode Panda
        panda_dfu = PandaDFU.list()
        if len(panda_dfu) > 0:
            cloudlog.info("Panda in DFU mode found, flashing recovery")
            panda_dfu = PandaDFU(panda_dfu[0])
            panda_dfu.recover()

        print "waiting for board..."
        time.sleep(1)

    current_version = "bootstub" if panda.bootstub else str(
        panda.get_version())
    cloudlog.info("Panda connected, version: %s, expected %s" %
                  (current_version, repo_version))

    if panda.bootstub or not current_version.startswith(repo_version):
        cloudlog.info("Panda firmware out of date, update required")

        signed_fn = os.path.join(BASEDIR, "board", "obj", "panda.bin.signed")
        if os.path.exists(signed_fn):
            cloudlog.info("Flashing signed firmware")
            panda.flash(fn=signed_fn)
        else:
            cloudlog.info("Building and flashing unsigned firmware")
            panda.flash()

        cloudlog.info("Done flashing")

    if panda.bootstub:
        cloudlog.info(
            "Flashed firmware not booting, flashing development bootloader")
        panda.recover()
        cloudlog.info("Done flashing bootloader")

    if panda.bootstub:
        cloudlog.info("Panda still not booting, exiting")
        raise AssertionError

    version = str(panda.get_version())
    if not version.startswith(repo_version):
        cloudlog.info("Version mismatch after flashing, exiting")
        raise AssertionError
Exemplo n.º 30
0
 def wrapper(*args, **kwargs):
   p = Panda()
   for i in [0, 1, 2, 0xFFFF]:
     p.can_clear(i)
   p.reset()
   p.close()
   f(*args, **kwargs)