def pcv(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(10) p = geckopy.Publisher() camera = WebcamVideoStream(src=0).start() while not geckopy.is_shutdown(): img = camera.read() if img is not None: # geckopy.log(img.shape) # img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = cv2.resize(img, (640,480)) msg = find_ball(img) # msg = Image(img.shape, img.tobytes(), img.dtype) if msg: # p.pub('images_color', msg) # topic msg p.pub('target', msg) geckopy.log(msg) # p.pub(topic, {'a': 5}) # geckopy.log(img.shape) else: geckopy.log("*** couldn't read image ***") # sleep rate.sleep() camera.stop() print('cv bye ...')
def movement(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(1) path = [ (1.0,0,0,), (1.0,0,0,), (1.0,0,0,), (1.0,0,0,), (1.0,0,0,), (1.0,0,0,), ] p = geckopy.Publisher() i = 0 cmd = itertools.cycle(path) while not geckopy.is_shutdown(): msg = next(cmd) p.pub('cmd', msg) # topic msg geckopy.log(msg) # geckopy.log('[{}] published: {}'.format(i, msg)) # i = (i + 1) % len(path) rate.sleep() print('pub bye ...')
def imu_publisher(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(10) p = geckopy.Publisher() test = kwargs.get('test', False) imu = IMU_hw() while not geckopy.is_shutdown(): if test: # fake readings msg = IMU( Vector(1, 2, 3), Vector(1, 2, 3), Vector(1, 2, 3), ) else: a, m, g = imu.get() geckopy.log('{:.1f} {:.1f} {:.1f}'.format(*a)) msg = IMU(Vector(*a), Vector(*m), Vector(*g)) p.pub('imu', msg) msg = Vector(0, 0, 1) p.pub('unit_accel', msg) # sleep rate.sleep()
def lidar_publisher(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(1) geckopy.log(kwargs) p = geckopy.Publisher() test = kwargs.get('test', False) # MAP_SIZE_PIXELS = 500 # MAP_SIZE_METERS = 10 if platform.system() == 'Linux': port = '/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0' else: port = "/dev/tty.SLAB_USBtoUART" # Connect to Lidar unit lidar = LDS01() lidar.open(port) lidar.run(True) # Create an RMHC SLAM object with a laser model and optional robot model # slam = RMHC_SLAM(LDS01_Model(), MAP_SIZE_PIXELS, MAP_SIZE_METERS) # Set up a SLAM display # display = SlamShow(MAP_SIZE_PIXELS, MAP_SIZE_METERS*1000/MAP_SIZE_PIXELS, 'SLAM') # Initialize empty map # mapbytes = bytearray(MAP_SIZE_PIXELS * MAP_SIZE_PIXELS) while not geckopy.is_shutdown(): # Update SLAM with current Lidar scan pts = lidar.read() # need to reverse the order for it to plot correctly pts = list(reversed(pts)) msg = Lidar(pts) p.pub('scan', msg) # slam.update(pts) # Get current robot position # x, y, theta = slam.getpos() # Get current map bytes as grayscale # slam.getmap(mapbytes) # display.displayMap(mapbytes) # display.setPose(x, y, theta) # display.refresh() # p.pub('avoid', msg) # geckopy.log(msg) # sleep rate.sleep() # all done lidar.close()
def matrix(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(1) test = kwargs.get('test', False) matrix = LEDDisplay() s = geckopy.Subscriber(['led'], got_msg) i = 0 while not geckopy.is_shutdown(): # if s has message, call function # else update led geckopy.log('x') # matrix.setRandom() matrix.update() # matrix.set(1,1,127) # matrix.clear() # matrix.display.set_pixel(i//8,i%8, 1) # matrix.write() # i = (i+1)%64 rate.sleep()
def slam_publisher(**kwargs): geckopy.init_node(**kwargs) rate = geckopy.Rate(10) geckopy.log(kwargs) p = geckopy.Publisher() test = kwargs.get('test', False) # MAP_SIZE_PIXELS = 500 # MAP_SIZE_METERS = 10 if platform.system() == 'Linux': port = '/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0' else: port = "/dev/tty.SLAB_USBtoUART" # Connect to Lidar unit lidar = LDS01() lidar.open(port) lidar.run(True) # Create an RMHC SLAM object with a laser model and optional robot model # slam = RMHC_SLAM(LDS01_Model(), MAP_SIZE_PIXELS, MAP_SIZE_METERS) # Set up a SLAM display # display = SlamShow(MAP_SIZE_PIXELS, MAP_SIZE_METERS*1000/MAP_SIZE_PIXELS, 'SLAM') # Initialize empty map # mapbytes = bytearray(MAP_SIZE_PIXELS * MAP_SIZE_PIXELS) while not geckopy.is_shutdown(): # Update SLAM with current Lidar scan pts = lidar.read() # need to reverse the order for it to plot correctly pts = list(reversed(pts)) # kludge until i fix the driver scan = [] for i, p in enumerate(pts): scan.append(( i, p, )) msg = Lidar(scan) if test: print("[LIDAR]=================") print(" points: {}".format(len(msg.scan))) print(" pt[0]: {}".format(msg.scan[0])) print(" timestamp: {}".format(msg.timestamp)) obs = range_filter(scan, 200) print("[Obstacles]=============") print(" number: {}".format(len(obs))) print(" obs: {}".format(obs)) else: p.pub('scan', msg) # slam.update(pts) # Get current robot position # x, y, theta = slam.getpos() # Get current map bytes as grayscale # slam.getmap(mapbytes) # display.displayMap(mapbytes) # display.setPose(x, y, theta) # display.refresh() # p.pub('avoid', msg) # geckopy.log(msg) # sleep rate.sleep() # all done lidar.close()