Stand alone
The Robot system can be controlled by Rich-middle ware (a.k.a. ROS). System verification perspective, In system verification stage, we should provide minimum test script. This page shows how to control OMG-01 by Game Controller.
- Structure
- Game Controller
Game Controller is used for controlling method. Bluetooth is key-technology, however it’s affordable.
You can use your favorite Game Controller. However it’s depend on RasPi distribution. Honestly, I have tried several controllers. I confirmed above as well.
- python script
For GameController read by event-lib. Read controller stick value (0-255), multiplied factors for quantization from 0-1023, then transmit to Groovy-PID by PySerial
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import requestsfrom evdev import InputDevice, categorize, ecodesimport serialfrom time import sleepmotor_speedL = 0motor_speedR = 0#creates object gamepadgamepad = InputDevice('/dev/input/event0')#prints out device info at startprint(gamepad)ser = serial.Serial('/dev/ttyACM0', 57600, timeout=1)print (ser)#display codesfor event in gamepad.read_loop():#Buttonsif event.type == ecodes.EV_KEY:print(event)#Analog gamepadelif event.type == ecodes.EV_ABS:absevent = categorize(event)# print ecodes.bytype[absevent.event.type][absevent.event.code], absevent.event.valueif ecodes.bytype[absevent.event.type][absevent.event.code] == 'ABS_Y':jLeft = absevent.event.valuemotor_speedL = (jLeft - 128) * 8if (motor_speedL < -1023):motor_speedL = -1023elif ecodes.bytype[absevent.event.type][absevent.event.code] == 'ABS_RZ':jRight = absevent.event.valuemotor_speedR = -(jRight - 128) * 8if (motor_speedR > 1023):motor_speedR = 1023motorSpeed = ('s 2 %d %d\r\n' % (motor_speedL, motor_speedR))sleep(0.01)ser.write(motorSpeed)print (motorSpeed)print("End script")