RoboDaemon is a simulator and controllor for one or more mobile robots. At present it can control robots from RWI, Cyberworks, and Nomadics, and simulate the behaviour of these and other types of robots. In includes various sensor simulators, including an extremely realistic sonar simulator.
This information applies to version 9 of
robodaemon. It is only an approximation of the truth, since the
software is constantly evolving. Also, robodaemon can be
extensively modified via user configuration, so it may
not look the way this document leads you to expect it.
Last update: Jan. 1998. Note: this page is maintained by Professor Gregory Dudek from the School of Computer Science at the Centre for Intelligent Machines (CIM). McGill
daemon provides a point-and-click interface to the RWI B-12 robot, the NOMAD B200 and the CyberWorks Machine as well as various internet and simulation services. Some of this isn't documented yet....
The button called range simulates the used of a sonar sensor. The simulation is very accurate, but the data returned is rather surprising sometimes. The inaccuracies in the data are the kind of think that make perception for mobile robots tricky.
The button nsonar takes the number you type in the lower right box and uses that to specify how many different simulated sonar sensors the simulated robot should have.
The button marked draw allows you to draw walls in the simulated environment.
The button marked clear deletes existing data. If you hold down the shift key while you click it, it will also delete the walls.
The button called position allows to to direct the robot to move. It will try and plan a path to the position you click on, so long as it does not have to come too close to either a wall or a location where is previously saw something (including a spurious measurement).
The buttons on the left on the window should be pretty self-explanatory. Note that some, like verbosity, cycle through a series of settings (shown in the display widget near the end of the button list). For example, clicking on the "verbosity" button increases verbosity up to its maximum level of 3 (thats lots of diagnostics for almost everything the program does) and then another click cycles back to the zero (quiet) setting. There are some non-obvious features, however, some of which are outlined below under MODIFIERS.
The button titled "keyboard" allows a keyboard interface to be used via the tty that started daemon. The command "help" lists the available commands, of which there are quiet a few. The command "show" or "show *" lists the variables that may be examined or modified (via the "set" command, eg. "set verbosity 2"). A rudimentary programming and macro language is also supported. The thing that looks like a button called "edit" is actually a text widget for entering in parameters or the name of a data file to be used by the "load" and "save" commands.
Before starting, the program reads the file "initcmds" in the current directory for initialisation information.
A few arbitrary commands can be added to the graphic interface by using the "buttonize" command. This takes one or more arguments and creates a new button on the main display window that executes the argument(s) as a command.
Some of the commands and operating states are modal or act differently when certain modifiers keys (mainly the shift key) are depressed. These include:
Clicks in Draw Mode - Draws sonar points if shift key depressed.
Clicks in Draw Mode - Deletes sonar points if control key depressed.
Right mouse - Zooms out normally, in if shift depressed.
load button - Doesn't ask about moving robot when shift key depressed.
.sp
.in -6
-c : Enter the command-line mode before initializing (to allow variables to be modified).
-v : Verbose (diagnostic) mode.
-D filename : specify a tty device to use for communication
-p : Don't open a sonar plotting window.
-r : Connect to the real robot.
-f : Use the feeler device.
-s : Use a quick and simple sonar simulation.
It is possible to communicate with the daemon using InterNet stream sockets. Messages to the daemon are fixed-size packets that start with a 1-character command code. Some of the commands are: q: quit, a: absolute move, c: connect request, t: turn (in degrees), m: relative move, n: label position.
The interface supports a simple command interface that can be accessed by simply typing at the controlling keyboard or by click the "Keyboard" button. One this is done, the program will remain in line-oriented mode (and the mouse cannot be used) until an EOF character is typed to the keyboard (usually control-D). This line mode supports inspection of most program variables, a simple command language, and access to a lisp interpreter (via the command "lisp").
A large variety of the programs internal variables or operating
parameters can be inspected or modified using the "set" and "show commands.
Variables whose names begin with an underscore ("_") are
not modifiable. For example, the measurement units in which the
robot position us displayed can be changed using the command:
"set units 3"
or
"set units feet".
The command "show" displays the names of the accessible variables
while "show *" displays all of them along with their values.
Macros are defined using one of two commands: for one-line macros: "one_line_define \\\\name body" or for multi-line macros: "macro \\\\name", followed by the body on multiple lines, terminated with a line containing a closing brace bracket. The command "compute \\\\a = b + c" can be used for simple arithmetic. The destination \\\\a can be specified as @a if an assignment to the program variable "a" is desired (eg. @verbosity). Source variables can be prefixed with "#" to access program variables (eg. compute @verbosity = #feeler_on * 2). .sp The command: "if a OP b" will skip the following command if the conditional expression "a OP b" is FALSE, where OP can be one of =,!=,<,>,#<,#>. Note these are string comparison operators except for the last two (those starting with a hash-mark). Finally, the commands "label foo" and "goto foo" can be used (presumably with "if") for control-flow. Note: using goto to skip backwards in a sequence of commands can only be used with commands being read from a file (via the cmdread command).
Here's a simple loop:
define greet
echo This loop is
echo " " complete.
}
# end of macro
one_line_define counter 0
label top
compute \\\\counter = counter + 1
echo Doing iteration, \\counter = counter
if counter #< 10
goto top
greet
(This can only be used if read from a file.)