This service allows input from usb joysticks or gamepads. You can attach to a joystick and examine axis or button data. These button and joystick events can be sent to other services, such as servos or motor services. It could be used for a "manual" override to take control of a robot.
Since Servos require a range of values from 0 to 180, and Joystick's raw data is between -1.0 and 1.0 a tranform is possible. To transform -1.0 to 1.0 to 0 to 180 we need a multiplier and an offset. In this case the multiplier is 90 and the offset is 90.
Arduino PWM values require a range between 0 and 255. The multiplier would be 127 and the offset is 127 - this will allow the Joystick service to send correct values to an Arduino PWM.
Programmatic control can be done with Python through the Jython service.
Testing on Raspberry Pi in the MRL Installation directory with jinput-test.jar
java -Djava.library.path=./libraries/native/arm.32.linux -cp ./libraries/jar/jinput.jar:./libraries/jar/jinput-test.jar net.java.games.input.test.ControllerTextTestjava -Djava.library.path=./libraries/native/arm.32.linux -cp ./libraries/jar/jinput.jar:./libraries/jar/jinput-test.jar net.java.games.input.test.ControllerReadTestjava -Djava.library.path=./libraries/native/arm.32.linux -cp ./libraries/jar/jinput.jar:./libraries/jar/jinput-test.jar net.java.games.input.test.RumbleTest
If you want to use a PS3 Controller/Joystick using Bluetooth on a Raspberry PI, this is a guide on how to do that: PS3 Joystick