Ulmsserver: Difference between revisions
Line 35: | Line 35: | ||
The filename will be ''laser_0.log''. | The filename will be ''laser_0.log''. | ||
On top of this some modules may be needed to load a laser scanner based localizer, e.g.: | |||
module load=v360 | |||
module load=mapPose | |||
var mappose.estimateVel=true | |||
# obstacle handling (groups fixed and dynamic obst) | |||
module load="ulmspassable.so.0" | |||
# configure obstacle handling | |||
var pass.minObstDist = 0.05; | |||
var obst.outdoormode=0 | |||
var obst.obstGrpMaxDistance=0.025 | |||
var obst.obstGrpMaxTime=0.01 | |||
var obst.obstmerge=false | |||
var obst.obstCogMerge=true | |||
var obst.cogMergeLimit=2.0 | |||
var obst.singleMerge=true | |||
var obst.singleLimit = 0.03 | |||
# | |||
# display polygons m.v. | |||
module load="aupoly.so.0" | |||
# mapped lines etc. | |||
module load="mapbase.so.0" | |||
# | |||
# load module to utilize mapped obstacles | |||
module load="aumapobst.so.0" | |||
var mapobst.marginSolidFactor=0.3 | |||
var mapobst.marginFluffyFactor = 1.1 | |||
var mapobst.front=7 | |||
# | |||
# laser based dynamic obstacles | |||
module load="aulobst.so.0" | |||
var lobst.minSplitCnt=2 | |||
; splitDist defines minimum opening | |||
var lobst.splitDist=0.15 | |||
var lobst.maxLineIterations=25 | |||
var lobst.maxSamples=80 | |||
var lobst.noobst="0.33 0.17 -0.2 -0.17 | |||
var lobst.lineeatdist=0.03 | |||
var lobst.maxtolinedist=0.04 | |||
# | |||
# localize based on lines and laserdata | |||
module load="aulocalize.so.0" | |||
setInitCov cx=0.09 cy=0.09 cth=0.09 | |||
setInitPose x=13.0 y=6.1 th=-1.57 | |||
var localize.wheelBase=0.46 | |||
var localize.sdmRight=0.11 | |||
var localize.sdmLeft=0.11 | |||
#; | |||
# processing of laserdata - into 360 degree scanner generation | |||
scanpush i=1 cmd="v360 update" | |||
# make obstacles 360 deg | |||
v360push i=2 cmd="lobst make obst silent" | |||
# localize about once a second | |||
v360push i=10 cmd="localize silent=1" | |||
# update fixed obstacles regularly | |||
push t=3 n=10 cmd="obst getfrommap makeonly" | |||
# load map lines into localizer | |||
# mapobst map2localize - moved to bygn326.rule | |||
See the section below or the on-line help for description of the individual plugins. | |||
====ulmsserver for HAKO tractor==== | ====ulmsserver for HAKO tractor==== |
Revision as of 14:26, 20 October 2010
Introduction
The laser scanner server (ulmsserver) has a number of statically linked modules for operation as a laser scanner server. It should be used primarily for plug-ins that are related to laser scanner data, but is able to handle any plugin (except some specific camera aware plugins that need the camera server environment).
Configurations
Typical configuration could be:
ulmsserver.ini for MRC script
server datapath="/vhome/jca/logfiles" server port=24919 # for laser devices module load='laserpool' # handling of (server-global) configuration values module load='var' # load coordinate system plug-in module load=odoPose # make logfile for odometry updates (odoPose.log in datapath) odopose log # Configure laser scanner devices scanset devtype='urg' devname="/dev/ttyACM0" scanset def=urg scanset x=0.22 y=0.0 z=0.05 scanset width=180 scanset logOpen scanset log=1
This loads the needed modules for laserscanner and odometry support Logfiles are placed in the path specified by datapath
The data from the URG laserscanner is saved in a logfile (the last 2 lines). The filename will be laser_0.log.
On top of this some modules may be needed to load a laser scanner based localizer, e.g.:
module load=v360 module load=mapPose var mappose.estimateVel=true # obstacle handling (groups fixed and dynamic obst) module load="ulmspassable.so.0" # configure obstacle handling var pass.minObstDist = 0.05; var obst.outdoormode=0 var obst.obstGrpMaxDistance=0.025 var obst.obstGrpMaxTime=0.01 var obst.obstmerge=false var obst.obstCogMerge=true var obst.cogMergeLimit=2.0 var obst.singleMerge=true var obst.singleLimit = 0.03 # # display polygons m.v. module load="aupoly.so.0" # mapped lines etc. module load="mapbase.so.0" # # load module to utilize mapped obstacles module load="aumapobst.so.0" var mapobst.marginSolidFactor=0.3 var mapobst.marginFluffyFactor = 1.1 var mapobst.front=7 # # laser based dynamic obstacles module load="aulobst.so.0" var lobst.minSplitCnt=2 ; splitDist defines minimum opening var lobst.splitDist=0.15 var lobst.maxLineIterations=25 var lobst.maxSamples=80 var lobst.noobst="0.33 0.17 -0.2 -0.17 var lobst.lineeatdist=0.03 var lobst.maxtolinedist=0.04 # # localize based on lines and laserdata module load="aulocalize.so.0" setInitCov cx=0.09 cy=0.09 cth=0.09 setInitPose x=13.0 y=6.1 th=-1.57 var localize.wheelBase=0.46 var localize.sdmRight=0.11 var localize.sdmLeft=0.11 #; # processing of laserdata - into 360 degree scanner generation scanpush i=1 cmd="v360 update" # make obstacles 360 deg v360push i=2 cmd="lobst make obst silent" # localize about once a second v360push i=10 cmd="localize silent=1" # update fixed obstacles regularly push t=3 n=10 cmd="obst getfrommap makeonly" # load map lines into localizer # mapobst map2localize - moved to bygn326.rule
See the section below or the on-line help for description of the individual plugins.
ulmsserver for HAKO tractor
server datapath="/rhome/demo/log_laser" server serverlog # module load='laserpool' module load='var' module load='imagepool' module load='v360' module load=odoPose module load=utmPose module load=mapPose var mappose.estimateVel=true mapPose log # scanset devtype='sick' devname="/dev/ttyUSB0" scanset def=sick scanset res=0.5 # set scanner position in robot coordinates scanset x=2.07 y=0.0 z=0.52 scanset mirror=false scanset logOpen scanset log=4
laser scan logfile
Filename for laser 0 is
laser_0.log
The file looks like this
1216815130.160302 25905 0.5 -90 361 5.789 5.782 5.806 5.776 7.619 7.810 7.931 5.803 5.793 ... 1216815130.213813 25907 0.5 -90 361 5.751 5.767 5.777 5.774 5.785 5.784 7.854 7.370 5.795 ... 1216815130.267325 25909 0.5 -90 361 7.628 8.130 5.770 5.780 5.755 5.787 5.802 5.793 7.828 ...
The fields are:
1 Timestamp (linux timestamp, valid to about 20ms) 2 scan number (e.g. 25909), 3 resolution (here 0.5 degree), 4 first angle (e.g. -90 degree), 5 number of measurements (e.g. 361), 6 first range (5.789 in meters), 7 second range (5.782) 8 ... and so forth.