- Select the transport: TCP or UDP;
- Design the protocol for carrying the control messages;
- Design and implement the server application (running in OpenWrt linux);
- Design and implement the client application (running in Windows or desktop linux);
(2) In the second point, a very simple protocol for carrying the control messages have been defined. Each packet has the following:
- CSEQ - (2 bytes) a field containing a sequential number for each message. It helps keep track of message order and rate of packet loss;
- CODE - (2 bytes) describes the type of the message (can be CONTROL, STATUS, or KEEP_ALIVE);
- LENGTH - (2 bytes) indicates the size in bytes of the payload (the field that follows);
- DATA - (0 - 18 bytes) the data itself;
- CHKSUM - (2 bytes) a simple 16 bit check sum of the entire packet.
- CHANNELS - (16 bytes) each channel is a 2 byte value which corresponds to the pulse width to be applied to the corresponding servo;
- BUTTONS - (2 bytes) each button in the joystick is represented by one bit, which contains its status.
(4) For the client I have given preference to implementing it in Java. The only challenge however was that Java doesn't natively support Joystick devices, so I had to find a library to take care of that. After a bit of searching I have found JXInput (http://www.hardcode.de/jxinput/), which seemed to be a decent library, with reasonable documentation and examples. All I had to do was using this library in my application (in the form of a Jar), and have the necessary windows dll in my application folder. This dll establishes the bridge (through JNI) to the Windows Joystick (or any other HID) API. Here is a screenshot of my application:
It connects to the car, passing steering commands from the joystick device. The user can select the joystick to use, and enter the IP address and port of the car.A few photos of the car, during a maintenance task. In the aileron is the battery pack for the control electronics (the Fonera and the MuIn):
Now controlling the "beast" is as simple as playing a videogame :)
No comments:
Post a Comment