The framework for remote control systems within AnimatLab is intended to simplify the task of connecting standard user IO devices, like joysticks, keyboards, and so on, to AnimatLab so it can interface directly with the neural control systems. Currently, it has support for the Xbee Commander joystick and the generic Animat serial protocol, but I plan to quickly add support for standard joystick and keyboard systems. The RemoteControl class is derived from RobotIOController. A remote control object contains a number of RemoteControlLinkage objects. Each one of these links a given command feature on the input system to drive a neural response. For example, the XBee commander has two joysticks with vertical and horizontal output values and several buttons. Using a linkage you can drive current into a neuron that is proportional to the horizontal value of one of the joysticks, or when one of the buttons are pressed. You can add as many different types of linkages as you need, and multiple linkages can use the same input data and drive the same neuron. So for example, you can have one linkage that is driven by the horizontal value of the joystick and only provides current to neuron A when the value is above 0, or when it is moving left. You can then have a second linkage that only provides current to neuron B when the value is below 0, or when it is moving right. Or you could have both linkages provide positive current when it moves left or right. It is entirely up to user on how they want this configured.
There are currently two types of linkages available. Each one can be added as an input from the hardware to the simulation, or as an output from the simulation back to the hardware. The first is the pass through linkage. It will take the input value from your linked item, convert that using a gain function, and then apply it as a current to a selected neuron. This is targeted towards continuous input data streams like the joystick position where you have always have analog value between A and B. The second linkage type is for pulsed data that only comes in sporadically. An example of this is shown with the XBee Commander system. It has functionality to detect when a user starts and stops moving the joystick and produces a single pulse. So you could use a pulsed linkage to look for that pulse. When it finds one then it will apply a specified current to the linked neuron for a given duration. If multiple pulses come in it will keep track of up to 100 pulses and apply each of them for the correct duration. Another example of where this type of linkage would be useful is if you have another system like Spike2 that is analyzing spike trains and then sending out brief data spikes each time it finds a matching waveform. You can assign a given waveform to have a unique ID and then use pulsed linkages to stimulate corresponding neurons within your simulation. So you could have multiple neurons that are stimulated when the same waveform is detected, but each with a different current magnitude and duration, or you could have a different waveform detection stimulate a unique neuron. Again, it is entirely user configurable how you want to set this up.
To add a remote control you need to right click on the robot interface and select Add Robot IO control. Then you need to select an IO control that is a remote control. Currently, this is can be the XBee Commander control or the AnimatSerial control. When that new part is selected you will see a Links item in the property grid that will say "Click to Edit." When you click on the button it will open an editor that will allow you to add/remove/edit linkages. You can add the linkage as an input to the simulation or as an output to the hardware. The XBee commander is defaulted with linkages for all the buttons and joysticks, but they are not linked to any outputs. Click the Add button to add new linkages, or the remove button to delete the selected one. Clicking on one of the linkages in the list will display its properties in the grid for editing. Below is a description of the properties for the two different types of linkages.
Here is a list of available remote control systems.
This project was supported by: