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
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])
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))
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
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)
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])
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()
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)
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)
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()
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'))
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)
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)
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))
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
def wrapper(): p = Panda() for i in [0, 1, 2, 0xFFFF]: p.can_clear(i) p.reset() p.close() fn()
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)
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)
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
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("")
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)
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)
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
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()
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
def wrapper(*args, **kwargs): p = Panda() for i in [0, 1, 2, 0xFFFF]: p.can_clear(i) p.reset() p.close() f(*args, **kwargs)