<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rsewiki.electro.dtu.dk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lvm</id>
	<title>Rsewiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://rsewiki.electro.dtu.dk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lvm"/>
	<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Special:Contributions/Lvm"/>
	<updated>2026-04-24T06:44:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=230</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=230"/>
		<updated>2008-09-29T12:28:58Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* How-to documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wellcome to the wiki pages of the Robot Systems Engineering (RSE) group at Institute for Automation, DTU Electical engineering.&lt;br /&gt;
&lt;br /&gt;
These pages will contain updated information on RSE projects and other issued related to robotics research at the Institute for Automation.&lt;br /&gt;
&lt;br /&gt;
= RSE Projects = &lt;br /&gt;
[[AU Robot Servers]], download and documentation&lt;br /&gt;
&lt;br /&gt;
[[RHD]] Robot Hardware Daemon&lt;br /&gt;
&lt;br /&gt;
[[Robot sensor modules]], description and documentation&lt;br /&gt;
&lt;br /&gt;
[[Simulation]], description of simulation environments&lt;br /&gt;
&lt;br /&gt;
= Robots =&lt;br /&gt;
&lt;br /&gt;
[[SMR]] (Small Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
[[MMR]] (Medium Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
= How-to documentation =&lt;br /&gt;
&lt;br /&gt;
[[NTP howto]] time-sync 2 computers&lt;br /&gt;
&lt;br /&gt;
Using the [[RSE SVN]] repository&lt;br /&gt;
&lt;br /&gt;
[[Flash disk cloning]]&lt;br /&gt;
&lt;br /&gt;
[[AU software license considerations]]&lt;br /&gt;
&lt;br /&gt;
[[RoboCup]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=229</id>
		<title>SMR</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=229"/>
		<updated>2008-09-29T12:27:13Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SMR Clips Interface]]&lt;br /&gt;
&lt;br /&gt;
[[SMR wiring and assembly]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Flash Disk Cloning]]&lt;br /&gt;
&lt;br /&gt;
[[How to make the SMR&#039;s work without a monitor]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Peer to Peer Networking]]&lt;br /&gt;
&lt;br /&gt;
SMRCL http://www.iau.dtu.dk/~naa/smr/smrcl.pdf&lt;br /&gt;
&lt;br /&gt;
SMR simulator: http://www.iau.dtu.dk/ingarb/sim/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[SMRD communication]]&lt;br /&gt;
&lt;br /&gt;
[[libsmr]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Smr_write&amp;diff=228</id>
		<title>Smr write</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Smr_write&amp;diff=228"/>
		<updated>2008-09-29T12:24:52Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page:  int smr_write(struct smr *robot);  Smr_write communcates with the smr daemon [smrd], sending fields in the struct smr pointed to by &amp;#039;&amp;#039;robot&amp;#039;&amp;#039; for transmission in a subsequent sample p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; int smr_write(struct smr *robot);&lt;br /&gt;
&lt;br /&gt;
Smr_write communcates with the smr daemon [smrd], sending fields in the [[struct smr]] pointed to by &#039;&#039;robot&#039;&#039; for&lt;br /&gt;
transmission in a subsequent sample period.&lt;br /&gt;
&lt;br /&gt;
Smr_write uses some of the fields in *robot as input parameters.&lt;br /&gt;
&lt;br /&gt;
Ordinarily, zero is returned. If case of error, for example if communication is not possible, a non-zero value is returned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following fields are read by smr_write:&lt;br /&gt;
   robot-&amp;gt;write_flags:   An ORed combination of flags, indicating which data smr_write should send.&lt;br /&gt;
   robot-&amp;gt;left.speed, robot-&amp;gt;right.speed:   Motor speed reference values.&lt;br /&gt;
   robot-&amp;gt;msg:   Asynchronous message to send.&lt;br /&gt;
&lt;br /&gt;
The valid write flags are:&lt;br /&gt;
   SMR_FLAG_LV:   Left motor speed.&lt;br /&gt;
   SMR_FLAG_RV:   Right motor speed.&lt;br /&gt;
   SMR_FLAG_AM:   Asynchronous message.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Smr_read&amp;diff=227</id>
		<title>Smr read</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Smr_read&amp;diff=227"/>
		<updated>2008-09-29T12:23:56Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page:  int smr_read(struct smr *robot); Smr_read communcates with the smr daemon [smrd], updating fields in the [struct smr] pointed to by &amp;#039;&amp;#039;robot&amp;#039;&amp;#039; with values from the next sample period.   Sm...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; int smr_read(struct smr *robot);&lt;br /&gt;
Smr_read communcates with the smr daemon [smrd], updating fields in the [struct smr] pointed to by &#039;&#039;robot&#039;&#039; with values&lt;br /&gt;
from the next sample period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Smr_read uses some of the fields in &#039;&#039;*robot&#039;&#039; as input parameters, others for return values.&lt;br /&gt;
&lt;br /&gt;
Ordinarily, zero is returned. If case of error, for example if communication is not possible, a non-zero value is returned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following fields are read by smr_read:&lt;br /&gt;
   robot-&amp;gt;wait_flags:   An ORed combination of sensor flags, indicating which data smr_read should wait for.&lt;br /&gt;
   robot-&amp;gt;recv_hook:   A pointer to an asynchronous message receive function. If not NULL, smr_read calls this function for each message received from smrd. Such a function can be used to process messages which would otherwise be ignored.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return values&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following fields can be written by smr_read:&lt;br /&gt;
   robot-&amp;gt;read_flags:   An ORed combination of sensor flags, indicating which data were received.&lt;br /&gt;
   robot-&amp;gt;left.encoder, robot-&amp;gt;right.encoder, robot-&amp;gt;left.pwm, robot-&amp;gt;right.pwm, robot-&amp;gt;left.status, robot-&amp;gt;right.status, robot-&amp;gt;ls, robot-&amp;gt;ir, robot-&amp;gt;ad, robot-&amp;gt;status:   Data read from server.&lt;br /&gt;
   robot-&amp;gt;ticks:   Sample number read from server.&lt;br /&gt;
   robot-&amp;gt;ts:   Time stamp read from server.&lt;br /&gt;
&lt;br /&gt;
The valid flags are:&lt;br /&gt;
   SMR_FLAG_LE:   Left encoder&lt;br /&gt;
   SMR_FLAG_RE:   Right encoder&lt;br /&gt;
   SMR_FLAG_IR:   Proximity sensors&lt;br /&gt;
   SMR_FLAG_LS:   Line sensor&lt;br /&gt;
   SMR_FLAG_LV:   Left speed&lt;br /&gt;
   SMR_FLAG_PW:   Power module data&lt;br /&gt;
   SMR_FLAG_LPS:   Left motor pwm and status&lt;br /&gt;
   SMR_FLAG_RPS:   Right motor pwm and status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The operation of smr_read is as follows:&lt;br /&gt;
   1. Receive messages until &#039;start of sample&#039;.&lt;br /&gt;
   1. Copy timing fields from &#039;start of sample&#039; to &#039;&#039;*robot&#039;&#039;.&lt;br /&gt;
   1. Receive messages until &#039;end of sample&#039;, or until all data has been read as indicated in &#039;&#039;wait_flags&#039;&#039;. Copy sensor data to &#039;&#039;*robot&#039;&#039; and update &#039;&#039;robot-&amp;gt;read_flags&#039;&#039; for each message.&lt;br /&gt;
   1. Done.&lt;br /&gt;
&lt;br /&gt;
Not all data indicated in &#039;&#039;wait_flags&#039;&#039; is necessarily received: smr_read waits at most one sample.&lt;br /&gt;
Test &#039;&#039;read_flags&#039;&#039; to see which data was received: if a flag is not set in &#039;&#039;read_flags&#039;&#039; the corresponding data will be old.&lt;br /&gt;
&lt;br /&gt;
Data other than those indicated in &#039;&#039;wait_flags&#039;&#039; may be received: read_flags reflects whatever data was read.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Reading asychronous messages&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Smr_read calls the user specified function &#039;&#039;robot-&amp;gt;recv_hook&#039;&#039;, if specified, for each message received.&lt;br /&gt;
&lt;br /&gt;
Such a function should have the type:&lt;br /&gt;
 void recv_hook_function(struct smr *);&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=226</id>
		<title>Libsmr</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=226"/>
		<updated>2008-09-29T12:23:45Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibSmr is the C programming library that enables C programs to communicate with the SMR sensor daemon, [smrd].&lt;br /&gt;
&lt;br /&gt;
The library provides two types of functions: smr specific and low level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smr specific functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The library provides four C functions: smr_connect(), smr_disconnect(), smr_read() and smr_write().&lt;br /&gt;
These are modelled after similarly named functions familiar to C programmers, used for other kinds of input/output.&lt;br /&gt;
&lt;br /&gt;
Central to all use of the smr specific functions if a &#039;&#039;struct smr&#039;&#039; datatype.&lt;br /&gt;
A pointer to such a struct is returned by smr_connect(), and this pointer is used in all subsequent calls to&lt;br /&gt;
smr_read() and smr_write(), and must finally be provided to smr_close().&lt;br /&gt;
&lt;br /&gt;
To use the library, a header file must be included.&lt;br /&gt;
The following summary shows the function type declarations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;smr.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[struct smr]] *[[smr_connect]](char *hostname, int port);&lt;br /&gt;
&lt;br /&gt;
void [[smr_disconnect]]([[struct smr]] *robot);&lt;br /&gt;
&lt;br /&gt;
int [[smr_read]]([[struct smr]] *robot);&lt;br /&gt;
&lt;br /&gt;
int [[smr_write]]([[struct smr]] *robot);&lt;br /&gt;
&lt;br /&gt;
Each function, and the smr struct datatype, is described on its own page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Low level functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The low level functions are not currently documented.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Smr_disconnect&amp;diff=225</id>
		<title>Smr disconnect</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Smr_disconnect&amp;diff=225"/>
		<updated>2008-09-29T12:22:18Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page:  void smr_disconnect(struct smr *robot); Smr_disconnect() terminates the connection to the smr daemon, [smrd], associated with &amp;#039;&amp;#039;robot&amp;#039;&amp;#039;. The pointer &amp;#039;&amp;#039;robot&amp;#039;&amp;#039; must have been previously re...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; void smr_disconnect(struct smr *robot);&lt;br /&gt;
Smr_disconnect() terminates the connection to the smr daemon, [smrd], associated with &#039;&#039;robot&#039;&#039;.&lt;br /&gt;
The pointer &#039;&#039;robot&#039;&#039; must have been previously returned by [[smr_connect]].&lt;br /&gt;
&lt;br /&gt;
Before closing the connection,&lt;br /&gt;
smr_disconnect tries to stop the smr by sending a speed of zero to both motors.&lt;br /&gt;
&lt;br /&gt;
Smr_disconnect frees all resources associated with the connection: the value passed for &#039;&#039;robot&#039;&#039; should&lt;br /&gt;
not subsequently be used in any way.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Smr_connect&amp;diff=224</id>
		<title>Smr connect</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Smr_connect&amp;diff=224"/>
		<updated>2008-09-29T12:21:30Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page:  struct smr *smr_connect(char *hostname, int port);  Smr_connect() establishes a connection to the smr daemon, [smrd], running on host &amp;#039;&amp;#039;hostname&amp;#039;&amp;#039; at TCP/IP port &amp;#039;&amp;#039;port&amp;#039;&amp;#039;.  The default ho...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; struct smr *smr_connect(char *hostname, int port);&lt;br /&gt;
&lt;br /&gt;
Smr_connect() establishes a connection to the smr daemon, [smrd], running on host &#039;&#039;hostname&#039;&#039; at TCP/IP port &#039;&#039;port&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The default host is the machine on which the program is running - this can be specified by passing a null pointer for &#039;&#039;hostname&#039;&#039;.&lt;br /&gt;
The default port is 24901, this can be specified by passing zero for &#039;&#039;port&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If a connection is established, a pointer to a [[struct smr]] structure is returned. This can be used in subsequent calls to&lt;br /&gt;
[[smr_read]] and [[smr_write]].&lt;br /&gt;
If a connection can not be established, a null pointer is returned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
 struct smr *robot;&lt;br /&gt;
&lt;br /&gt;
 robot = smr_connect(0, 0);  /* Default host and port */&lt;br /&gt;
 if (robot == 0) {&lt;br /&gt;
   fprintf(stderr, &amp;quot;Can&#039;t connect to smr\n&amp;quot;);&lt;br /&gt;
   exit(1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
When the connection is no longer needed, it can be terminated using [[smr_disconnect]].&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=223</id>
		<title>Libsmr</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=223"/>
		<updated>2008-09-29T12:20:52Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibSmr is the C programming library that enables C programs to communicate with the SMR sensor daemon, [smrd].&lt;br /&gt;
&lt;br /&gt;
The library provides two types of functions: smr specific and low level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smr specific functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The library provides four C functions: smr_connect(), smr_disconnect(), smr_read() and smr_write().&lt;br /&gt;
These are modelled after similarly named functions familiar to C programmers, used for other kinds of input/output.&lt;br /&gt;
&lt;br /&gt;
Central to all use of the smr specific functions if a &#039;&#039;struct smr&#039;&#039; datatype.&lt;br /&gt;
A pointer to such a struct is returned by smr_connect(), and this pointer is used in all subsequent calls to&lt;br /&gt;
smr_read() and smr_write(), and must finally be provided to smr_close().&lt;br /&gt;
&lt;br /&gt;
To use the library, a header file must be included.&lt;br /&gt;
The following summary shows the function type declarations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;smr.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[struct smr]] *[[smr_connect]](char *hostname, int port);&lt;br /&gt;
&lt;br /&gt;
void [smr_disconnect]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_read]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_write]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
Each function, and the smr struct datatype, is described on its own page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Low level functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The low level functions are not currently documented.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Struct_smr&amp;diff=222</id>
		<title>Struct smr</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Struct_smr&amp;diff=222"/>
		<updated>2008-09-29T12:20:08Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: The &amp;#039;&amp;#039;struct smr&amp;#039;&amp;#039; datatype collects all of the sensor commands and data used in the embedded communication systems built into Automation&amp;#039;s Small Mobile Robots. The datatype should not be ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;struct smr&#039;&#039; datatype collects all of the sensor commands and data used in the embedded communication systems built into&lt;br /&gt;
Automation&#039;s Small Mobile Robots. The datatype should not be defined by C programmers, it is already provided in a&lt;br /&gt;
system header file. Programs should not rely on the exact layout of the struct, but they can (and should!) rely on &lt;br /&gt;
the existence of the fields documented here.&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Input/output data fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  struct {              /* motor modules */&lt;br /&gt;
    uint16_t encoder;      /* position */&lt;br /&gt;
    int8_t speed;          /* command reference */&lt;br /&gt;
    int pwm;               /* motor voltage */&lt;br /&gt;
    int status;            /* error flags */&lt;br /&gt;
  } left, right;&lt;br /&gt;
&lt;br /&gt;
  uint8_t ir[SMR_IR_N]; /* proximity module */&lt;br /&gt;
  uint8_t ls[SMR_LS_N]; /* line sensor */&lt;br /&gt;
&lt;br /&gt;
  int ad[SMR_AD_N];     /* power supply analog inputs */&lt;br /&gt;
  int status;           /* power supply digital inputs */&lt;br /&gt;
&lt;br /&gt;
The two fields, &#039;&#039;left&#039;&#039; and &#039;&#039;right&#039;&#039;, are themselves structs, they refer to the two motor modules.&lt;br /&gt;
There are 3 input fields each:&lt;br /&gt;
   left.encoder right.encoder:   Position encoder: an unsigned 16 bit integer (0 .. 65535).&lt;br /&gt;
   left.pwm right.pwm:   Motor voltage: a signed integer.&lt;br /&gt;
   left.status right.status:   Motor status flags: a bitwise &#039;OR&#039; of &#039;&#039;Encoder too fast&#039;&#039;=1, &#039;&#039;Motor blocked&#039;&#039;=2 and &#039;&#039;No encoder signal&#039;&#039;=4.&lt;br /&gt;
&lt;br /&gt;
and one output field each:&lt;br /&gt;
   left.speed right.speed:   Motor speed command: a signed 8 bit integer (-128 .. 127).&lt;br /&gt;
&lt;br /&gt;
Data from the line sensors and proximity detectors are stored in arrays:&lt;br /&gt;
   ls:   Line sensor data: array of (8) unsigned 8 bit integers.&lt;br /&gt;
   ir:   Proximity sensor data: array of (6) unsigned 8 bit integers.&lt;br /&gt;
&lt;br /&gt;
The power supply module monitors five analog inputs and six digital inputs.&lt;br /&gt;
   ad:   Analog power supply inputs: array of (5) integers. &#039;&#039;ad[[SMR_AD_BATTERY]] (ad[[0]])&#039;&#039; is battery voltage, &#039;&#039;ad[[SMR_AD_EXTERNAL]] (ad[[1]])&#039;&#039; is external power input.&lt;br /&gt;
   status:   Digital power supply inputs: integer. Bit mask &#039;&#039;SMR_STATUS_POWER_ON (1)&#039;&#039; is main power switch.&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Aynchronous message fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  unsigned char msg[ENET_BYTES_MAX];&lt;br /&gt;
  void (*recv_hook)(struct smr *);&lt;br /&gt;
&lt;br /&gt;
Sending and receiving asynchronous messages is achieved using a message buffer and an asynchronous receive function.&lt;br /&gt;
   msg:   Buffer for sending and receiving extra messages. Array of unsigned 8 bit integers.&lt;br /&gt;
   recv_hook:   Pointer to user&#039;s receive function. This function is called for each message received from smrd by smr_read().&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Timing fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  uint32_t tick;                /* sample number (10ms) */&lt;br /&gt;
  uint32_t ts;                  /* time stamp, cpu cycles (2ns) */&lt;br /&gt;
&lt;br /&gt;
Programs can monitor timing using these fields.&lt;br /&gt;
   tick:   Smrd numbers samples consecutively. This tick count indicates how long smrd has been running, and can be used to see if any samples have been missed. Unsigned integer (rolls over after 497 days).&lt;br /&gt;
   ts:   Time when sample started, measured in CPU clock cycles, 2ns on a 500MHz processor. Unsigned integer (rolls over after 8.6 seconds).&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=221</id>
		<title>Libsmr</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=221"/>
		<updated>2008-09-29T12:19:49Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibSmr is the C programming library that enables C programs to communicate with the SMR sensor daemon, [smrd].&lt;br /&gt;
&lt;br /&gt;
The library provides two types of functions: smr specific and low level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smr specific functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The library provides four C functions: smr_connect(), smr_disconnect(), smr_read() and smr_write().&lt;br /&gt;
These are modelled after similarly named functions familiar to C programmers, used for other kinds of input/output.&lt;br /&gt;
&lt;br /&gt;
Central to all use of the smr specific functions if a &#039;&#039;struct smr&#039;&#039; datatype.&lt;br /&gt;
A pointer to such a struct is returned by smr_connect(), and this pointer is used in all subsequent calls to&lt;br /&gt;
smr_read() and smr_write(), and must finally be provided to smr_close().&lt;br /&gt;
&lt;br /&gt;
To use the library, a header file must be included.&lt;br /&gt;
The following summary shows the function type declarations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;smr.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[struct smr]] *[smr_connect](char *hostname, int port);&lt;br /&gt;
&lt;br /&gt;
void [smr_disconnect]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_read]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_write]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
Each function, and the smr struct datatype, is described on its own page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Low level functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The low level functions are not currently documented.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=220</id>
		<title>Libsmr</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Libsmr&amp;diff=220"/>
		<updated>2008-09-29T12:18:34Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: LibSmr is the C programming library that enables C programs to communicate with the SMR sensor daemon, [smrd].  The library provides two types of functions: smr specific and low level.  &amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibSmr is the C programming library that enables C programs to communicate with the SMR sensor daemon, [smrd].&lt;br /&gt;
&lt;br /&gt;
The library provides two types of functions: smr specific and low level.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smr specific functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The library provides four C functions: smr_connect(), smr_disconnect(), smr_read() and smr_write().&lt;br /&gt;
These are modelled after similarly named functions familiar to C programmers, used for other kinds of input/output.&lt;br /&gt;
&lt;br /&gt;
Central to all use of the smr specific functions if a &#039;&#039;struct smr&#039;&#039; datatype.&lt;br /&gt;
A pointer to such a struct is returned by smr_connect(), and this pointer is used in all subsequent calls to&lt;br /&gt;
smr_read() and smr_write(), and must finally be provided to smr_close().&lt;br /&gt;
&lt;br /&gt;
To use the library, a header file must be included.&lt;br /&gt;
The following summary shows the function type declarations:&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;smr.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[struct smr] *[smr_connect](char *hostname, int port);&lt;br /&gt;
&lt;br /&gt;
void [smr_disconnect]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_read]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
int [smr_write]([struct smr] *robot);&lt;br /&gt;
&lt;br /&gt;
Each function, and the smr struct datatype, is described on its own page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Low level functions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The low level functions are not currently documented.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=219</id>
		<title>SMR</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=219"/>
		<updated>2008-09-29T12:16:52Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SMR Clips Interface]]&lt;br /&gt;
&lt;br /&gt;
[[SMR wiring and assembly]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Flash Disk Cloning]]&lt;br /&gt;
&lt;br /&gt;
[[How to make the SMR&#039;s work without a monitor]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Peer to Peer Networking]]&lt;br /&gt;
&lt;br /&gt;
SMRCL http://www.iau.dtu.dk/~naa/smr/smrcl.pdf&lt;br /&gt;
&lt;br /&gt;
SMR simulator: http://www.iau.dtu.dk/ingarb/sim/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[SMRD communication]]&lt;br /&gt;
&lt;br /&gt;
[[CLIPS interface]]&lt;br /&gt;
&lt;br /&gt;
[[libsmr]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=CLIPS_interface&amp;diff=218</id>
		<title>CLIPS interface</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=CLIPS_interface&amp;diff=218"/>
		<updated>2008-09-29T12:15:10Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: CLIPS [http://www.ghg.net/clips/CLIPS.html] is an AI programming language, used in the course 31380, Intelligent Systems [http://www.iau.dtu.dk/teaching/31380/].  At Automation we have mad...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CLIPS [http://www.ghg.net/clips/CLIPS.html] is an AI programming language, used in the&lt;br /&gt;
course 31380, Intelligent Systems [http://www.iau.dtu.dk/teaching/31380/].&lt;br /&gt;
&lt;br /&gt;
At Automation we have made a special version of CLIPS with an interface to our Small&lt;br /&gt;
Mobile Robots. This version is available both in GNU/Linux and MS Windows.&lt;br /&gt;
&lt;br /&gt;
The interface provides the following 3 CLIPS functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMRConnect&#039;&#039;&#039;&lt;br /&gt;
 SMRConnect()&lt;br /&gt;
 SMRConnect(hostname)&lt;br /&gt;
 SMRConnect(hostname, port)&lt;br /&gt;
In the first form, CLIPS must be running on the SMR itself.&lt;br /&gt;
In the second form, CLIPS can be running on any computer on the network.&lt;br /&gt;
In the third form, a non-standard port number can be specified - this is not normally needed.&lt;br /&gt;
   hostname:   The SMR to connect to. A string or symbol.&lt;br /&gt;
   port:   The TCP port to connect to. An integer.&lt;br /&gt;
&lt;br /&gt;
A connection is established to the SMR server program.&lt;br /&gt;
The return value is a Boolean, indicating success or failure.&lt;br /&gt;
&lt;br /&gt;
NB! Before the SMRConnect call is performed the clipsserver must be started on the used SMR i.e.&lt;br /&gt;
logon the SMR using ssh, start the server /usr/local/smr/bin/clipsserver and choose menupoint 17.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMRTalk&#039;&#039;&#039;&lt;br /&gt;
 SMRTalk(command)&lt;br /&gt;
   command:   The command to send to the SMR server. A string.&lt;br /&gt;
&lt;br /&gt;
A command is sent to the SMR server program and the response is returned.&lt;br /&gt;
The return value is a string.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMRDisconnect&#039;&#039;&#039;&lt;br /&gt;
 SMRDisconnect()&lt;br /&gt;
&lt;br /&gt;
Any existing connection to an SMR is terminated. The return value is the Boolean TRUE.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
 $ /usr/local/smr/bin/smrclips &lt;br /&gt;
          CLIPS (V6.21 06/15/03)&lt;br /&gt;
 CLIPS&amp;gt; (SMRConnect smr4)&lt;br /&gt;
 TRUE&lt;br /&gt;
 CLIPS&amp;gt; (SMRTalk &amp;quot;fwd 1 @v0.2&amp;quot;)&lt;br /&gt;
 &amp;quot;ID1&amp;quot;&lt;br /&gt;
 CLIPS&amp;gt; (SMRTalk &amp;quot;eval $odox&amp;quot;)&lt;br /&gt;
 &amp;quot;0.997012 &amp;quot;&lt;br /&gt;
 CLIPS&amp;gt; (SMRTalk &amp;quot;getevent 5&amp;quot;)&lt;br /&gt;
 &amp;quot;ID1 stopcond 0.000000&amp;quot;&lt;br /&gt;
 CLIPS&amp;gt; (SMRDisconnect)&lt;br /&gt;
 TRUE&lt;br /&gt;
 CLIPS&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=217</id>
		<title>SMR</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=SMR&amp;diff=217"/>
		<updated>2008-09-29T12:14:45Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SMR Clips Interface]]&lt;br /&gt;
&lt;br /&gt;
[[SMR wiring and assembly]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Flash Disk Cloning]]&lt;br /&gt;
&lt;br /&gt;
[[How to make the SMR&#039;s work without a monitor]]&lt;br /&gt;
&lt;br /&gt;
[[SMR Peer to Peer Networking]]&lt;br /&gt;
&lt;br /&gt;
[[SMRD communication]]&lt;br /&gt;
&lt;br /&gt;
[[CLIPS interface]]&lt;br /&gt;
&lt;br /&gt;
SMRCL http://www.iau.dtu.dk/~naa/smr/smrcl.pdf&lt;br /&gt;
&lt;br /&gt;
SMR simulator: http://www.iau.dtu.dk/ingarb/sim/&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_software_license_considerations&amp;diff=216</id>
		<title>AU software license considerations</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_software_license_considerations&amp;diff=216"/>
		<updated>2008-09-29T11:27:30Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To further collaboration with companies and make developed software as usable af possible, it has been decied to recommend the GNU Lesser General Public License (LGPL) for all employees and students.&lt;br /&gt;
&lt;br /&gt;
Please add this section to the top of new souce files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;one line to give the library&#039;s name and a brief idea of what it does.&amp;gt;&lt;br /&gt;
    Copyright (C) &amp;lt;year&amp;gt;  &amp;lt;name of author&amp;gt; DTU&lt;br /&gt;
    &amp;lt;e-mail adress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    This library is free software; you can redistribute it and/or&lt;br /&gt;
    modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
    License as published by the Free Software Foundation; either&lt;br /&gt;
    version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
    This library is distributed in the hope that it will be useful,&lt;br /&gt;
    but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
    Lesser General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
    You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
    License along with this library; if not, write to the Free Software&lt;br /&gt;
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information refer to http://www.gnu.org&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_software_license_considerations&amp;diff=215</id>
		<title>AU software license considerations</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_software_license_considerations&amp;diff=215"/>
		<updated>2008-09-29T11:23:34Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: To further collaboration with companies and make developed software as usable af possible, it has been decied to recommend the GNU Lesser General Public License (LGPL) for all employees an...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To further collaboration with companies and make developed software as usable af possible, it has been decied to recommend the GNU Lesser General Public License (LGPL) for all employees and students.&lt;br /&gt;
&lt;br /&gt;
Please add this section to the top of new souce files.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;one line to give the library&#039;s name and a brief idea of what it does.&amp;gt;&lt;br /&gt;
    Copyright (C) &amp;lt;year&amp;gt;  &amp;lt;name of author&amp;gt; DTU&lt;br /&gt;
    &amp;lt;e-mail adress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    This library is free software; you can redistribute it and/or&lt;br /&gt;
    modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
    License as published by the Free Software Foundation; either&lt;br /&gt;
    version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
    This library is distributed in the hope that it will be useful,&lt;br /&gt;
    but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
    Lesser General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
    You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
    License along with this library; if not, write to the Free Software&lt;br /&gt;
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
&lt;br /&gt;
For more information refer to http://www.gnu.org&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=214</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=214"/>
		<updated>2008-09-29T11:23:21Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* How-to documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wellcome to the wiki pages of the Robot Systems Engineering (RSE) group at Institute for Automation, DTU Electical engineering.&lt;br /&gt;
&lt;br /&gt;
These pages will contain updated information on RSE projects and other issued related to robotics research at the Institute for Automation.&lt;br /&gt;
&lt;br /&gt;
= RSE Projects = &lt;br /&gt;
[[AU Robot Servers]], download and documentation&lt;br /&gt;
&lt;br /&gt;
[[RHD]] Robot Hardware Daemon&lt;br /&gt;
&lt;br /&gt;
[[Robot sensor modules]], description and documentation&lt;br /&gt;
&lt;br /&gt;
[[Simulation]], description of simulation environments&lt;br /&gt;
&lt;br /&gt;
= Robots =&lt;br /&gt;
&lt;br /&gt;
[[SMR]] (Small Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
[[MMR]] (Medium Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
= How-to documentation =&lt;br /&gt;
&lt;br /&gt;
[[NTP howto]] time-sync 2 computers&lt;br /&gt;
&lt;br /&gt;
Using the [[RSE SVN]] repository&lt;br /&gt;
&lt;br /&gt;
SMR [[Wiring and assembly]]&lt;br /&gt;
&lt;br /&gt;
SMR [[Flash disk cloning]]&lt;br /&gt;
&lt;br /&gt;
[[AU software license considerations]]&lt;br /&gt;
&lt;br /&gt;
[[RoboCup]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=RSE_SVN&amp;diff=213</id>
		<title>RSE SVN</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=RSE_SVN&amp;diff=213"/>
		<updated>2008-09-29T11:18:02Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RSE projects are all developmental projects, with ongoing improvement and research.&lt;br /&gt;
&lt;br /&gt;
For proper version management, backup and sharing, the projects are managed in a central SVN repository, hosted by the DTU Elektro production server Timmy.&lt;br /&gt;
&lt;br /&gt;
[[Old CVS setup]]&lt;br /&gt;
&lt;br /&gt;
== SVN Access ==&lt;br /&gt;
&lt;br /&gt;
To get access to the RSE SVN, you must have an account on the timmy server and be a RSE group member.&lt;br /&gt;
&lt;br /&gt;
The SVN is accessed using the svn+ssh protocol, with the following connection string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
svn+ssh://[timmy username]@timmy.elektro.dtu.dk/home/project-users/rse/svnrepo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the SVN is run through SSH, you will be requested to input your SSH password MANY times, until you have setup your computer with a shared SSH key. &lt;br /&gt;
&lt;br /&gt;
== Handling SVN projects ==&lt;br /&gt;
&lt;br /&gt;
Managing the projects in SVN should be done according to the guidelines in the SVN book[http://svnbook.red-bean.com/]. It is really good and usefull reading.&lt;br /&gt;
&lt;br /&gt;
At a prevoius robot-meeting, there was given an introduction for SVN useage. &lt;br /&gt;
&lt;br /&gt;
The slides from the presentation can be found here: [[Media:SVN_Best_practice.pdf]]&lt;br /&gt;
&lt;br /&gt;
== SSH Shared keys ==&lt;br /&gt;
&lt;br /&gt;
A great toturial for generating shared SSH keys can be found in the article [http://www.cvrti.utah.edu/~dustman/no-more-pw-ssh/ No More Passwords (with SSH)]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Old_CVS_setup&amp;diff=212</id>
		<title>Old CVS setup</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Old_CVS_setup&amp;diff=212"/>
		<updated>2008-09-29T11:17:12Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: As of 20031001 the CVS repositories for the various robotics projects are being moved to /shome/cvs/repository on the server Little.  So far the following modules are in place: * robot * o...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As of 20031001 the CVS repositories for the various&lt;br /&gt;
robotics projects are being moved to /shome/cvs/repository&lt;br /&gt;
on the server Little.&lt;br /&gt;
&lt;br /&gt;
So far the following modules are in place:&lt;br /&gt;
* robot&lt;br /&gt;
* oskit&lt;br /&gt;
* linux (SMRd)&lt;br /&gt;
* robot2005 (SMRdemo)&lt;br /&gt;
* aumat (matrix library)&lt;br /&gt;
* ausmrcc (SDL GUI for remote controlling SMDdemo based robots)&lt;br /&gt;
* ausmrcc2 (New version where development is done - Linux support)&lt;br /&gt;
* aurobotsim (Java multi robot simulator)&lt;br /&gt;
* aurobotservers (camera and laserscanner server - new clean server)&lt;br /&gt;
* hakoclient (Client program for executing HAKO specific route plans)&lt;br /&gt;
&lt;br /&gt;
To access these modules make sure the following steps have&lt;br /&gt;
been taken.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For the impatient&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To checkout the robot module do the following (change USERNAME to your login):&lt;br /&gt;
&lt;br /&gt;
$ export CVS_RSH=ssh&lt;br /&gt;
&lt;br /&gt;
$ cvs -d USERNAME@kalman:/shome/cvs/repository checkout robot&lt;br /&gt;
&lt;br /&gt;
The following commands expect that you are in the directory created by the above command (or another directory that holds your local copy of a CVS tree).&lt;br /&gt;
&lt;br /&gt;
To update your local version of the robot module:&lt;br /&gt;
&lt;br /&gt;
$ cvs update -d&lt;br /&gt;
&lt;br /&gt;
&#039;Note: Check for conflicts!&#039;&lt;br /&gt;
&lt;br /&gt;
To see what changes you have made since you last updated:&lt;br /&gt;
&lt;br /&gt;
$ cvs diff&lt;br /&gt;
&lt;br /&gt;
&#039;Note: the above command checks against the version you actually checked out and not the newest version on the server&#039;&lt;br /&gt;
&lt;br /&gt;
To see what changes exist between the newest version on the server and your local copy:&lt;br /&gt;
&lt;br /&gt;
$ cvs diff -D &amp;quot;now&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To commit your changes to the server:&lt;br /&gt;
&lt;br /&gt;
$ cvs commit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use an account that is a member of the vip group&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To become a member of the &#039;&#039;vip&#039;&#039; group contact your system&lt;br /&gt;
administrator. Currently mailto:or@oersted.dtu.dk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Configure CVS environment variables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Make sure that you have configured your CVS program&lt;br /&gt;
to use &#039;&#039;secure shell&#039;&#039; (ssh) for logins. How this is done&lt;br /&gt;
varies from program to program and a complete coverage of&lt;br /&gt;
all available programs are beyond the scope of this document.&lt;br /&gt;
&lt;br /&gt;
On GNU/Linux or *NIX you have to set the environment&lt;br /&gt;
variable CVSROOT and CVS_RSH to&lt;br /&gt;
&#039;&#039;USERNAME@little:/shome/cvs/repository&#039;&#039; and &#039;&#039;ssh&#039;&#039;&lt;br /&gt;
respectively. Change the &#039;&#039;USERNAME&#039;&#039; to the name of the&lt;br /&gt;
account you&#039;ll using to check out CVS modules. How this&lt;br /&gt;
is done in practise is dependant on what shell you are&lt;br /&gt;
using. If you are using the Bourne Again Shell (BASH) you&lt;br /&gt;
can set the variables with the &#039;&#039;export&#039;&#039; command:&lt;br /&gt;
&#039;&#039;export CVS_RSH=ssh&#039;&#039;. If you are using another shell&lt;br /&gt;
consult that shell&#039;s documentation to see how variables&lt;br /&gt;
are set.&lt;br /&gt;
&lt;br /&gt;
It is usually a good idea to set at least the CVS_RSH&lt;br /&gt;
variables in your shell configuration files so they will&lt;br /&gt;
be automatically set for you when you login, but this is&lt;br /&gt;
not absolutely necessary. See your shell&#039;s documentation&lt;br /&gt;
to see what files should be edited to set this up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do a &#039;checkout&#039; of a module&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To get access to the files in a CVS module you have to&lt;br /&gt;
do a &#039;checkout&#039; on it first. Do the following:&lt;br /&gt;
   1. Start a terminal and enter the directory where you want the modules to be placed (as subdirectories).&lt;br /&gt;
   1. Set the environment variables as explained above.&lt;br /&gt;
   1. Run the command &#039;&#039;cvs checkout MODULE&#039;&#039; where &#039;&#039;MODULE&#039;&#039; is replaced by name of one of the modules listed above.&lt;br /&gt;
&lt;br /&gt;
You will probably be prompted for a password at this stage&lt;br /&gt;
as CVS tries to connect to the server via SSH. Enter your&lt;br /&gt;
password and press Enter.&lt;br /&gt;
&lt;br /&gt;
If your password is accepted and everything goes well you&lt;br /&gt;
should now see a list of filenames. These are all the files&lt;br /&gt;
that exist in the module you have just checked&lt;br /&gt;
out. Each filename is preceded by a capital &#039;&#039;U&#039;&#039; telling you&lt;br /&gt;
that the file has been &#039;&#039;U&#039;&#039;pdated.&lt;br /&gt;
&lt;br /&gt;
When all the files have been copied from the CVS server&lt;br /&gt;
you can enter the new directory (it has the same name as the&lt;br /&gt;
module you checked out) and start editing the files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Checking for updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To see if any of the other developers have submitted any&lt;br /&gt;
changes to a module you are working on go into that module&#039;s&lt;br /&gt;
directory and type &#039;&#039;cvs update -d&#039;&#039;. It is not necessary to&lt;br /&gt;
set the CVSROOT variable, but you have to set CVS_RSH or&lt;br /&gt;
CVS will not know that it should use ssh to make the&lt;br /&gt;
connection.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;-d&#039;&#039; option specifies that any new directories should&lt;br /&gt;
be created in your working copy of the module. It is&lt;br /&gt;
possible to turn this on by default by adding a line with &#039;&#039;update -d&#039;&#039; to the &#039;&#039;.cvsrc&#039;&#039; file located in your home&lt;br /&gt;
directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Submitting your changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you have finished editing the files in the module go&lt;br /&gt;
to the top level directory for that module. There you run&lt;br /&gt;
the command &#039;&#039;cvs commit&#039;&#039; that will contact the CVS server&lt;br /&gt;
and &#039;inform&#039; it of your changes. You will be asked to give&lt;br /&gt;
some comments on your changes during this process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adding new files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
CVS only works on files that has actively been added to the&lt;br /&gt;
repository. This means that if you create new directories and&lt;br /&gt;
files for a module you have to manually add them. This is done&lt;br /&gt;
by issuing a &#039;&#039;cvs add FILENAME&#039;&#039; for each file or directory&lt;br /&gt;
you have created.&lt;br /&gt;
&lt;br /&gt;
Note that this should only be done for files that are actually&lt;br /&gt;
needed by the other developers. Files that are automatically&lt;br /&gt;
generated (dependency files made by build processes, object&lt;br /&gt;
files etc) should not be added.&lt;br /&gt;
&lt;br /&gt;
If you need to add a binary file (e.g. an image file) use&lt;br /&gt;
the command &#039;&#039;cvs add -kb FILENAME&#039;&#039; to let the CVS server&lt;br /&gt;
know that the file should not be searched for CVS keywords&lt;br /&gt;
and so on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating a brand new CVS module&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Change directory into the root of the source code directory structure you want &lt;br /&gt;
to add. Then to create an entirely new module on the CVS server set your&lt;br /&gt;
CVSROOT environment variable and type the following:&lt;br /&gt;
   * cvs import MODULENAME VENDORTAG RELEASETAG&lt;br /&gt;
Be sure to use the name of your module instead of MODULENAME.&lt;br /&gt;
The two tags will usually be your initials, e.g. &#039;&#039;sra&#039;&#039;, and&lt;br /&gt;
the word &#039;&#039;initial&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Further information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The CVS Manual and a lot of tips and tricks can be found at:&lt;br /&gt;
&lt;br /&gt;
http://www.cvshome.org/&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=RSE_SVN&amp;diff=211</id>
		<title>RSE SVN</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=RSE_SVN&amp;diff=211"/>
		<updated>2008-09-29T11:16:52Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RSE projects are all developmental projects, with ongoing improvement and research.&lt;br /&gt;
&lt;br /&gt;
For proper version management, backup and sharing, the projects are managed in a central SVN repository, hosted by the DTU Elektro production server Timmy.&lt;br /&gt;
&lt;br /&gt;
== SVN Access ==&lt;br /&gt;
&lt;br /&gt;
To get access to the RSE SVN, you must have an account on the timmy server and be a RSE group member.&lt;br /&gt;
&lt;br /&gt;
The SVN is accessed using the svn+ssh protocol, with the following connection string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
svn+ssh://[timmy username]@timmy.elektro.dtu.dk/home/project-users/rse/svnrepo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the SVN is run through SSH, you will be requested to input your SSH password MANY times, until you have setup your computer with a shared SSH key. &lt;br /&gt;
&lt;br /&gt;
== Handling SVN projects ==&lt;br /&gt;
&lt;br /&gt;
Managing the projects in SVN should be done according to the guidelines in the SVN book[http://svnbook.red-bean.com/]. It is really good and usefull reading.&lt;br /&gt;
&lt;br /&gt;
At a prevoius robot-meeting, there was given an introduction for SVN useage. &lt;br /&gt;
&lt;br /&gt;
The slides from the presentation can be found here: [[Media:SVN_Best_practice.pdf]]&lt;br /&gt;
&lt;br /&gt;
== SSH Shared keys ==&lt;br /&gt;
&lt;br /&gt;
A great toturial for generating shared SSH keys can be found in the article [http://www.cvrti.utah.edu/~dustman/no-more-pw-ssh/ No More Passwords (with SSH)]&lt;br /&gt;
&lt;br /&gt;
[[Old CVS setup]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Laser-server.png&amp;diff=210</id>
		<title>File:Laser-server.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Laser-server.png&amp;diff=210"/>
		<updated>2008-09-29T11:15:13Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Ulmsserver&amp;diff=209</id>
		<title>Ulmsserver</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Ulmsserver&amp;diff=209"/>
		<updated>2008-09-29T11:15:05Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: &amp;#039;&amp;#039;&amp;#039;Laser scanner server&amp;#039;&amp;#039;&amp;#039;  Image:laser-server.png  This ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Laser scanner server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:laser-server.png]]&lt;br /&gt;
&lt;br /&gt;
This ...&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Nav-server.png&amp;diff=208</id>
		<title>File:Nav-server.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Nav-server.png&amp;diff=208"/>
		<updated>2008-09-29T11:14:16Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Userver&amp;diff=207</id>
		<title>Userver</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Userver&amp;diff=207"/>
		<updated>2008-09-29T11:13:57Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: &amp;#039;&amp;#039;&amp;#039; UServer &amp;#039;&amp;#039;&amp;#039;  An (almost) empty server, where the loaded plug-in modules determine the functionality.  Image:nav-server.png  The server is started by:   ./userver  And reads startup...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; UServer &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An (almost) empty server, where the loaded plug-in modules determine the functionality.&lt;br /&gt;
&lt;br /&gt;
[[Image:nav-server.png]]&lt;br /&gt;
&lt;br /&gt;
The server is started by:&lt;br /&gt;
&lt;br /&gt;
 ./userver&lt;br /&gt;
&lt;br /&gt;
And reads startup commands from the scriptfile &#039;userver.ini&#039; (if such exist in the default directory).&lt;br /&gt;
It will then show a server prompt:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And accept commands from this prompt like the other servers.&lt;br /&gt;
&lt;br /&gt;
A few library modules can be loaded directly without any external files, to see wich modules that are available as &#039;static&#039; modules try:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
&lt;br /&gt;
Other modules can be loaded like:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; module load=&amp;quot;./ausmr.so.0&amp;quot;  # an smrdemo interface plugin&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=206</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=206"/>
		<updated>2008-09-29T11:13:36Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[[Server structure]] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [[userver]]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [[auclient]]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[[plug-in structure]]&lt;br /&gt;
&lt;br /&gt;
[[Variables]] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Auclient.png&amp;diff=205</id>
		<title>File:Auclient.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Auclient.png&amp;diff=205"/>
		<updated>2008-09-29T11:12:41Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Auclient&amp;diff=204</id>
		<title>Auclient</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Auclient&amp;diff=204"/>
		<updated>2008-09-29T11:12:33Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: &amp;#039;&amp;#039;&amp;#039; AU Client &amp;#039;&amp;#039;&amp;#039;  A client capable of connecting to the main servers (laser scanner, camera server and other servers) to get data, and to display this data.  Image:auclient.png  The c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; AU Client &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A client capable of connecting to the main servers (laser scanner, camera server and other servers) to get data, and to display this data.&lt;br /&gt;
&lt;br /&gt;
[[Image:auclient.png]]&lt;br /&gt;
&lt;br /&gt;
The client implements a command line interface, and a module to display images using openCV X-interface.&lt;br /&gt;
&lt;br /&gt;
The program is started with the command (from the bin directory):&lt;br /&gt;
&lt;br /&gt;
 ./auclient&lt;br /&gt;
&lt;br /&gt;
A command to a laser server running on smr16 could be:&lt;br /&gt;
&lt;br /&gt;
 laser connect=smr16:24919&lt;br /&gt;
 laser cmd=&amp;quot;scanget&amp;quot;&lt;br /&gt;
 laser cmd=&amp;quot;module load=&amp;quot;./ulmspassable.so.0&amp;quot;&lt;br /&gt;
 laser cmd=&amp;quot;pass&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If the laser scanner is running, then the laser scanner data should be displayed.&lt;br /&gt;
&lt;br /&gt;
The camera server can be accessed like:&lt;br /&gt;
&lt;br /&gt;
 cam cmd=&amp;quot;imageget all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some display options are available as shown by the help command&lt;br /&gt;
&lt;br /&gt;
 disp help&lt;br /&gt;
&lt;br /&gt;
NB! the client is implemented as modules in the standard server frame, and thus the modules must be loaded before use. (they are most likely loaded from the ini-file (auclient.ini) if this exist in the directory where the AUCLIENT were started.&lt;br /&gt;
&lt;br /&gt;
The AUCLIENT is converted from the old UCLIENT and all future development is added here.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=203</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=203"/>
		<updated>2008-09-29T11:12:10Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[[Server structure]] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [[auclient]]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[[plug-in structure]]&lt;br /&gt;
&lt;br /&gt;
[[Variables]] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Var-pool.png&amp;diff=202</id>
		<title>File:Var-pool.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Var-pool.png&amp;diff=202"/>
		<updated>2008-09-29T11:11:34Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Variables&amp;diff=201</id>
		<title>Variables</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Variables&amp;diff=201"/>
		<updated>2008-09-29T11:11:26Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: Most resource modules will include some configuration or result variables, that should be available form other modules or from an external interface - a configuration file or a operator in...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most resource modules will include some configuration or result variables, that should be available form other modules or from an external interface - a configuration file or a operator interface.&lt;br /&gt;
&lt;br /&gt;
[[Image:var-pool.png]]&lt;br /&gt;
&lt;br /&gt;
The var-pool is a method of sharing variable values between different modules. This figure is used to illustrate that the &#039;RoadDrive&#039; module needs data from &#039;LaserRoad&#039; for road data and access to the &#039;avoid&#039; module for obstacle avoidance services, and finally to the robot real time control server. Each module is compiled without need for any header files from the other modules.&lt;br /&gt;
&lt;br /&gt;
This inter module communication is handled by the var-pool function inherited into all resources.&lt;br /&gt;
&lt;br /&gt;
The var-pool (loaded by module load=var) is the variable root. Each resource act as a structure and the local variables in each resource belong to this structure. so:&lt;br /&gt;
 smr.speed&lt;br /&gt;
is defined by the resource &#039;smr&#039; as a variable with the name &#039;speed&#039;.&lt;br /&gt;
&lt;br /&gt;
A resources may define a number of local variables and functions, like this roadDrive resource:&lt;br /&gt;
&lt;br /&gt;
 void UResRoadDrive::createBaseVar()&lt;br /&gt;
 {&lt;br /&gt;
  UVarPool * vp = getVarPool();&lt;br /&gt;
  //&lt;br /&gt;
  vp-&amp;gt;addVar(&amp;quot;version&amp;quot;, getResVersion() /   100.0, &amp;quot;d&amp;quot;, &amp;quot;Resource version&amp;quot;);&lt;br /&gt;
  varUpdateTime = vp-&amp;gt;addVar(&amp;quot;updateTime&amp;quot;,    0.0, &amp;quot;d&amp;quot;, &amp;quot;Last time the road drive command was calles&amp;quot;);&lt;br /&gt;
  varEdgeDist   = vp-&amp;gt;addVar(&amp;quot;edgeDist&amp;quot;,      0.35, &amp;quot;d&amp;quot;, &amp;quot;Nominel distance to road edge&amp;quot;);&lt;br /&gt;
  varFwdDist    = vp-&amp;gt;addVar(&amp;quot;forwardDist&amp;quot;,   6.0, &amp;quot;d&amp;quot;, &amp;quot;Exit-pose distance from robot&amp;quot;);&lt;br /&gt;
  varEdge       = vp-&amp;gt;addVar(&amp;quot;edge&amp;quot;,          0.0, &amp;quot;d&amp;quot;, &amp;quot;Reference edge 0=left, 1=top, 2 = right&amp;quot;);&lt;br /&gt;
  varTgtX       = vp-&amp;gt;addVar(&amp;quot;tgtX&amp;quot;,          0.0, &amp;quot;pose&amp;quot;, &amp;quot;(ro) target position used in obstacle avoidance (set by call)&amp;quot;);&lt;br /&gt;
  varTgtY       = vp-&amp;gt;addVar(&amp;quot;tgtY&amp;quot;,          0.0, &amp;quot;pose&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  varTgtH       = vp-&amp;gt;addVar(&amp;quot;tgtH&amp;quot;,          0.0, &amp;quot;pose&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  varTgtVel     = vp-&amp;gt;addVar(&amp;quot;tgtVel&amp;quot;,        1.0, &amp;quot;d&amp;quot;, &amp;quot;target velocity at end of obstacle avoidance&amp;quot;);&lt;br /&gt;
  ...&lt;br /&gt;
  // and methods&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;left&amp;quot;,   &amp;quot;d&amp;quot;,  &amp;quot;Follow left side at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;right&amp;quot;,  &amp;quot;d&amp;quot;,  &amp;quot;Follow left right at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;top&amp;quot;,    &amp;quot;d&amp;quot;,  &amp;quot;Follow road center at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;target&amp;quot;, &amp;quot;sd&amp;quot;, &amp;quot;get target pose with this reference, the &#039;s&#039; parameter may be either &#039;left&#039;, &#039;right&#039;, or &#039;top&#039;, the &#039;d&#039; parameter is the desired distance from the reference line (positive is left)&amp;quot;);&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Variables are added to the system by the &#039;addVar&#039; call, giving a variable name, an initial value, a type (&#039;d&#039; for double) and a description of the variable (the description is a help to the operator, when inspecting or setting values).&lt;br /&gt;
&lt;br /&gt;
The addVar(.) method returns an integer, that is used when locally accessing the variable, e.g.:&lt;br /&gt;
&lt;br /&gt;
 d = getLocalValue(varFwdDist);&lt;br /&gt;
 t = getLocalValue(varUpdateTime);&lt;br /&gt;
 setLocalVar(varTgtVel, vel); // target velocity at end of man&lt;br /&gt;
 setLocalVar(varTgtX,   exitPose.x);&lt;br /&gt;
 setLocalVar(varTgtY,   exitPose.y);&lt;br /&gt;
&lt;br /&gt;
The variables are implemented as doubles, but a combination of variables may in some cases be treated as a single pseudo structure. Examples are:&lt;br /&gt;
&lt;br /&gt;
* Data type &amp;quot;pose&amp;quot; is 3 variables with the same name, but ending with X, Y, and H&lt;br /&gt;
* Data type &amp;quot;3D&amp;quot; is 3 variables with the same name, but ending with X, Y, and Z&lt;br /&gt;
* Data type &amp;quot;rot&amp;quot; is 3 variables with the same name describing a 3D rotation, ending in O (X-axis), P (y-axis) and K (z-axis)&lt;br /&gt;
* Data type &amp;quot;dq&amp;quot; is two variables describing a data value and a quality, same name, but quality ending in Q.&lt;br /&gt;
These pseudo structures are transmitted across servers as one message (and displayed by client in one line).&lt;br /&gt;
&lt;br /&gt;
Ther may later be added a string type:&lt;br /&gt;
* Data type &amp;quot;s&amp;quot; in a string variable, but is not implemented yet.&lt;br /&gt;
&lt;br /&gt;
Varables in other resource modules are accessed using their name, like:&lt;br /&gt;
 isOK  = vp-&amp;gt;getValue(&amp;quot;smr.speed&amp;quot;, &amp;amp;vel);&lt;br /&gt;
 isOK &amp;amp;= vp-&amp;gt;getValue(&amp;quot;laserRoad.updateTime&amp;quot;, &amp;amp;updTime);&lt;br /&gt;
The value name is using a dot-notation for the module owner - the resource name - followed by a dot and the variable name. If the variable exist - both resource and variable - the function returns &#039;true&#039; and the double sized value is returned at the adress supplied as the second parameter. Sub-structures may be created locally with a &#039;vp-&amp;gt;addStructLocal(&amp;quot;name&amp;quot;, &amp;quot;help text&amp;quot;)&#039; if needed.&lt;br /&gt;
&lt;br /&gt;
A variable structure may be used to trigger events. An event may be defined by a client with a command like:&lt;br /&gt;
 &amp;gt;&amp;gt; varPush struct=smr cmd=&amp;quot;var smr.allcopy&amp;quot;&lt;br /&gt;
If this is the case a flag will be set if one (or more) of the variables defined in the &#039;smr&#039; resource is updated. The command will then be executed by the server thread at first opportunity.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methods&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Methods are defined by a name and a parameter list. They must be announced to the var-pool by an &#039;addMethod&#039; call, like these from above:&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;left&amp;quot;,   &amp;quot;d&amp;quot;,  &amp;quot;Follow left side at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;right&amp;quot;,  &amp;quot;d&amp;quot;,  &amp;quot;Follow left right at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;top&amp;quot;,    &amp;quot;d&amp;quot;,  &amp;quot;Follow road center at this distance&amp;quot;);&lt;br /&gt;
  vp-&amp;gt;addMethod(this, &amp;quot;target&amp;quot;, &amp;quot;sd&amp;quot;, &amp;quot;get target pose with this reference, the &#039;s&#039; parameter may be either &#039;left&#039;, &#039;right&#039;, or &#039;top&#039;, the &#039;d&#039; parameter is the desired distance from the reference line (positive is left)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
The parameters are the object implementing the call - typically &#039;this&#039; will do, the name, the parameter list and a textual description. The parameter list may hold a combination of &#039;d&#039; (double), &#039;s&#039; (string) and &#039;c&#039; (class) as in-parameters.&lt;br /&gt;
&lt;br /&gt;
The implementation of the method must implemented in the resource function named methodCall:&lt;br /&gt;
 bool UResRoadDrive::methodCall(const char * name, const char * paramOrder, char ** strings, double * pars,&lt;br /&gt;
                       double * value, UDataBase ** returnStruct, int * returnStructCnt)&lt;br /&gt;
 {&lt;br /&gt;
  bool result = true;&lt;br /&gt;
  if ((strcasecmp(name, &amp;quot;road&amp;quot;) == 0) and (strcmp(paramOrder, &amp;quot;sd&amp;quot;) == 0))&lt;br /&gt;
    *value = driveRoad(strings[0], pars[0]);&lt;br /&gt;
  else if ((strcasecmp(name, &amp;quot;left&amp;quot;) == 0) and (strcmp(paramOrder, &amp;quot;d&amp;quot;) == 0))&lt;br /&gt;
    *value = driveSide(0, pars[0], 0);&lt;br /&gt;
  else if ((strcasecmp(name, &amp;quot;top&amp;quot;) == 0) and (strcmp(paramOrder, &amp;quot;d&amp;quot;) == 0))&lt;br /&gt;
    *value = driveSide(1, pars[0], 0);&lt;br /&gt;
  else if ((strcasecmp(name, &amp;quot;right&amp;quot;) == 0) and (strcmp(paramOrder, &amp;quot;d&amp;quot;) == 0))&lt;br /&gt;
    *value = driveSide(2, pars[0], 0);&lt;br /&gt;
  else if (...)&lt;br /&gt;
    ...&lt;br /&gt;
  else&lt;br /&gt;
    result = false;&lt;br /&gt;
  return result;&lt;br /&gt;
 }&lt;br /&gt;
The function is called by the var-pool module, and the function must determine which of the defined methods that are called. If the method is not implemented, then the function should return &#039;false&#039;. As can be seen from the code, the function names are not intended to be case sensitive, and the parameter list is tested too, so the same method name may be used with different parameter lists.&lt;br /&gt;
The parameters in the call are, after the name and the parameter list, the three types of parameters and the return value, in the following order:&lt;br /&gt;
* &#039;strings&#039; a string array with as many elements as there is s&#039; parameters in the parameter list.&lt;br /&gt;
* &#039;pars&#039; a double array with as many elements as there is &#039;d&#039; parameters in the parameter list.&lt;br /&gt;
* &#039;value&#039; is where the primary result of the function is to be returned. If the method result is expressed in a double then here is the place to return the value. If the reply is a more complex, then this value could be used to flag success (1.0) or failure (0.0).&lt;br /&gt;
* &#039;returnStruct&#039; is an array of pointers to a structure buffer. This may also be used as an input parameter, with as many pointers in the array as there is &#039;c&#039; parameters in the parameter list.&lt;br /&gt;
* &#039;returnStructCnt&#039; is a count of the number of available pointers in the &#039;returnStruct&#039; array. On return this value must be changed to the actual number of class values returned. If the pointer array actually points at structures, then the method is expected to copy the relevant data to the provided buffer. If the pointer array (its first element) points to NULL, then the method is expected to return a pointer to a (one or more) structure in its own memory space. The receiver is then responsible for using the data before it is changed.&lt;br /&gt;
&lt;br /&gt;
The return structures must be defined as a class inherited from the base class &#039;UDataBase&#039;.&lt;br /&gt;
The following types are p.t. defined in this way:&lt;br /&gt;
* UDataDouble - holds just a double value&lt;br /&gt;
* UDataString - holds a c-string&lt;br /&gt;
* UPosition - holds an x,y,z value&lt;br /&gt;
* UPosRot - a 3D pose of e.g. a camera or a laser scanner on a robot&lt;br /&gt;
* ULine - holds a line (3D with 2D support) definition (3D point and 3D (unit) vector)&lt;br /&gt;
* ULineSegment - same as line, but with a length.&lt;br /&gt;
* UMatrix - the basic matrix class&lt;br /&gt;
* UMatrix4 - a 4x4 (or less) matrix for 2 or 3D calculations.&lt;br /&gt;
* UPolygon - a sequence of UPositions to form a poly-line or a polygon.&lt;br /&gt;
* UObstacleGroup - a group of UPolygon obstacles.&lt;br /&gt;
* UPose - a 2D pose (x,y,h) - and from this UPoseT (with time) UPoseVel (with velocity)&lt;br /&gt;
* UManSeq - a sequence of manoeuvres to get from one pose to another&lt;br /&gt;
&lt;br /&gt;
A call to a method in another module could look like this:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  const int MPC = 4; // parameter count&lt;br /&gt;
  double pars[MPC], v;&lt;br /&gt;
  char * driver = (const char *)&amp;quot;roadDriver&amp;quot;;&lt;br /&gt;
  UManSeq * manNew = NULL;&lt;br /&gt;
  bool isOK;&lt;br /&gt;
  int n = 1;&lt;br /&gt;
  ...&lt;br /&gt;
  pars[0] = exitPose.x;&lt;br /&gt;
  pars[1] = exitPose.y;&lt;br /&gt;
  pars[2] = exitPose.h;&lt;br /&gt;
  pars[3] = vel;&lt;br /&gt;
  isOK = call(&amp;quot;avoid.getAvoidPath&amp;quot;, &amp;quot;dddd&amp;quot;, NULL, pars, &amp;amp;v, (UDataBase**) &amp;amp;manNew, &amp;amp;n);&lt;br /&gt;
  if (isOK and v == 1.0)&lt;br /&gt;
    // supply manoeuvre sequence to smr interface resource&lt;br /&gt;
    isOK = call(&amp;quot;smrCtl.setPlan&amp;quot;, &amp;quot;sc&amp;quot;, &amp;amp;driver, NULL, &amp;amp;v, (UDataBase**) &amp;amp;manNew, &amp;amp;n);&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
Where the first call just supplies an double array with 4 elements and expect a pointer to a manoeuvre sequence in return.&lt;br /&gt;
If the call was a success the return value &#039;v&#039; will be 1.0, and then the received manoeuvre sequence&lt;br /&gt;
is send to the smr interface module. This call has a string and a class as parameters. The unused parameter pointers are set to NULL.&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=200</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=200"/>
		<updated>2008-09-29T11:10:15Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Plug-in structure and description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[[Server structure]] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[[plug-in structure]]&lt;br /&gt;
&lt;br /&gt;
[[Variables]] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Plugin.png&amp;diff=199</id>
		<title>File:Plugin.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Plugin.png&amp;diff=199"/>
		<updated>2008-09-29T11:09:23Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Plug-in_structure&amp;diff=198</id>
		<title>Plug-in structure</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Plug-in_structure&amp;diff=198"/>
		<updated>2008-09-29T11:09:15Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: The plug-in consist of an interface module, as a minimum.  The interface module should create a resource module for the needed calculations. This resource may communicate with other plug-i...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The plug-in consist of an interface module, as a minimum.&lt;br /&gt;
&lt;br /&gt;
The interface module should create a resource module for the needed calculations. This resource may communicate with other plug-in modules and functional modules owned by the resource itself.&lt;br /&gt;
&lt;br /&gt;
[[Image:plugin.png]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=197</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=197"/>
		<updated>2008-09-29T11:08:33Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Plug-in structure and description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[[Server structure]] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[[plug-in structure]]&lt;br /&gt;
&lt;br /&gt;
[Variables] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Server-structure-core.png&amp;diff=196</id>
		<title>File:Server-structure-core.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Server-structure-core.png&amp;diff=196"/>
		<updated>2008-09-29T11:07:46Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Server_structure&amp;diff=195</id>
		<title>Server structure</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Server_structure&amp;diff=195"/>
		<updated>2008-09-29T11:07:38Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: This page holds the documentation issues, that is valid for all servers or deals with server communication issues.  &amp;#039;&amp;#039;presentation&amp;#039;&amp;#039; presentation covering the server infrastructure - but t...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page holds the documentation issues, that is valid for all servers or deals with server communication issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;presentation&#039;&#039;&lt;br /&gt;
presentation covering the server infrastructure - but the overheads only&lt;br /&gt;
http://www.iau.dtu.dk/~jca/rac/component-structure-rev2.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:server-structure-core.png]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=194</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=194"/>
		<updated>2008-09-29T11:07:12Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[[Server structure]] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[plug-in structure] &lt;br /&gt;
&lt;br /&gt;
[Variables] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:OdoPose-update.png&amp;diff=193</id>
		<title>File:OdoPose-update.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:OdoPose-update.png&amp;diff=193"/>
		<updated>2008-09-29T11:06:00Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Coordinate_systems&amp;diff=192</id>
		<title>Coordinate systems</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Coordinate_systems&amp;diff=192"/>
		<updated>2008-09-29T11:05:48Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Three coordinate systems are implemented at present:&lt;br /&gt;
&lt;br /&gt;
* Odometry coordinates, this coordinate system may be a result of sensor fusion of high relative accuracy, but not sensors with an absolute measurement error relative to any coordinate system. That is, coordinates from a SLAM, Guidemark, Map or GPS may not be merged in this coordinate system. This coordinate system should be trustworthy when correlating local sensor information from a number of previous robot positions - e.g. image correlation or laser scan correlation.&lt;br /&gt;
&lt;br /&gt;
* UTM coordinates, assumed to be available from one (or more) GPS receiver(s).&lt;br /&gt;
* Map coordinates, representing the best estimate of robot position in a map coordinate system. The map coordinate system may  be identical with UTM coordinates.&lt;br /&gt;
&lt;br /&gt;
All coordinate systems are implemented in the same code, and thus has the same facilities.&lt;br /&gt;
These are:&lt;br /&gt;
* Providing the newest robot position and update time.&lt;br /&gt;
* Ability to log these updates (in e.g. odoPose.log)&lt;br /&gt;
* Ability to replay from a logfile&lt;br /&gt;
* Stores up to 2000 history poses - covers some 70m with the default update settings&lt;br /&gt;
* Can search in the history to get average heading or a position at a specific time or distance from current position.&lt;br /&gt;
&lt;br /&gt;
The code is library code, so the functionality can be accessed by establishing a pointer directly to the resource modules.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odometry pose&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The odometry coordinate system is maintained by MRC (smrdemo) as shown in this figure&lt;br /&gt;
&lt;br /&gt;
[[Image:odoPose-update.png]]&lt;br /&gt;
&lt;br /&gt;
MRC (smrdemo) connects to the camera server (port 24920) and the laser scanner server (port 24919) if these are available when smrdemo is started.&lt;br /&gt;
If these two servers has the &#039;odoPose&#039; module loaded, then this is automatically maintained with the odometry coordiante system.&lt;br /&gt;
&lt;br /&gt;
If other servers - like the client or the behaviour server - needs an odometry position too, then this can be obtained from one of these two maintained servers. Obtaining updates from the laser scanner server:&lt;br /&gt;
 &amp;gt;&amp;gt; module load=odoPose&lt;br /&gt;
 &amp;gt;&amp;gt; module load=if alias=laser&lt;br /&gt;
 &amp;gt;&amp;gt; laser add=var&lt;br /&gt;
 &amp;gt;&amp;gt; laser connect=localhost:24919&lt;br /&gt;
 &amp;gt;&amp;gt; laser odoPosePush cmd=&amp;quot;odoPose pose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This sequence of commands first loads the odometry pose module &#039;odoPose&#039;, then an interface module given the name &#039;laser&#039;.&lt;br /&gt;
To this interface module a data handler &#039;var&#039; is added handling global variables and pose updates.&lt;br /&gt;
Then the interface is connected to the laser scanner server.&lt;br /&gt;
The final line specifies a command that is to be executed on the laser scanner server when the odometry pose is updated. When triggerd the newest pose (and time) is send to this server. The &#039;var&#039; data handler forwards the pose to the odoPose module.&lt;br /&gt;
&lt;br /&gt;
A more safe way of keeping the odometry pose updated is this slightly modified command sequence:&lt;br /&gt;
 &amp;gt;&amp;gt; module load=odoPose&lt;br /&gt;
 &amp;gt;&amp;gt; module load=if alias=laser&lt;br /&gt;
 &amp;gt;&amp;gt; laser add=var&lt;br /&gt;
 &amp;gt;&amp;gt; laserOnConnect cmd=&amp;quot;laser odoPosePush flush&amp;quot;&lt;br /&gt;
 &amp;gt;&amp;gt; laserOnConnect cmd=&amp;quot;laser odoPosePush cmd=&#039;odoPose pose&#039;&amp;quot;&lt;br /&gt;
 &amp;gt;&amp;gt; laser connect=localhost:24919&lt;br /&gt;
&lt;br /&gt;
The difference is that the update command is send to the laser scanner server whenever the laser scanner gets online. That is, if the laser scanner is loaded later, then the command sequence is send at that time. If this server was down and is restarted, then the laser scanner may not have noticed that the connection was down, and thus pushes odometry positions already, to avoid  double commands, any existing commands (from this client) is flushed first.&lt;br /&gt;
&lt;br /&gt;
The behaviour server is assumed to establish a direct connection to the smrdemo port (e.g. 31001). This connection can be used to maintain the odometry coordinate as well. This could be established with the following command set:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; module load=odoPose&lt;br /&gt;
 &amp;gt;&amp;gt; module load=smr&lt;br /&gt;
 &amp;gt;&amp;gt; smr connect=localhost:31001&lt;br /&gt;
 &amp;gt;&amp;gt; smr stream=1&lt;br /&gt;
&lt;br /&gt;
Assuming the MRC is started with the command&lt;br /&gt;
 $ ./smrdemo -t1&lt;br /&gt;
&lt;br /&gt;
Once this is established, the behaviour server may act as source of odometry pose updates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UTM pose&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UTM pose is intended to be maintained from a GPS module, so to get this running issue the following commads:&lt;br /&gt;
 &amp;gt;&amp;gt; module load=gps&lt;br /&gt;
 &amp;gt;&amp;gt; module load=utmPose&lt;br /&gt;
 &amp;gt;&amp;gt; gps dev=&amp;quot;/dev/ttyUSB0&amp;quot; speed=9600&lt;br /&gt;
 &amp;gt;&amp;gt; gps open&lt;br /&gt;
 &amp;gt;&amp;gt; gps openLog&lt;br /&gt;
&lt;br /&gt;
The commands shown should match the GPS on the MMR.&lt;br /&gt;
&lt;br /&gt;
An alternative source is the RSK-GPS interfaces into MRC (smrdemo), the data from this can be streamed from the server holding the smrdemo connection.&lt;br /&gt;
The following script should ensure this UTM source (in addition to the odoPose) to be available:&lt;br /&gt;
 &amp;gt;&amp;gt; module load=utmPose&lt;br /&gt;
 &amp;gt;&amp;gt; module load=smr&lt;br /&gt;
 &amp;gt;&amp;gt; smr connect=localhost:31001&lt;br /&gt;
 &amp;gt;&amp;gt; smr stream=1&lt;br /&gt;
&lt;br /&gt;
This loads the needed modules and starts the sreaming at every update interval - this gps is available on the HAKO tractor only, and here the update interval is 100ms.&lt;br /&gt;
&lt;br /&gt;
NB! the UTM pose is a x,y (easting, northing) coordinate only, the heading and velocity can not be assumed to be valid. The coordinates are as received from the source, and no (additional) smoothing is performed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Map pose&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The map pose is intended for localization on an apriory map, where the coordinate system may or may not be in UTM coordinates. The assumed method is that a localization module combines the UTM position and sensor data with the map, and from this determines the most likely Map position, and load this into the Map coordinate system.&lt;br /&gt;
&lt;br /&gt;
The code to update the map coordinate system is:&lt;br /&gt;
 {&lt;br /&gt;
  UPoseTime pt;&lt;br /&gt;
  double speed = 0.0;&lt;br /&gt;
  double x,y,th, time;&lt;br /&gt;
  UTime t;&lt;br /&gt;
  ...&lt;br /&gt;
  if (mapPose != NULL)&lt;br /&gt;
  {&lt;br /&gt;
   pt.x = x;&lt;br /&gt;
   pt.y = y;&lt;br /&gt;
   pt.h = th;&lt;br /&gt;
   t.now();&lt;br /&gt;
   pt.t = t;&lt;br /&gt;
   mapPose-&amp;gt;addIfNeeded(pt, speed, -9);&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Where the &#039;mapPose&#039; is a pointer directly to the mapPose resource, the pointer should be defined in the resource class:&lt;br /&gt;
&lt;br /&gt;
 class UResLocalization : public UResVarPool&lt;br /&gt;
 {&lt;br /&gt;
  public:&lt;br /&gt;
  ...&lt;br /&gt;
  bool setResource(UResBase * resource, bool remove);&lt;br /&gt;
  ...&lt;br /&gt;
  protected:&lt;br /&gt;
  UResPoseHist * mapPose;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
.. and will be set by the &#039;setResource(..)&#039; function when the mapPose module is loaded, by:&lt;br /&gt;
&lt;br /&gt;
 bool UResLocalization::setResource(UResBase * resource, bool remove)&lt;br /&gt;
 {&lt;br /&gt;
  bool result = true;&lt;br /&gt;
  if (resource-&amp;gt;isA(UResPoseHist::getMapPoseID()))&lt;br /&gt;
  { // ressource may change&lt;br /&gt;
    if (remove)&lt;br /&gt;
      mapPose = NULL;&lt;br /&gt;
    else if (mapPose != resource)&lt;br /&gt;
      mapPose = (UResPoseHist *)resource;&lt;br /&gt;
    else&lt;br /&gt;
      result = false;&lt;br /&gt;
  }&lt;br /&gt;
  result &amp;amp;= UResVarPool::setResource(resource, remove);&lt;br /&gt;
  return result;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=191</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=191"/>
		<updated>2008-09-29T11:05:19Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Static Plug-ins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[Server structure] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [[Coordinate systems]] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[plug-in structure] &lt;br /&gt;
&lt;br /&gt;
[Variables] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:OdoPose-update-rev2.png&amp;diff=190</id>
		<title>File:OdoPose-update-rev2.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:OdoPose-update-rev2.png&amp;diff=190"/>
		<updated>2008-09-29T11:04:01Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Pose&amp;diff=189</id>
		<title>Pose</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Pose&amp;diff=189"/>
		<updated>2008-09-29T11:03:51Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: Three static modules are available to maintain and service coordinate systems:  * odoPose intended for odometry pose as maintained from MRC (smrdemo) * mapPose intended for a map coordinat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Three static modules are available to maintain and service coordinate systems:&lt;br /&gt;
&lt;br /&gt;
* odoPose intended for odometry pose as maintained from MRC (smrdemo)&lt;br /&gt;
* mapPose intended for a map coordinate system, e.g. oriented as a room, building or area coordinate reference&lt;br /&gt;
* utmPose intended to be maintained from a GPS and possibly backed by localization from known map positions in UTM coordinates.&lt;br /&gt;
&lt;br /&gt;
To add a module see (e.g. from the server window or in a script) &lt;br /&gt;
 module help&lt;br /&gt;
To add all three coordinate system modules:&lt;br /&gt;
 module add=mappose&lt;br /&gt;
 module add=odoPose&lt;br /&gt;
 module add=utmPose&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Main function of pose information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The pose is information of robot position in som coordinate system at a point in time. The module stores a number of updates (currently 2000) and holds functions to maintain, query and do some calculations on this stack of positions.&lt;br /&gt;
Update of the pose can trigger an event, that can be used to trigger some action, e.g. a sensor fusion update or transfer of pose to another server.&lt;br /&gt;
&lt;br /&gt;
A few parameters determine if an update is stored as an update, determined on the movement and the time since last stored update. Default values are (if not changed):&lt;br /&gt;
&lt;br /&gt;
 minDist  =  0.03               // Adding update to history if distance is more than this&lt;br /&gt;
 minTurn  =  1.0 * M_PI / 180.0 // Adding update to history if turned more than this (1 degree)&lt;br /&gt;
 minTime  = 10.0                // Adding update to history if time passed is more than this&lt;br /&gt;
&lt;br /&gt;
If either of these limitations are exceeded, then the new update is added to the update buffer. This means that if the distance criteria is the limiting criteria, then there could be 2000*0.03 = 60m of valid poses in the history buffer.&lt;br /&gt;
&lt;br /&gt;
The history buffer can be used to determine&lt;br /&gt;
   * pose at a specific time (often used to determine pose at the time of some sensor data.)&lt;br /&gt;
   * pose at a distance from current position - e.g. 5m from current position, calculated as direct distance, not traveled distance.&lt;br /&gt;
   * Direct iteration into stored values.&lt;br /&gt;
&lt;br /&gt;
These functions are usually used directly using C++ calls to this resource.&lt;br /&gt;
&lt;br /&gt;
A number of global available values are maintained, such as the distance traveled. These are primarily intended to be used by a mission scheduler, as trip counter and time passed functions. See e.g.:&lt;br /&gt;
&lt;br /&gt;
 var mapPose&lt;br /&gt;
&lt;br /&gt;
to get an overview of available global values available.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use (one of) the pose modules from your own plug-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can get access to the pose module using a resource pointer. The procedure is the same&lt;br /&gt;
if you need it in an interface part of the plug-in or in a resource.&lt;br /&gt;
&lt;br /&gt;
Create a pointer in the class definition to the common type UResPoseHist, e.g.:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;urob4/uresposehist.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 protected:&lt;br /&gt;
 UResPoseHist * mapPose;&lt;br /&gt;
&lt;br /&gt;
This mapPose pointer needs to be initialized to NULL in the class constructor, as this usually is used as an indication of an invalid resource. e.g.:&lt;br /&gt;
&lt;br /&gt;
 UResYourClass::UResYourClass()&lt;br /&gt;
 {&lt;br /&gt;
  setResID(getResID());&lt;br /&gt;
  resVersion = getResVersion();&lt;br /&gt;
  mapPose = NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The server core will tell you about available resources - and changes in the resource situation, this is done with a call to the function setResource(UResBase * resource, bool remove), and if your program should listen to this call, to get the correct pointer, i.e. to get the mapPose pointer:&lt;br /&gt;
&lt;br /&gt;
 bool UResYourClass::setResource(UResBase * resource, bool remove)&lt;br /&gt;
 {&lt;br /&gt;
   bool result = true;&lt;br /&gt;
   if (resource-&amp;gt;isA(UResPoseHist::getMapPoseID()))   // *note&lt;br /&gt;
   { // ressource may be deleted or change&lt;br /&gt;
     if (remove)&lt;br /&gt;
       mapPose = NULL;&lt;br /&gt;
     else if (mapPose != resource)&lt;br /&gt;
       mapPose = (UResPoseHist *)resource;&lt;br /&gt;
     else&lt;br /&gt;
       result = false; // the resource is not neded by this class&lt;br /&gt;
   }&lt;br /&gt;
   // the base class may need the resource&lt;br /&gt;
   result &amp;amp;= UResVarPool::setResource(resource, remove);&lt;br /&gt;
   return result; // used or not&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*note: The other alternatives are: UResPoseHist::getOdoPoseID() and UResPoseHist::getUtmPoseID() for the other coordinate systems.&lt;br /&gt;
&lt;br /&gt;
Now the resource pointer is in place, ready for use.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update with new positions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main assumption is that one plugin maintains the pose and one or more other plugins (or the mission sequencer) uses the information.&lt;br /&gt;
&lt;br /&gt;
To update the mapPose plugin, just provide a pose and the time when the pose is valid&lt;br /&gt;
&lt;br /&gt;
 UPoseTime pt;    // structure with x, y, h and time&lt;br /&gt;
 UTime t;         // just time in linux time format (seconds since 1 jan 1970)&lt;br /&gt;
 //&lt;br /&gt;
 t.now();         // set time from linux clock&lt;br /&gt;
 pt.set(xPosition, yPosition, headingInRadians); // set some pose&lt;br /&gt;
 pt.t = t;        // add the time&lt;br /&gt;
 mapPose-&amp;gt;addIfNeeded(pt, 0.0, -12);  // add the new pose (if needed)&lt;br /&gt;
&lt;br /&gt;
The call to addIfNeeded(...) has three parameters, the first is the pose, the second is an optional speed (not essential), the last is a number used to identify the updater - negative numbers are an update from a plugin, a positive number is a TCP/IP client.&lt;br /&gt;
This number is available to ease debugging in the help text:&lt;br /&gt;
&lt;br /&gt;
 mapPose help&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use the resource pointer to get a pose&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To get a pose will normally use getPoseAtTime(UTime atTime), like:&lt;br /&gt;
&lt;br /&gt;
 UPose pose;&lt;br /&gt;
 UTime t;&lt;br /&gt;
 //&lt;br /&gt;
 t.now();&lt;br /&gt;
 pose = mapPose-&amp;gt;getPoseAtTime(t);&lt;br /&gt;
&lt;br /&gt;
See the class documentation for UResPoseHist for other available methods and values.&lt;br /&gt;
&lt;br /&gt;
[[Image:odoPose-update-rev2.png]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=188</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=188"/>
		<updated>2008-09-29T11:03:03Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Plug-in structure and description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[Server structure] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [Coordinate systems] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[plug-in structure] &lt;br /&gt;
&lt;br /&gt;
[Variables] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [[pose]]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Sequencer&amp;diff=187</id>
		<title>Sequencer</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Sequencer&amp;diff=187"/>
		<updated>2008-09-29T10:48:35Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: &amp;#039;&amp;#039;Status&amp;#039;&amp;#039;  The sequencer is in broad terms equal the the sequencer in smrdemo, but is less real time oriented  &amp;#039;&amp;#039;How to operate&amp;#039;&amp;#039;  Load the module &amp;#039;auseq-1.XX.so.0&amp;#039; by e.g.: The module re...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Status&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The sequencer is in broad terms equal the the sequencer in smrdemo, but is less real time oriented&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to operate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Load the module &#039;auseq-1.XX.so.0&#039; by e.g.:&lt;br /&gt;
The module requires the variable handling module to be loaded too, so load both.&lt;br /&gt;
 &amp;gt;&amp;gt; module load=&#039;/usr/local/smr/bin/auseq-1.77.so.0&#039;&lt;br /&gt;
 &amp;gt;&amp;gt; module load=var&lt;br /&gt;
The variable handling module is static - and can thus be loaded using a short name - see &#039;&amp;gt;&amp;gt; module help&#039; for a list of static modules.&lt;br /&gt;
&lt;br /&gt;
Look at:&lt;br /&gt;
 &amp;gt;&amp;gt; seq help&lt;br /&gt;
to get sequencer options, then try to add a sequencer line by e.g.:&lt;br /&gt;
 &amp;gt;&amp;gt; seq add=&amp;quot;a=sin(0.5)&amp;quot;&lt;br /&gt;
 USeqLoop::run: 0 Parsing &#039;a=sin(0.5)&#039; &lt;br /&gt;
 USeqLoop::run: ** 1 warning: sequencer out of mission lines (try &amp;quot;seq help&amp;quot;)&lt;br /&gt;
The sequenser reply is that the line is parsed and it now is out of sequence lines&lt;br /&gt;
&lt;br /&gt;
All variables and functions available to the sequencer can be displayed with the command:&lt;br /&gt;
 &amp;gt;&amp;gt; var all&lt;br /&gt;
 false=0;                      Constant false is the same as 0&lt;br /&gt;
 true=1;                       Constant true is the same as 1&lt;br /&gt;
 pi=3.14159;                   Constant pi is the same as 3.14159...&lt;br /&gt;
 replayTime=0;                 Current time index to replay file(s)&lt;br /&gt;
 a=0.479426;                   new&lt;br /&gt;
 core=&#039;struct&#039;;                Variables related to the server core.&lt;br /&gt;
 poseHist=&#039;struct&#039;;            Holds the most recent robot position and the&lt;br /&gt;
 seq=&#039;struct&#039;;                 Plan sequencer settings and status&lt;br /&gt;
 roaddrive=&#039;struct&#039;;           Road line driver settings and functions&lt;br /&gt;
 drivepos=&#039;struct&#039;;            Drive to position settings and functions&lt;br /&gt;
 limitToPi(d);&lt;br /&gt;
 sin(d); &lt;br /&gt;
 cos(d);&lt;br /&gt;
 ...&lt;br /&gt;
And among the list is the new variable &#039;a&#039; introduced by the sequencer line.&lt;br /&gt;
&lt;br /&gt;
Some modules introduce drive commands, the &#039;drivepos&#039; module allow to drive to a position, in local or absolute coordinates&lt;br /&gt;
To try it, first load the module&lt;br /&gt;
 &amp;gt;&amp;gt; module load=&amp;quot;/usr/local/smr/bin/audrivepos-1.77.so.0&amp;quot;&lt;br /&gt;
To see the settings and functions in this plugin, try:&lt;br /&gt;
 &amp;gt;&amp;gt; var drivepos&lt;br /&gt;
 version=1.77;                 Resource version&lt;br /&gt;
 updateTime=0;                 Last time the road drive command was calles&lt;br /&gt;
 loopCnt=0;                    Number of times called by sequencer&lt;br /&gt;
 odoX=0;                       (ro) target position used in obstacle avoidance&lt;br /&gt;
                              (set by call)&lt;br /&gt;
 odoY=0;&lt;br /&gt;
 odoH=0;&lt;br /&gt;
 odoV=1;                       target velocity at end of obstacle avoidance&lt;br /&gt;
 failCnt=0;                    Path fails since last success&lt;br /&gt;
 finalDistance=0.7;            Distance from target position where no new path&lt;br /&gt;
                              is calculated&lt;br /&gt;
 odo(ddd);                     Drive towards this odometry position (x[m],&lt;br /&gt;
                              y[m], h[rad])&lt;br /&gt;
 odo(dddd);                    Drive towards this odometry position (x[m],&lt;br /&gt;
                              y[m], h[rad]), the last (optional) parameter is&lt;br /&gt;
                              a repeat count for calls in rapid succession.&lt;br /&gt;
 rel(ddd);                     Drive towards this position relative to the&lt;br /&gt;
                              robot (x[m], y[m], h[rad])&lt;br /&gt;
 rel(dddd);                    Drive towards this position relative to the&lt;br /&gt;
                              robot (x[m], y[m], h[rad]), the last (optional)&lt;br /&gt;
                              parameter is a repeat count for calls in rapid&lt;br /&gt;
                              succession. First call (repeat==0) determines&lt;br /&gt;
                              origin for relative position&lt;br /&gt;
 odoVel(dddd);                 Drive towards this odometry position and desired&lt;br /&gt;
                              end velocity (x, y, h, vel)&lt;br /&gt;
&lt;br /&gt;
To add a line that will drive to a position 1 meter forward and 0.5 meter to the right maintaining the current heading, try:&lt;br /&gt;
 &amp;gt;&amp;gt; seq add=&amp;quot;drivepos.odo(1, -0.5, 0) : false&amp;quot;&lt;br /&gt;
The first part is a function call the the &#039;odo(ddd)&#039; function in the &#039;drivepos&#039; module with the 3 needed &#039;double&#039; parameters. Then a &#039;:&#039; to say that it is a drive command that should be continued until it returnes &#039;true&#039; or the explicit stop condition after the &#039;:&#039; evaluates to true.&lt;br /&gt;
&lt;br /&gt;
Then a failure remark is most likely returned, this is because the drive module depends on other modules to complete the command&lt;br /&gt;
&lt;br /&gt;
@todo more info needed&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=186</id>
		<title>AU Robot Servers</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=AU_Robot_Servers&amp;diff=186"/>
		<updated>2008-09-29T10:47:57Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Plug-in structure and description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documentation of AU robot servers==&lt;br /&gt;
&lt;br /&gt;
[[Image:Server-structure-1.png]]&lt;br /&gt;
&lt;br /&gt;
AU Robot Servers is a software infrastructure that can combine a number of functional modules to a robot with functionality at a the higher abstraction levels. Yellow boxes are the currently available servers in this structure.&lt;br /&gt;
&lt;br /&gt;
==Download and bug reporting==&lt;br /&gt;
&lt;br /&gt;
For package and install notes see: [Christian&#039;s Wiki Page] - no, that page is now used by others for other purposes, but in summary the released versions are here: http://www.iau.dtu.dk/~jca/rac/releases&lt;br /&gt;
&lt;br /&gt;
and a few comments for the releases in [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
CVS updated to version ~2.01 (19 may 2008)&lt;br /&gt;
&lt;br /&gt;
NEW! BUG reporting page here: [[Change requests]]&lt;br /&gt;
&lt;br /&gt;
Doxygen documentation http://www.iau.dtu.dk/~jca/rac/html/index.html&lt;br /&gt;
&lt;br /&gt;
==Servers==&lt;br /&gt;
&lt;br /&gt;
[Server structure] issues (global variables and methods)&lt;br /&gt;
&lt;br /&gt;
Camera server [[ucamserver]]&lt;br /&gt;
&lt;br /&gt;
Laser scanner server [[ulmsserver]]&lt;br /&gt;
&lt;br /&gt;
Empty server [userver]&lt;br /&gt;
&lt;br /&gt;
Data monitoring client [auclient]&lt;br /&gt;
&lt;br /&gt;
==Static Plug-ins==&lt;br /&gt;
&lt;br /&gt;
Static plug-ins is part of the server code, and can be loaded without any additional files, see:&lt;br /&gt;
 &amp;gt;&amp;gt; module help&lt;br /&gt;
To get the available list of static plug-ins (and a short description)&lt;br /&gt;
&lt;br /&gt;
The three [Coordinate systems] are available as static: odometry (odoPose), UTM (utmPose) and Map (mapPose)&lt;br /&gt;
&lt;br /&gt;
==File plug-ins==&lt;br /&gt;
&lt;br /&gt;
This is a list of the current available plug-ins in release 2.01:&lt;br /&gt;
&lt;br /&gt;
The intension is that there should be a wiki page for each with further description.&lt;br /&gt;
&lt;br /&gt;
* auavoid.so.0 - visual graph obstacle avoidance (not stable)&lt;br /&gt;
* auballfinder.so.0 - sample blob finder in a camera image&lt;br /&gt;
* aucamcog.so.0 - a sample center of gravity plug-in for part of a camera image&lt;br /&gt;
* aucamfocus.so.0 - a focus (contrast) calculation on a camera image.&lt;br /&gt;
* aucron.so.0 - a module to execute bash commands at regular intervals - e.g. to move logged images at low priority&lt;br /&gt;
* audrivepos.so.0 - drive control to a specific pose (uses auavoid)&lt;br /&gt;
* auefline.so.0 - sample line finder plugin extended to find and maintain wall lines. Is based on the libauextractfeatures library.&lt;br /&gt;
* augps.so.0 - a gps plugin, that maintains an UTM pose from a serial/USB GPS connection&lt;br /&gt;
* aulmsnear.so.0 - a small function to return the closest point in a laserscan as a &amp;lt;laser l0=0.0 .../&amp;gt; type message&lt;br /&gt;
* aumission.so.0 - the new - but not finished - [[Mission monitor sequencer]]&lt;br /&gt;
* auroaddrive.so.0 - a drive controller thet follows a road edge (uses auavoid, ausmr and ulmspassable)&lt;br /&gt;
* auseq.so.0 - mission sequencer - much like smrcl, but using variables and functions provided by the AU Robot servers - is to be replaced by aumission.so.0 once this is operational.&lt;br /&gt;
* ausmr.so.0 - smr interface&lt;br /&gt;
* ausvs.so.0 - a not quite finished [[Videre Design stereo camera plug-in]]&lt;br /&gt;
* uexres.so.0 - sample resource share plug-in - works with uexuse&lt;br /&gt;
* uexuse.so.0 - sample resource share plug-in - works with uexres&lt;br /&gt;
* ulmspassable.so.0 - extracts road lines from a laserscan (tilted laser)&lt;br /&gt;
* ulmsv360.so.0 - virtual 360 deg laser scanner device. This is also available as static plug-in for the ulmsserver.&lt;br /&gt;
&lt;br /&gt;
==Plug-in structure and description==&lt;br /&gt;
&lt;br /&gt;
[plug-in structure] &lt;br /&gt;
&lt;br /&gt;
[Variables] (global variables and functions across plugins)&lt;br /&gt;
&lt;br /&gt;
[[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
Scan features (@todo make page)&lt;br /&gt;
&lt;br /&gt;
odometry, map or UTM (gps) pose and pose history  [pose]&lt;br /&gt;
&lt;br /&gt;
Guidemark (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road detect (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Sequencer [[Sequencer]]&lt;br /&gt;
&lt;br /&gt;
SMR interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Camera server interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Laser scanner interface (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Obstacle avoidance (@todo make page)&lt;br /&gt;
&lt;br /&gt;
Road driver (@todo make page)&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=MMR&amp;diff=185</id>
		<title>MMR</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=MMR&amp;diff=185"/>
		<updated>2008-09-29T10:45:32Z</updated>

		<summary type="html">&lt;p&gt;Lvm: New page: This page holds information relevant for the Natty Bumpo robot.  &amp;#039;&amp;#039;&amp;#039;make video from images&amp;#039;&amp;#039;&amp;#039;  1. Convert to filenames with sequential numbers and a supported image formap (e.g. png)  2. r...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page holds information relevant for the Natty Bumpo robot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make video from images&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Convert to filenames with sequential numbers and a supported image formap (e.g. png)&lt;br /&gt;
&lt;br /&gt;
2. run ffmpeg with appropriate options&lt;br /&gt;
&lt;br /&gt;
A script to do so could be:&lt;br /&gt;
 #! /bin/bash&lt;br /&gt;
 let COUNTER=1000000&lt;br /&gt;
 for f in $( ls *.bmp ); do &lt;br /&gt;
	  echo convert $f path$COUNTER.png&lt;br /&gt;
          convert $f path$COUNTER.png&lt;br /&gt;
          let PREV=$COUNTER&lt;br /&gt;
          let COUNTER+=1&lt;br /&gt;
	done&lt;br /&gt;
 # convert to mpeg format&lt;br /&gt;
 # -r 25 frames per second&lt;br /&gt;
 # -b 5000000 bitrate på 5Mbit/sec&lt;br /&gt;
 # -y betyder overskriv destination&lt;br /&gt;
 ffmpeg -y -r 25 -b 5000000 -i path1%06d.png path.mpeg&lt;br /&gt;
 ls -l path.mpeg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Natty Bumpo – demo instructions (short version)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Assumptions:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Near AU, i.e. Wireless network running (if not: reboot to set default gateway).&lt;br /&gt;
&lt;br /&gt;
(old mmrd version of software - pre 2007)&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Using acer PC for control (boot with linux).&lt;br /&gt;
&lt;br /&gt;
Acer PC is connected with twisted network cable to Natty. Natty has IP 10.0.2.116, &lt;br /&gt;
Acer is assumed to have IP 10.0.2.1. (IP is set on acer in /etc/rc.d/rc.inet1.conf:&lt;br /&gt;
 IPADDR[0]=”10.0.2.1”&lt;br /&gt;
 USE_DHCP[0]=”no”&lt;br /&gt;
 NETMASK[0]=”255.255.255.0”.&lt;br /&gt;
&lt;br /&gt;
LMSserver and gpsserver must be running – check with ps -A. If not then start manually from a ssh session (no parameters required). SMRDEMO, UCAMSERVER and MMRD should be started manually, e.g.:&lt;br /&gt;
&lt;br /&gt;
 ssh demo@smr16             # and password&lt;br /&gt;
 cd /rhome/demo/bin&lt;br /&gt;
 ./smrdemo -t1              # smrdemo opens port 31001&lt;br /&gt;
&lt;br /&gt;
 ssh demo@smr16&lt;br /&gt;
 cd bin&lt;br /&gt;
 ./ucamserver -t &amp;quot;path gmk&amp;quot; --imagepath=&amp;quot;/mnt/ram&amp;quot;      # camera server opens port 24920&lt;br /&gt;
&lt;br /&gt;
And the navigation server currently called mmrd&lt;br /&gt;
&lt;br /&gt;
 ssh demo@smr16&lt;br /&gt;
 cd bin&lt;br /&gt;
 ./mmrd -i /mnt/ram  # drive planner opens port 24922&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;On acer: for mission control and monitoring&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Find the graphical control application (based on openCV):&lt;br /&gt;
 ./uclient   # is in /usr/local/smr/bin on &amp;quot;nyquist&amp;quot; and &amp;quot;jensen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Connect to smr16 (session3) port 24922&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; connect smr16 24922&lt;br /&gt;
 &amp;gt;&amp;gt; connected ...&lt;br /&gt;
&lt;br /&gt;
To watch status image (getting laser scan and other info every 1 sec).&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; push cmd=”get all”         # major variable values&lt;br /&gt;
 &amp;gt;&amp;gt; push cmd=”obstget”         # obstacles&lt;br /&gt;
 &amp;gt;&amp;gt; push cmd=”planget status”  # gets current command line (etc)&lt;br /&gt;
 &amp;gt;&amp;gt; push cmd=”scanget andall”  # gets the laser scan and result of path finding (etc)&lt;br /&gt;
&lt;br /&gt;
Run a mission e.g. Down the hall (25 meter on the left side):&lt;br /&gt;
 &amp;gt;&amp;gt; planset goto=”fwd left 25”&lt;br /&gt;
Set (max) speed (to 0.9 m/s) – current speed is shown on status image (top-left):&lt;br /&gt;
 &amp;gt;&amp;gt; set speed=0.9&lt;br /&gt;
Run a script, (look in /rhome/demo/bin/*.mmr) place MMR in hall and try&lt;br /&gt;
 &amp;gt;&amp;gt; planset load=&amp;quot;doors.mmr&amp;quot;&lt;br /&gt;
It will drive along left side of hallway (~25m) and stop at all open doors to the right, and return.&lt;br /&gt;
&lt;br /&gt;
For other commands try &lt;br /&gt;
 &amp;gt;&amp;gt; help &lt;br /&gt;
 &amp;gt;&amp;gt; shelp&lt;br /&gt;
&lt;br /&gt;
If vision path finding is to be used, then the following parameter must be set:&lt;br /&gt;
 &amp;gt;&amp;gt; set visPathUse=true&lt;br /&gt;
The vision polygon can be seen by a further push command:&lt;br /&gt;
 &amp;gt;&amp;gt; push cmd=&amp;quot;get visPoly&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;FAQ&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tilt of laser scanner does not work.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tilt controller can enter a no-operation mode where it needs a reset to resume operation.&lt;br /&gt;
Reset can be done through the &#039;smrd&#039; interface or by hardware action:&lt;br /&gt;
&lt;br /&gt;
Hardware reset of laser scanner tilt controller:&lt;br /&gt;
&lt;br /&gt;
Open plastic box behind the laser scanner (4 screws).&lt;br /&gt;
The PCB closest to the laser scanner is the tilt controller board.&lt;br /&gt;
The 2-wire (thick gray and orange wires) is the 24 volt supply, unplug this&lt;br /&gt;
and reinsert. The tilt function should then find the lower extreme and reset to horizontal position.&lt;br /&gt;
&lt;br /&gt;
If the tilt has passed one of the end-switches, the above reset might fail.&lt;br /&gt;
In this case disconnect the two wires to the motor (red and black (red closest to scanner)) &lt;br /&gt;
- screwed to the end of the controller board  - and connect an &lt;br /&gt;
external power supply (+/- 2 to 5 volt) to turn the tilt to a normal angle, then try the&lt;br /&gt;
reset procedure again.&lt;br /&gt;
&lt;br /&gt;
NB! Do not try to turn the laser scanner by hand - it will damage the axle.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Module will not load -- symbol not found&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the server is not compiled with the same library as the module, there may be &amp;quot;symbol not found&amp;quot; errors.&lt;br /&gt;
The solution is to recompile their server with the same library as the modules (or vise versa).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Robot documentation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Documentation by Malte and Anders is on kalman:/vhome/ ... ?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hardware&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1.2 GHz Via C2 processor with 512 MByte RAM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Serial IO&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following devices are used:&lt;br /&gt;
&lt;br /&gt;
 /dev/ttyUSB0  // Laser scanner using USB/serial device&lt;br /&gt;
 /dev/ttyS4    // symbolic link for old laser scanner server&lt;br /&gt;
 /dev/ttyUSB1  // gps receiver&lt;br /&gt;
 /dev/ttyACM0  // Small laser scanner (URG)&lt;br /&gt;
 /dev/ttyS1    // used by smrd for RS485 interface&lt;br /&gt;
&lt;br /&gt;
With kernel version 2.6.17, these are not the devices created by UDEV, they are now all in /dev/tts/*.&lt;br /&gt;
&lt;br /&gt;
The com1 and com2 ports are swapped relative to ordinary SMRs, to correct for this the devices in the mmr are cross-linked in /etc/rc.d/rc.local as follows:&lt;br /&gt;
&lt;br /&gt;
 rm /dev/ttyS0&lt;br /&gt;
 rm /dev/ttyS1&lt;br /&gt;
 ln -s /dev/tts/1 /dev/ttyS0&lt;br /&gt;
 ln -s /dev/tts/0 /dev/ttyS1&lt;br /&gt;
&lt;br /&gt;
Further the devices /dev/tts/USB0 and /dev/tts/USB1 may be swapped after a reboot,&lt;br /&gt;
to solve for this issue the devices are mapped to /dev/ttyUSB0 for gps and /dev/ttyUSB1 for SICK&lt;br /&gt;
This is done in /etc/rc.d/rc.local using:&lt;br /&gt;
&lt;br /&gt;
  if udevinfo -a -p /class/tty/ttyUSB0 | grep &#039;DRIVER==&amp;quot;pl2303&amp;quot;&#039;; then&lt;br /&gt;
    echo USB0 is GPS, USB1 is SICK&lt;br /&gt;
    # direct ttyUSB0 to tts/USB0 as it is the gps connection&lt;br /&gt;
    ln -s /dev/tts/USB0 /dev/ttyUSB0&lt;br /&gt;
    # direct ttyS4 to tts/USB1 as it is the SICK laserscanner&lt;br /&gt;
    ln -s /dev/tts/USB1 /dev/ttyS4&lt;br /&gt;
    ln -s /dev/tts/USB1 /dev/ttyUSB1&lt;br /&gt;
  else&lt;br /&gt;
    echo USB0 is SICK, USB1 is GPS&lt;br /&gt;
    # direct ttyUSB0 to tts/USB1 as it is the gps connection&lt;br /&gt;
    ln -s /dev/tts/USB1 /dev/ttyUSB0&lt;br /&gt;
    # direct ttyS4 and ttyUSB1 to tts/USB0 as it is the SICK laserscanner&lt;br /&gt;
    ln -s /dev/tts/USB0 /dev/ttyS4&lt;br /&gt;
    ln -s /dev/tts/USB0 /dev/ttyUSB1&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;RAM disk&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A RAM disk is mounted at&lt;br /&gt;
 /mnt/ram&lt;br /&gt;
with write access for all. Remember all content are lost after a reboot.&lt;br /&gt;
The RAM-disk takes RAM as needed up to a maximum of 300 MByte.&lt;br /&gt;
&lt;br /&gt;
The ram disk size is defined in with the other disk definitions&lt;br /&gt;
 /etc/fstab&lt;br /&gt;
with the line&lt;br /&gt;
 tmpfs /mnt/ram tmpfs size=300m 0 0&lt;br /&gt;
&lt;br /&gt;
The ram-disk is intended for temporary data (logging), that can be used in areas, where no network connection is available or as a fast logging device. These data can then later be copied to a more permanent place - if needed.&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Flash disk&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An user area is created on the flash disk for more permanent files at&lt;br /&gt;
 /rhome&lt;br /&gt;
Please make a home directory using your initials or project number. e.g. like:&lt;br /&gt;
 /rhome/ex39&lt;br /&gt;
There is limited space on the flash disk - p.t. approx 150 MByte.&lt;br /&gt;
(Check disk space with the &#039;df&#039; command).&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=184</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Main_Page&amp;diff=184"/>
		<updated>2008-09-29T10:44:49Z</updated>

		<summary type="html">&lt;p&gt;Lvm: /* Robots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wellcome to the wiki pages of the Robot Systems Engineering (RSE) group at Institute for Automation, DTU Electical engineering.&lt;br /&gt;
&lt;br /&gt;
These pages will contain updated information on RSE projects and other issued related to robotics research at the Institute for Automation.&lt;br /&gt;
&lt;br /&gt;
= RSE Projects = &lt;br /&gt;
[[AU Robot Servers]], download and documentation&lt;br /&gt;
&lt;br /&gt;
[[RHD]] Robot Hardware Daemon&lt;br /&gt;
&lt;br /&gt;
[[Robot sensor modules]], description and documentation&lt;br /&gt;
&lt;br /&gt;
[[Simulation]], description of simulation environments&lt;br /&gt;
&lt;br /&gt;
= Robots =&lt;br /&gt;
&lt;br /&gt;
[[SMR]] (Small Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
[[MMR]] (Medium Mobile Robot)&lt;br /&gt;
&lt;br /&gt;
= How-to documentation =&lt;br /&gt;
&lt;br /&gt;
[[NTP howto]] time-sync 2 computers&lt;br /&gt;
&lt;br /&gt;
Using the [[RSE SVN]] repository&lt;br /&gt;
&lt;br /&gt;
SMR [[Wiring and assembly]]&lt;br /&gt;
&lt;br /&gt;
SMR [[Flash disk cloning]]&lt;br /&gt;
&lt;br /&gt;
[[RoboCup]]&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Ucamserver&amp;diff=183</id>
		<title>Ucamserver</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Ucamserver&amp;diff=183"/>
		<updated>2008-09-29T10:40:10Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; Camera server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Intended for image handling functions.&lt;br /&gt;
&lt;br /&gt;
[[Image:cam-server2.png]]&lt;br /&gt;
&lt;br /&gt;
The following camera-related plug-ins are available:&lt;br /&gt;
* Camera control (camget, camset etc)&lt;br /&gt;
* Image access (imageget, imageset) access to fresh images.&lt;br /&gt;
* Image pool handling (poolget poollist etc.) pool of imege buffers with image handling functionality.&lt;br /&gt;
* Guidemark detection (gmkget) giudemark 3D pose and code&lt;br /&gt;
* Road outline plugin (pathget) polygon with road outline matching a seed area.&lt;br /&gt;
* Sample plugin (center of gravity)&lt;br /&gt;
&lt;br /&gt;
The following cameras are supported:&lt;br /&gt;
* all USB cameras supported by the pwc (Philips Web Cam) driver, e.g.&lt;br /&gt;
* - Philips 740K, 840K, &lt;br /&gt;
* - Logitech Orbit&lt;br /&gt;
* A few frame-grapper cards (I have not tried for a long time)&lt;br /&gt;
* IEEE1394 DCI-standard&lt;br /&gt;
* IEEE1394 DVI - not supported&lt;br /&gt;
* palantir streaming video - not supported p.t.&lt;br /&gt;
&lt;br /&gt;
To run the server&lt;br /&gt;
&lt;br /&gt;
 ./ucamserver&lt;br /&gt;
&lt;br /&gt;
It then shows a command prompt:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor images and results use the monitoring client UCLIENT or AUCLIENT (or the server console directly - or as a last resort TELNET)&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; module list&lt;br /&gt;
&lt;br /&gt;
For further command keywords, and then try the command keyword followed by &#039;help&#039;, like:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; camset help&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=File:Cam-server2.png&amp;diff=182</id>
		<title>File:Cam-server2.png</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=File:Cam-server2.png&amp;diff=182"/>
		<updated>2008-09-29T10:39:41Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
	<entry>
		<id>https://rsewiki.electro.dtu.dk/index.php?title=Ucamserver&amp;diff=181</id>
		<title>Ucamserver</title>
		<link rel="alternate" type="text/html" href="https://rsewiki.electro.dtu.dk/index.php?title=Ucamserver&amp;diff=181"/>
		<updated>2008-09-29T10:38:30Z</updated>

		<summary type="html">&lt;p&gt;Lvm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; Camera server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Intended for image handling functions.&lt;br /&gt;
&lt;br /&gt;
[http://www.iau.dtu.dk/~jca/rac/cam-server2.png]&lt;br /&gt;
[[Image:cam-server2.png]]&lt;br /&gt;
&lt;br /&gt;
The following camera-related plug-ins are available:&lt;br /&gt;
* Camera control (camget, camset etc)&lt;br /&gt;
* Image access (imageget, imageset) access to fresh images.&lt;br /&gt;
* Image pool handling (poolget poollist etc.) pool of imege buffers with image handling functionality.&lt;br /&gt;
* Guidemark detection (gmkget) giudemark 3D pose and code&lt;br /&gt;
* Road outline plugin (pathget) polygon with road outline matching a seed area.&lt;br /&gt;
* Sample plugin (center of gravity)&lt;br /&gt;
&lt;br /&gt;
The following cameras are supported:&lt;br /&gt;
* all USB cameras supported by the pwc (Philips Web Cam) driver, e.g.&lt;br /&gt;
* - Philips 740K, 840K, &lt;br /&gt;
* - Logitech Orbit&lt;br /&gt;
* A few frame-grapper cards (I have not tried for a long time)&lt;br /&gt;
* IEEE1394 DCI-standard&lt;br /&gt;
* IEEE1394 DVI - not supported&lt;br /&gt;
* palantir streaming video - not supported p.t.&lt;br /&gt;
&lt;br /&gt;
To run the server&lt;br /&gt;
&lt;br /&gt;
 ./ucamserver&lt;br /&gt;
&lt;br /&gt;
It then shows a command prompt:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor images and results use the monitoring client UCLIENT or AUCLIENT (or the server console directly - or as a last resort TELNET)&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; module list&lt;br /&gt;
&lt;br /&gt;
For further command keywords, and then try the command keyword followed by &#039;help&#039;, like:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt; camset help&lt;/div&gt;</summary>
		<author><name>Lvm</name></author>
	</entry>
</feed>