- The WindowsAPI gives direct access to the new Windows 7 libraries, including Windows Imaging Component (WIC) APIs. It seems that the new GDI libraries are 30% faster. To be seen if the new GDI libraries are part of this new WindowsAPI code pack.
- Learning of optimal search strategies (in progress)
- Coupling with Nomad (accomplished, to be tested)
- 3D user-interface (open)
- Traversibility estimate from stereo vision (open)
- 3D-Mapping (open
- Joint Rescue Forces list of tasks
- small tasks
- Reconnect when in range
- Use status message to select view.
Started Labbook 2013
18 December, 2012
- Downloaded GeForce 310.70 Driver, which solves an issue with a non-starting Unreal Tournament III. Should check if I can run UDK 64bits on nb-udk.
- Without this driver, the script DutchOpen2012-Final.bat stops directly after Init: Memory total. The map IranOpen2012-SemiOpenNoSmoke (32bits, d3d9) works. After I installed the 310.70 Driver, I could start DutchOpen2012-Final.bat script (64bits, d3d11).
27 November, 2012
- The P3-AT is accompanied with open source software (ARIA) with a free simulator (MobileSim) based on Player/Stage/Gazebo.
15 November, 2012
8 November, 2012
- I still could start the editor of 2012-07 on nb-udk, UDKLift did nothing from commandline. Removed USARRadar as ModEditPackage from DefaultEngineUDK.ini. Still no map starts. UnrealFrontend works. editor script still works, also when the path is only Windows\System32 or even ..
- Tried a simple script, based on NightAndDay map. Tried option -nosound, no success.
- Found the problem, when I start DutchOpenFinal with Win32 and no -d3d11. My GeForce GT 525M supports DirectX 11, the version of the Nvidia drivers is 268.30.
- Downloaded version 306.97 of the Nvidia drivers. DutchOpenFinal works with this version, but this is initially because the Intel onboard graphics do not support DirectX 11 (so the game falls back to DirectX 9). Selected UDK.exe, used a right mouse click, selected execute with Graphical Processor and switched Default GPU from Automatic to GeoForce. Now DutchOpenFinal also works for Win64 and option -d3d11.
7 November, 2012
- Tried to start DutchOpenFinal as Robocup2012-Preliminary3 on nb-udk. Both failed.
- Downloaded version 2012-7 from UDK, to try a fresh install. Install failed on unrecognized member DrawTextureBlended in MultiView.uc (line 31).
- Method DrawTextureBlended is still in Reference Guide. Replaced it for DrawTexture (which still exists).
- Simulation still crashes (checked dump, fails on ntdll.dll which is called by nvumdshimx.dll). Could run DutchOpenFinal without problems on pc-udk, so it seems to a library problem. Should try it with a minimal PATH-environment. Problems seems to be an equivalent problem as during the Dutch Open. The editor started without problem for the new 2012-7 version.
18 October, 2012
- Received a map to test the AirRobot from Hamburg:
10 October, 2012
- The program of the Search & Rescue workshop is now online.
9 October, 2012
26 September, 2012
17 September, 2012
- Starting testing MRL's modifications on the ComInterface in RoboCup2012-tryout map, but I get the message port 50000 "Adress already in use.". Try a restart.
- That solved the issue. In addition, the localhost.cfg still used port 5000.
- Tested DistanceOnly with a cutoff of 20m (no connection) and 42m (initial connection with strength (-90.8 dBm). At the end of the corridor I lost connection (although I was able to drive around that corner a moment before).
- Also tested with Obstacles. Had to reduce the attenuation to 2 dBi and to increase the distance to 120m. Was able to drive a few meter before I was cut off.
2 September, 2012
- Removed installation of Visual Studio 11 Developer Preview.
- Removed installation of Visual Studio 2012 Test Professional RC from ISO in Downloads.
- Installed Visual Studio 2012, but still VS complains that the projects (both Visual Basic and C#) cannot be loaded because the product is not installed. The solution is loaded without problems in VS2010.
- Read the Tech Report about LCM. Lcm was not only used by the University of Michigan, but also by MIT in the DARPA challenge. It is also applied for water and air vehicles.
30 August, 2012
- Richard has finished his Project Report.
- In the April Robotics Toolkit HOWTO is indicated that there is a dependence on JOGL: OpenGL interface for Java. Maybe this solves the jgl.jar issue. The HOWTO also warns that the jcam image acquisition library is Linux only.
- Also Okke has finished his Project Report.
29 August, 2012
- Tried to play the logfiles of Richard, but the LaserPlugin shows no scans.
- Tried to record my own progress. Messages are sent and received. Put breakpoint on DRIVE commands. They are sent, but the P3AT is not moving:
- Richard listens to channel moving, but he also could have listened to gamepad, because the same keys are recorded (left/right on axis and up/down on axis).
- If I inspect the logfile, the values of laser are in the range of 190 to 480, while the values of UsarSim are in the order of 1.9 to 4.8. Seems that Richard is measuring millimeters instead of meters.
- Modified the C#-code to listen to gamepad. Unfortunatelly, it listen to the back key, but if I do nothing the robot goes forward. The spy is aware of the changes!
- Changed the thresholds to 0.5, now the P3AT listens correctly to the keyboard (via gamepad channel). In the mean time the P3AT was parked at the end of the corridor, waiting till the spy catches up:
23 August, 2012
- Made makefile-libgen readable for nmake. Still, the essential call is to libgen.exe, and this program is missing a library.
- libgen was needed because FeatureTest was missing the definition of the datatypes laser_t and pose_t. Copied the java and class files from linux.
- FeatureTest compiles, but is now complaining about missing jgl in java.library.path:
- This native library can in Linux be found in april/lib/libjgl.so. Equivalently, in Windows I need the file jgl.dll. Downloaded MesaLib-8.0.4. Seems that I have to use MinGW to compile it and OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL are created. Time to stop, if I continue I should try to publish on udpm instead of locally (and use the visualisation from a linux-machine). Alternative is to record on my Windows machine a logfile and play it back on a linux machine. Interesting are the two SpyPlugins lcm\LaserPlugin and lcm\VideoPlugin. Yet, lcm-logger.exe also depends on libglib-2.0-0.dll. Found this library in \naoqi-sdk-1.10.52-windows-vs2008\bin, so now my lcm executables work.
- java -ea -server lcm.spy.Spy had first some problem with an old jgl.jar I had downloaded. After that, spy works (and sees the laser and video-plugin). Only, the sigleton publish doesn't show up:
- Combining the spy with lcm-logplayer.exe, gives values (and you could both inspect the pose_t and laser_t). Without an lcmurl, Spy starts with new LCM(). After that, it does an subscribeAll(new MySubscriber()), which is a class inside the class (with only one method messageReceived).
- Changed my program to publish on a real url. Unfortunatelly, I get a conflict with my IPv6 address. Using my IPv6 address doesn't work, because this contains many ':', so the port is no longer visible.
- Browsed through the different ip-adresses until I found a IPv4 address.
inetAddr = Dns.GetHostEntry(addrport).AddressList;
IPHostEntry host = Dns.GetHostEntry(addrport);
foreach (IPAddress ip in host.AddressList)
if (ip.IsIPv6LinkLocal == false)
inetAddr = ip;
Still, sock.JoinMulticastGroup(inetAddr); crashes because the scope-id threw an exception.
- Tried it again with a singleton. Now the spy sees my published data:
22 August, 2012
- Made a program which publishes the laserscans of a P3AT in the RoboCup2012-tryout to a lcm-channel. Saved a version in backup/RangeScanner.
- I will also try to publish pose_t messages, because FeatureTest need both messages.
- Again, did the conversion on linux: pose_t.cs. The orientation is not given in roll, pitch, yaw, but in a quaternion. LinAlg.java contains the conversion function. Conversion from java to C# was only 5min work. Program is now publishing both pose- and laser-measurements from UsarSim.
- With the three jar-files from the Linux system copied to Windows (and added to classpath) I could start the FeatureTest. Unfortunatelly, nothing is shown in the three windows (maybe because there was a problem with the EOF of the logfile).
- I will look if I also can compile under Windows (installed Ant as binary download). Ant complains that it can not find tools.jar. Copied tools.jar from java6 to jre7/lib. Still, it ant cannot find make. Changed in xbuild.xml make into nmake. ant still fails to lcmgen (syntax error in Makefile.lcmgen) but command ant build-jar succesfully generates a new april.jar.
- Modified FeatureTest.java so that it subscribes to the published channels. Instead of seperate Sensor-classes, I should give the FeatureTest class a messageReceived method.
21 August, 2012
- I don't have LineParser which use the tag LIDAR, so it is not clear which log-format April is using.
- FeatureTest crashes because the logfile is not read at all. The function is imported from lcm.logging. This is c-code with a java-wrapper. Will first inspect the lcm-logplayer-gui. Documentation should be available at googlecode.com. The logfile format is lcm-specific. The format is binary, which contains an event-id, timestamp, channel-id and data.
- The Ford dataset (Urban DARPA contribution of UMich) contains both LCM and MATLAB datafiles. The configuration of the Ford vehicle is given in lr3.cfg. An example5-sick.c is given to inspect logfile. Inspecting the LCM/LC-01.log gave BROOM_LEFT and BROOM_RIGHT. example4-velodyne 60 120 gives an segmentation fault. example3-gps also works. example2-images showns nothing. example1-poses works.
- FeatureTest could read LCM/LC-01.log. It found 5071 BROOM laserscans. Result are 3 windows with sliders and control-buttons. Points and Lines are visible, Countours not (flash up when I drag through scans 0-5071).
- Could write a Carmen to LCM converter.
- Also downloaded lcm on nb-udk. The lcm-dotNet compiles without problems, the WinSpecific/LCM.sln was converted from 2005 to 2008. Only one of the ten projects compiles. Problem is glib.h: this gnome lib doesn't seem very portable.
- Found Windows binary of glib. Solution refers already to GLIB_PATH, so only had to add this directory to SystemVariables (and restart VisualStudio).
- LCM works with LCM_DEFAULT_URL, which is default set on udpm://188.8.131.52:7667. For instance the lcm-logplayer reads a logfile and publishes this on the url specified by the -l option.
- Tried to publish the Ford logfile with lcm-logplayer --lcm-url=udpm://192.168.1.82:7667 LCM/LCM-01.log, but got LCM couldn't be created (setsockopt IP_ADD_MEMBERSHIP: invalid argument error). Should try the lcm-logplayer on Windows.
- In principal, I should be able to connect to USARSIM, spawn a robot and publish all information on an lcm-channel.
- Connnected the lcm-logplayer-gui to LCM/LCM-01.log. example2-images searches CAM_THUMB, but those are not available in the log. example4-velodyne searches for VELODYNE, but only RGB_VELODYNE is available:
The logs in the top directory are not readable for lcm-logplayer. The file in VELODYNE is, but gives no response. The IMAGE directory only contains ppm-files.
- Checked the csharp-examples. example_t_demo works: transmit sends one message, received by example_t_display. tcp_provider_demo.exe does SEND: TEST and than crashes. The temperature_t_demo constantly publishes its information (also reccedived by example_t_display: RECV: HALLWAY_TEMPERATURE.
- viewer/ViewLaser.java subscribes to LCM for this data. Should be called with java april.viewer.Viewer --config. The lr3.cfg doesn't work. Nothing in the java code publishes anything!
- The format of the messages is available in april/lcmtypes. I will try to publish laser_t messages after connecting to USARSIm. Will use lcmgen --csharp to generate laser_t.cs.
- On Windows, lcm-gen didn't work because libgen-2.0-0.dll was not installed. Copying libgen-2.0.dll.a to libgen-2.0-0.dll gave an error (invalid file type). Could correct library in WinSpecific project, but instead did the conversion on the linux-machine: laser_t.cs. Was able to constantly transmit laser-data (range of 25m + 5m noise).
20 August, 2012
- Tried to reproduce Ricard Rozeboom's work.
- Reconnected abeel via DNT-server. Performed sudo apt-get install emacs, which failed initially because archives were not found. Performing the suggested sudo apt-get update solved this issue.
- Following the instructions from April. Only one package could not be found (autopoint). Seems that autopoint is a program part of the gettext package (which was already installed).
- Installation went well, although /usr/share/java/gluegen-rt.jar is not available. Both test commands fails. The java april.vis.VisTest gives a Segmentation fault; the java april.jcam.JCamView gives No image sources found or specified on command line.
- Both lcm and april are well maintained: last update was 15 August 2012.
- Should try again with a GamePad and Webcam connected to the system. With the GamePad java april.vis.VisTest no longer crashes. Javax.imageio complains about no input, so I probably also need a webcam.
- Attached the Logitech webcam used with the Nomad. I get images with cheese and luvcview (as suggested by Ubunty Community), but still same imageio error.
- Gluegen-rt is often mentioned together with Jogl. I found a page for gluegen. Downloaded the archive directly from download.java.net, but gluegen seems to be related with accessing C-code (and not directly to cameras). After installing gluegen-rt.jar I still have the same imageuio error.
- This is actually an bug in VisTest. One of the test reads an earth.png from a home-directory. Replaced it with /tmp/earth.png (and copied one such image there). Now I have no warnings anymore (although VisTest seems to be quite basic).
- Tried java april.jcam.JCamView /dev/video0. JCamView givew now a window, but complains that it could not open /dev/video0. Cheese uses /dev/video0 (and works for both the LogiTech and Sweex camera). Seems that JCamView works with a webcam (and needs a url).
- Tried to make a webcam of my linux computer, but I couldn't find a good program. webcamserver-0.50 is old (2007) and couldn't find a palette, package webcam publishes images on ftp (so not a stream), ffserver / ffmpeg publishes an stream from a movie (but not from a camera), the accompany ceiling camera couldn't be reached (wrong ip-domain?), couldn't contact Nao's webcam on port 9559.
- Looked further to April-package. There are two configuration files (for Intel and Victoria datasets).
- Succesfully started DynanuxelGUI wiht command java april.dynamixel.DynamixelGUI -d sim.
- Tried to call java april.laser.FeatureTest /tmp/intel.script, but the logfile from Radish contains POS and LASER-RANGE, while FeatureTeste expects POSE and LIDAR. Also looked at Cyrill's dataset (intel.log in Carmen format). Yet, here the file contains ODOM and FLASER. The victoria dataset contains just numbers (no parameter names).
- Looked at a dataset from Umich. According to the Readme, the Applanix is a INS (POS-LV 420). Unfortunatelly, this are matlab files and not ascii files.
- Looked at all java-files which contained a main:
- GamePadDriver (seems to work): -c LCM channel to send on
- GamePad (also seems to work)
- GetOpt (seems to work): default options --file and --port
- GridMap (gives 16 number pairs)
- KeyboardGamepad (same output as GamePadDriver)
- ParameterGUI (works)
- SpaceNavigatorDemo (installed drivers from 3Dconnexion, installed missing libmotif3_2.2.3-4 manually with dpkg -i. Xcube demo works (after starting driver with sudo /etc/3DxWare/daemon/3dxsrv -d usb, but SpaceNavigatorDemo fails on missing /dev/spacenav (should try again after restart)).
- SpaceNavigator (probably same functionality as GamePadDriver).
- Viewer (asks for config file APRIL_CONFIG. In both config files viewobjects are missing).
- VzSphere (missing input file (earth.jpg again?))
- WTest (working)
- Should continue with FeatureTest
19 July, 2012
- Tested U3v3 from Sevastian. Connection to the ImageServers is now correctly made with RAW images. Repeated test for JPEG images (high quality). Also works fine:
- Yet, the U3v3 uses a lot of resources (100% on 4 cores)
- Read ACM article about HTML5 revolution, but the article wasn't that informative.
3 July, 2012
- The license for Visual Studio 2011 was passed, so I upgraded to Visual Studio 2012 RC (which is installed in the same directory 'Microsoft Visual Studio 11.0').
- Received a warning that the PerfWatson, VS Logging, Code Analysis, Debugging, Office Client, Component Enumeration, Designer and C++ Resource Editor Package were not loaded correctly (more details in AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.xml).
- Agent.vbproj is not supported by this version of the application! (same for csproj files!).
- Received the WebSocketServer code from Sevaztian, and finally could make a connection (changing the lower-left buttons from red to green):
15 June, 2012
- Looked if I could easily make a UsarSim logfile when running a Marulan logfile, but this is not trivial. First, only the LiveDriver has a Log-function. Secondly, the line is not interpreted by the LogDriver, but by the LineParser. Yet, those function directly convert it to a message. So, to do it nicely, the message should be converted back to a string again (at the Agent level).
14 June, 2012
- Downloaded Dataset 35 from Marulan (DynamicDayDamClear). Displaying the RadarSpectrum seems not implemented yet (many bugs, seems that datastructures are used before initialisation). Skipped the spectrum. Tried to run with fixed (after 5 minutes the robot moves forward) and none (robot moves side and backward?). Still, radar is only visible behind the robot. (wishlist: time of logfile instead of competition-time). After 10 minute the radar seems to appear in front of the robot:
- I used the LaserHorizontal (which is mounted upside down. Maybe I should have used LaserPort or LaserStarPost, because it seems that the RadarRange and LaserHorizontal are mirrored. For Dataset33 I used LaserStarboard (and Deadreckoning on GroundTruth). The Starboard laser doesn't looks to the ground, but doesn't found enough features to localize (SLAM return 0,0,0 and NANs). Deadreackoning on GroundTruth gave errors.
13 June, 2012
- Added the +ModEditPackage=USARRadar to DefaultEngineUDK.ini to compile Richard's new code.
- Couldn't compile the experimental branch, because al.exe was not in available in Windows8-sdk. Set in systemvariables SDKToolPath to C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64.
- Downloaded LightFX SDK on nb-udk (version A02 1.1.1, old link was broken), which should contain 64bits version of GamingSDK.dll. Now it works.
- Difficulties to get the different projects build. After some switching of Platform to x64 and rebuilds the ThirdParty now works. Math fails on the required executable "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\x64\MSBuildTaskHost.exe" does not exists. (115 errors left). Solved the issue by going from .Net Framework 2 to 4.
- Got UsarCommander working. The first spawn was too high:
No map was shown, because there was a collision between uppercase key and lowercase name.
- Solved the upper- lowercase issue, although the map was rather small. It increased size when I drove forwards and extended beyond 4m when I saw the folliage:
- Increased the MaxRange in UDKUsar.ini to 20m and reduced the MaxRange in UsarCommander to 19m. Now I get a nice map, where I can look through the folliage:
Yet, I expect that I see a filled circle, not only the front. Should test my expectation on
Marulan dataset (next to lake).
12 June, 2012
29 May, 2012
24 May, 2012
- Downloaded 2012-05 version of UDK and enabled the Advanced Environment Color in my new map. Didn't really saw the difference, although it seems to be a good map for this option. The option is not documented (yet). Did the same for DutchOpen2012-Final. Added third PlayerStart (Robot2). Used an AirRobot. StartPose is maybe a little too low, because the AirRobot can look through the floor (default setting NearPlane=70?!). The CameraSensor complains about EMPTY Bitmap (direct connection). eWally in RoboCupScore moves when I steer the AirRobot. Should add some victims.
- Reduced the NearPlane to 35. Could choose between three options: Add SkeletalMesh:VictimPackage.Mesh.GenericFemale, Add SkeletalMeshCinematic:VictimPackage.Mesh.GenericFemale and Add SkeletalMeshMAT:VictimPackage.Mesh.GenericFemale. Chose SkeletalMeshCinematic. None of them works. Also adding an AnimSet or a GenericFemale_Physics didn't work.
- Followed Chaim's Guide. Selected Actor>Uncategorized>FemaleVictim. The FemaleVictim is much too large. Changed the Physics from PHYS_NONE to PHYS_SoftBody. The Actor has already a Mesh>SkeletalMeshComponent>AnimTree, but the Animations is set on NONE. Couldn't change the animation. Enabled SoftBodySimulation. Tried different scales. Setting the DrawingScale on 0.25 helped a lot. DrawingScale 0.3 was even better.
- I activated the AnimTree when Relevant. Result is a breading victim, only I shouldn't have rotated here (she standing on her head, instead of lying on her bback). Could activate physics (instead of animation).
19 May, 2012
- Direct connection with Kenaf works, but this is maybe due to the empty bitmaps I receive. Check format of images in DefaultUsar.ini. Otherwise check if it works with indirect connection. Format was 0, legacy mode was false. Changed to 3 and true. Now it works (remove commandline (update backgroundimage). Laser scan gives warning at start position, which couldn't be overruled because next warnig comes directly.
- Check weight Kenaf and the reaction on the flipper commands.
- The base has weight 10, the flippers 1, the large wheels 0.65, the small wheels 0.35 (total 24 kg, according to config message).
- Couldn't find multidrive in unreal code.
16 May, 2012
- In my new map, I followed Sander's suggestion, and changed the settings of the Collision StaticMesh (481) from BlockAll to NoCollision.
29 April, 2012
- Corrected the surfaces with default textures and added a plate in front of the door into the building with a maze. No time to test if this was enough, although Kaveh later managed to enter this room.
- Starting testing with 7 robots (4 Kenaf and 3 AirRobots), but not only my own GUI was slow, also USARSim had only 2.17 FPS.
- Without robots USARSim still had problems (12 FPS). Tried it once with 5 robots, but didn't trust to run with only 3.77 FPS.
- Decided to go with only 2 AirRobots and 1 Kenaf. The Kenaf was unstable (flipping again), so I concentrated on the AirRobots. Later, I found out that I didn't apply the kenaf-patch to this server. The AirRobot could easily land on the balcony, although I couldn't switch the rotors off. I had more difficulty with the other AirRobot, because I couldn't control the Pitch to check for trees below me. Just in time I found my second victim:
28 April, 2012
- Analysed the timings further. Between Operator and Proxy PoseUpdate 10ms. The AgentLayer update cost 50ms (but is done 3x).
- Found the localization bug, the InsPose was not updated with the latest data (no idea why). Used the Ins.Data directly.
- Still, the initialization is done twice, the second time with a wrong value. A patch could be to increase the skip rate for the first run.
- Did a run with three robots and image quality 2. Each used 2Gb of memory. Had difficulty to get out of the spawning room (Kaveh spawned in the corridor). Found no victims (passed one in a room to the left with robot1):
- Found the bug (Ins.Z overwriting CurPose.Y during initialization). Tested and solved some minor issues (increased turning speed AirRobot, fixed camera-view ordering for final).
Did some test runs (should add an land/off-command for the AirRobot). Ready for the final.
27 April, 2012
Competition Day 2
- Committed previous code, and found that made a mistake with a ReadersLock in ManifoldSlam.
- Corrected bug and did additional tests. It seems that there is an error in the sign of the rotation. Should do a test if this is solved with Pose2D.ToGlobal.
- Added checks on the Localization. The queue of laserscans has only one member. Every 100ms a scan is analysed, and the result is available in 5ms.
- The pose update is send to the operator, but I should check when this message is received.
- I left one LocalSmoke in the IranOpen2012withSmoke map. With all fires I have 15 FPS (two robots), with 3 fires 22 FPS and 1 fire 24 fps. With three robots 22 FPS, four robots 13 FPS.
Luckily enough both Kaveh and UvArescue decided to run with three robots.
- Kaveh found one victim, I had difficulty to pass through three doors (time out in last room before victim). Kaveh had the same problem, so this is only fair. Had still 6.5 Gb memory with three robots and JPEG quality 3:
Notice that I extended the display of my labtop with a 24" display in portrait mode, as earlier done by the AOJRF team in Istanbul.
- Analysed the timings. It takes 230ms between the request and received of a camera image (quality 4). It takes 14ms after the received to display the image. So 4Hz at maximum (one robot).
26 April, 2012
Competition Day 1
- Made the modification of storing the Pose3D instead of the Pose2D.
- Code seems to work, although it gives some orientation errors with the P3AT and major orientation errors with the Kenaf. Pitch/Roll information is still not displayed at Kenaf:
- Run the competition with last nights code. There is still a memory leak, although the 6Gb was only reached after 20 minutes (with two robots).
The updates kept coming, although not always as quick. Had some difficulties to pass doors, but was able to park my two robots next to a victim (without touching them, I hope):
- Kaveh showed up. The labtop with the code had problems with the harddisk, but they were able to fix it to run at 18u. They used 4 P3ATs, Kaveh saw two victims, but were not able to enter the rooms.
- Looking for robot1-positions.log. In UT2004 this located in KRobot.uc. In UDK I couldn't find the positions.log.
- Should activate bLogVictimRobotCol in ini-file. No code in BotDeathMatch for this logging. UT2004 used VicColActor.uc to count hits.
- In 2011 I had positions.log, so UT3 should have this functionality. In UT3 it was located in USARVehicle.uc.
- Did a mid-night testrun (4.5 Gb after 20min) after fixing a bug and adding some functionality to the matrix4 library:
- Seems the robot gives no response on SyncCommitMaster. Add a print to all PoseUpdates received.
- There seems a whole period without Finished Localization. Print the number of laserscan observations in queue. The angles seem OK (although the map is meshed up):
25 April, 2012
- When playing at 1080i, 1920x1080 (29Hz), the signal can be send to the monitors in the theatre, where they are converted in 3D.
- Busy with the Kenaf. The Hokuyo has a slightly different name: HokuyoURG04LX. Corrected in ini-file.
- Encoder is differently implemented in UDK. One sensor is mounted on wheels (if they are called W1-W9). Sander will remove this restriction.
- Found out that the problem with the Kenaf was due to the Outdoor world. In the ImprovedTestWord and IranOpen2012 semi the Kenaf worked fine.
- The problem is twofold. The specified speed is rad/s, but this speed is directly given to the PhysX engine, without conversion. The MaxSpeed is much too high.
This is even worse because the MaxForce was way too high (50000). Sander will commit changes.
- Corrected two flags in Envy_Effects package (UDKGame/Content/UT3/Effects).
- Drove with the Kenaf throught the world. Was caught by the river (although still operational).
- Laserscan is limited in ini file to 4m. Reduced in UsarCommander from 5.4m to 3.8m. Seems to be 9m at first sight, but 30m overall (couldn't find this in the code, which uses MaxRange). Maybe MaxRange is still in UU? UDK crashed on end of the run (without errormessage).
- Added IMU to ini file. No updates (IMU not updated via relay). Kenaf crashed on same location (trying to get out of river around 14,1)
- UDKusarsim crasht on the same place with P3AT.
- Constrained warning behind pose (done, tested, still not visible)
- Warning Tilting away (done, tested)
- Tilting should be given visually
- Spawn and Tilt buttons inactive (done, tested)
- RELAY commands (tested, worked without mod)
- TurnForward Left/Right buttons (done, tested, very convenient)
- CamRequest at Halt (done, tested, could use some intermediate images)
- Both images of Kenaf?
- MaxRange of Hokuyo seems 20m
- Testrun based on GroundTruth only (and INS only)
- Flippers (and encoders) functional
- PitchRoll on PoseEstimate (instead of IMU). Or Relay IMU values! Or Relay Pose3D estimates.
- Increase MaxPower and try to get from bridge (start position around 13.7, 12.3 -> 13.5, 9.3).
24 April, 2012
- Installed software on all machines. Checklist:
- Machines are all the same (i5-2500K CPU@3.3 GHz, NVIDIA GT 520, 4Gb). UDK gives CPU 5, GPU4. Windows Experience CPU 7.5, GPU 5.0, Gaming 6.2)
- Opened IranOpen2012WithSmoke. Got warnings about UsedWithStaticLighting about OfficeMesh. In Editor all Office table_tops look OK.
- Looked at commandline options (Machines support -D3D11), but didn't find good option to include additional packages.
- Looked in EditorIni, added [ModPackages] ModPackagesInPath=..\..\UDKGame\Src to UDKGame.ini.
- Found Material in Office and OfficeMesh packages. Edit using Material Editor. Option is in Usage. Corrected metalDesk_Mat, table_top_Mat. Issue solved!
23 April, 2012
- Removed the ProcessingCameraData from the Patch, but this function is not longer called (was called from ManifoldSlam:ProcessOmniCamData). This function is also not called anymore (was called in ManifoldSLAM:ProcessSensorUpdate).
- UDK is crashing on nb-udk. Debugger reports ''System.ExecutionEngineException' occurred in mscorlib.dll'. Seems to be side effect from my installations yesterday.
- Installed March-edition. UDK-editor is starting. UDKLift not. Not due to system-PATH inclusion in user-PATH. Cleaned up PATH, still no UDKLift.
- Updating UDK-2012-03 on nb-unreal.
- Works, although the ini file didn't contain a camera (and a Tachometer which gives empty sensor messages). Set CameraNearPlane from 70 to 7. That seems to work.
No much problems with memory, but that can be due to that all TcpCameraConnection give image with length 5 warning.
- Machines received a Windows rating of 5,0 (Processor 7,5; Memory 7,5; Graphics 5,0; Gaming 6,3; Hard Disk 5,9). Processor i5-2500K (3,3 Ghz), 4 Gb memory, 64bits OS, Nvidia GT 520).
- The CameraData.Load got more than enough bytes, but didn't convert them in Bitmaps (multiview RAW not implemented). Switched from Raw, legacy=false to JPEG-compression=4, legacy=true.
- Receive now images, still steady increase of 100 Kb per second:
- Protected LastCamImage.Dispose. Got the following errormessage:
Managed Debugging Assistant 'ContextSwitchDeadlock' has detected a problem in 'C:\svn\roboresc\2011\competition\Usar\UsarClient\bin\Release\UsarClient.vshost.exe'.
Additional Information: The CLR has been unable to transition from COM context 0x2af6ae0 to COM context 0x2af6d30 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.
- Additionally, before this message several threads were killed:
'UsarClient.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\svn\roboresc\2011\competition\Usar\UsarClient\bin\Release\UsarClient.vshost.exe'
The thread 'vshost.NotifyLoad' (0xcc) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0x1ee0) has exited with code 0 (0x0).
'UsarClient.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\svn\roboresc\2011\competition\Usar\UsarClient\bin\Release\AForge.dll'
'UsarClient.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\svn\roboresc\2011\competition\Usar\UsarClient\bin\Release\AForge.Imaging.dll'
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
'UsarClient.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\svn\roboresc\2011\competition\Usar\UsarClient\bin\Release\ICSharpCode.SharpZipLib.dll'
A first chance exception of type 'System.IndexOutOfRangeException' occurred in UvARescue.Tools.dll
A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll
The thread '' (0x1048) has exited with code 0 (0x0).
The thread '' (0x1504) has exited with code 0 (0x0).
A first chance exception of type 'System.IndexOutOfRangeException' occurred in UvARescue.Tools.dll
A first chance exception of type 'System.IndexOutOfRangeException' occurred in UvARescue.Tools.dll
A first chance exception of type 'System.IndexOutOfRangeException' occurred in UvARescue.Tools.dll
A first chance exception of type 'System.IndexOutOfRangeException' occurred in UvARescue.Tools.dll
The thread '' (0x1fac) has exited with code 0 (0x0).
The thread '' (0x740) has exited with code 0 (0x0).
The thread '' (0x1bc4) has exited with code 0 (0x0).
- Solved the Tools problem (Too ambitious error message in TcpCameraConnection. Received a new warning:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
- Vraag niet meer onmiddelijk een image, en heb de frequentie in de idle loop verlaagd naar 999 msec.
Met een robot zit ik na 5 minuten pas op 2.17 Gb. Ik heb meer last van de trage update van de kaart dan de images (gewoon nog een keer op stop drukken).
20 April, 2012
- Did a run with a UsarClient without a connection to the ImageServer. The memory usage is stable:
- Second run. Tried to switched off ImageParser.ParseImageData in LifeDrive, but did in the HTML5-branch. In 4 minutes 1Gb was used:
- Third run. Swithed off both Me._ImageServerConnection.ReceiveImageData and ImageParser.ParseImageData. The memory usage was stable:
The interface was slow, but this could be because of the Sleep(TimeSpan.FromMilliseconds(337)) when bRecvImgs = True is not set. Reduced it to 33 millisec.
- Fourth run. Swithed off both ImageParser.ParseImageData. The memory usage was still stable:
- Fifth run. Activated ImageParser.ParseImageData, but Switched off CameraSensor.ProcessBytes. Memory was used like mad (There was a print statement for every restart, but this was not visible to warning MultiSensor.Popdata).
Note that Me.Agent.NotifySensorUpdate(Me) was active. Also note the memory usage of split and ToLower.
- Sixth run. Switched off Me.ProcessOmnicamData in ManifoldSlam. This seems to be the only user of this data. Should every function that uses PopData (including ManifoldSlam.ProcessSensorUpdate) free the data? Without Me.ProcessOmnicamData the memory is stable (although ProcessBytes is still off).:
Try what happens if I use ProcessOmniCam, but free the camData.
- Seventh run. With the freeing the camdata the memory usage is stable.
- Eight run. Protected all ProcessCameraData calls. Added bytes = Nothing to CameraData.LoadData. Got warning in WssConversation.vb:519. Memory was misused even further:
Switched of ProcessCameraData in ManifoldSLAM. Should look at ProcessCameraData in Patch.
7 April, 2012
Iran Open competition day 3
- Made some late minute changes (clearing the memory after ParseLine, not sending memento's back to the robots).
- Run today the final. A map with 8 victims, the winner found half of them. Tried to run with two robots.
The camera showed only a partial view (configuration problem?). After 7 minutes I was out of memory and the GUI was killed.
- Tried to find the female in the maze. Was once able to pass along the right side (obstacle at (1.8,-11.4)), but I went straight (no return possible).
- To be done (obstacles behind text, if robot before not spawned correct image).
6 April, 2012
Iran Open competition day 2
- Installed previous day map on test pc-4. UDK-usarsim was broken, had to install it again.
- Tested two robots for a few minutes.
- Had a lot of configuration problems. Run with the ini-file from test pc-4. P3AT contains 4 sensors. Should add additional sensors to allow constrained teleop.
- Run went relatively smoothly. Made a cycle with robot2 (could have better turned robot1 and explore from there). Used robot1 to explore larger area. Images were still coming,
although at the end with 2 minutes delay.
- Nice map, no victims:
- Made a test with an AirRobot with an INS-sensor. Actually worked, but INS-sensor was not allowed (and video-feed is too bad to fly on camera).
GPS is allowed, but this sensor is not working (even outdoors):
- Did a testrun with three robots. After 6-8 minutes I was out of memory and the OS shut of the clients:
- The Conservative behavior fired on the lasers only. No alert was visible on the display.
- While testing the obstacle avoidance, I saw that I could look through the wall:
- Decided to use only two robots for the semi-final. That was a wise decision, because after 6 minutes the memory was exhausted:
- Still, I had found one victim (actually, I just switched the control back towards robot1 to get him out of the dead end):
- Reading the Tutorial while downloading a trail version of a performance profiler.
- Started Code Analysis
- Visual Studio 11 Profiler has also the option to check Memory Usage.
- UsarCommander uses 95% (improved 56%) of its memory OnReceiveImageData. This is this camera of the BaseStation. Lets try not to mount this camera.
- Stopped Profiling at 2min.
- UsarClient is still filling memory. Suspisious is formatter = Nothing (just added). Microsoft uses an example without disposing the formatter object.
Also this code snippet cleans up many things, but not the formatter.
- UsarCommandor seems to be leak-free, UsarClient is still growing fast. Should look at the patches which are shared in the sync updates (memory usage starts growing when those messages come in).
5 April, 2012
Iran Open competition day 1
- Last testrun was a disaster. The images from both robots started to have OverFlow exceptions (handled).
- Changed last minute in the LiveDriver the call back to ReceiveImageData(640 * 480 * 3 + 1). Had to enter the competition with untested code.
- Had problems with ethernet connection. Had to use 192.168.1.158 (not 58) and to switch Firewall off.
- Forget to give power to my labtop and to set the JPEG-compression to level 5 (bad).
- Did a run with two robots. Robot1 (far away from the BaseStation) didn't respond in the upper left corner, so I went down. Explored 4 offices, but found no victim (maybe I say a leg):
- Robot2 went down the corridor, but I had difficulty to enter the room. At that the images started to come from
both robots (randomly distributed over the two displays). Used at that moment for both robots waypoint navigation, which worked nicely for robot1, but not for robot2.
- Memory-usage was 8Gb at the end of the run. Two of the four processors were used for 60%
- Both WSSConversation:Receive and CameraData:Load read Byte for Byte in a loop. Checking for an alternative.
Found one on Microsoft Development Software Development forum. Unfortunatelly, the "System.OverflowException: Arithmic operation resulted in overflow." appeared again.
Read that one Visual Basic optimalization option is to not check for Overflows. System doesn't speed up.
- Alternative is System.Buffer.BlockCopy, as indicated at bytes.com.
- Much nicer code with System.Buffer.BlockCopy, but end-result isn't that much faster. Committed Rev. 2263
- Replaced the calculation 640 * 480 * 3 + 10 with 921610
- Bug seems to caused by a corrupt number in imgdata(1). Multiplied by 2^24 this can be larger than MAXINT. Committed Rev. 2264. Have problems with my memory:
- Try tomorrow 20 minutes with one and two robots.
4 April, 2012
- Tested with UDK on testservers at venue. Tried first several times 300x200 with ImageType=Normal(3) (UDKUser.ini, not DefaultUSAR.ini),
later also 320x240 with RAW (0) black screen, SUPER(1) only half a screen once and BAD (5) strange coloured images trailing a few meters behind current position.
- Should try to switch compression off for images (JPEG-image are already compressed).
- Switched compression off, set default speed to 1 rad/s. The starting behavior is specified in the AgentConfig file.
- Didn't feel much different with compression on or off.
- Profiler indicated that 14% of the time was spent in checking the existance of poses in the AgentLayer (split If statement).
- Profiler indicated that 55% of the time was spent in BufferLayer. Check UseThumbnails (switched quite recently in rev. 2255).
- Made FastDraw with less layers. Increased Sleep of this thread. No obvious improvement of GUI. Committed rev. 2262.
3 April, 2012
- Last night bug fix seems to work (although Yildiz reports that according to the WSS the robot doesn't move).
- Installed UDK-2012-03 on nb-unreal. Put git-directory over it (old version, 3 July 2011). Did a git-update.
- Added a WSSsync button to the Drive panel. Tested the button. Works, but still it takes 20 seconds to draw the update. Should for the moment add the sync to the stop-button.
- Looked at the profiler. Most of the time is spent in the BufferLayer. Should check what happens when I don't use thumbnail or GDI. Also a lot of time is spent with compressing the messages.
Check svn. Maybe I should use it only for large messages. According to the WSS, most messages are around 500, a few around 1000.
- Should find out why I receive no updates.
- Added print statements. Every 30 seconds pings are sent, but those are not coupled with sync requests. Everything is done twice!
- Pushing stop button, followed a few seconds later with an explicit WSSsync request works (although quite awfull). BehaviorAgent:NotifyPoseEstimateReceived never reaches NextSync
- Didn't try the ImageServer yet!
- Reverted AgentsLayer (modified from ManifoldLayer to BufferedLayer).
- Added WriteLines in conversation. UsarAgent receives two greetings from the Base station (with and without cam).
The second greeting is followed by an Update of the conversation, but it seems that there still are two threads of communication.
- Two conversations is a feature (one for the camera, one for laser / commands). Ping is now only for laser, yet I still receive two commits
for touch of the sync button. Should also trace the PoseUpdate from UsarClient.Slam to GUI. Activated print statements, both sync are on 'other sensor'-conversation thread.
- Set the ScanInterval of the SICK on 10. Now, I receive 4 scans at the same milliseconds, followed by with 1 second nothing.
- Set the ScanInterval of the SICK on 2. Set it back to 0.2
- Code works quite fine with Milliseconds Mod 30 > 20, but this means that 10/30 scans are processed. Yet, the 10 scan have just 3 timestamps:
- Made a skip algorithm based on counting. Committed Rev. 2259. Now, look what happens if I do a sync after a Manifold:LocalizeAgent:
- Added a RelaySync towards the Operator, but update is still not fast.
- Tried to get images, but P3AT had no camera mounted. Mounted camera, still not visible on P3AT. First test on nb-unreal.
- Tested on RoboCup2011finalLight. I have a camera image, but I am afraid that is the one from the BaseStation.
2 April, 2012
- Looked at C# version of CameraData. The C#-file shows no errors, but a C# file will not be compiled in a VB project.
This means that the whole project has to be converted (better start with something smaller than Agent).
According to this forum,
I could try to use the automatic online conversion tool for this job.
- UDK-log reports (once): command not recognized: sta. According to the manual USARSim should.
- No image, ImageServer gives several warning about RenderData and no image visible in UDK-screen.
- Error 27 DA0002: It appears that the file was collected without properly setting the environment variables with VSPerfCLREnv.cmd. Symbols for managed binaries may not resolve. File is located at C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\x64.
Some warnings (LightFix, SharpZLib are resolved by clicking on them. Profile doesn't give much information.
- Tried to make a connection via WSS in PropagationMode. Only spawned comstation. WSS reported position 21.2451,-18.427,1.728 (should be Vehicle3 VMAC2011).
UDK gives script warnings: Accessed None 'PlayerReplicationInfo' ComServerInterface VMAC2011.TheWorld:PersistentLevel.ComServerInterface_0 Function USARBotAPI.ComServerInterface:getPosAll.
UsarCommander is kicked out with InvalidOperationException("You should connect first").
- Blamed ComServerInterface. Only Stephen Carlson and Balakirsky have worked on this file.
- Grepped PlayerName. Stephen uses 'UsarGame.botList[i].PlayerReplicationInfo.PlayerName' in ComServerInterface. In WorldController Stephen uses 'usarGame.botList[i].BotName'.
- PlayerName to BotName on UDK-junebeta@nb-unreal. Compiles fine. Warning is gone. WSS reports ComStations position. A few times established / disconnected connections, but after that the
robot is spawned. Some warnings about no BodyInstance for the Sensors, but after the message Created USARBot.P3AT those messages are gone.
- Seems that I should use a longer delay before the connection is flagged Connected. Last change seems to be rev. 2212 in WSSDevice.vb:212 (sleep 1 sec).
- Increased sleep to 3 sec. Was able to spawn UsarClient, but this client died (no image server running). Rebuild and Config without ImageServer.
- Both UsarCommander and UsarClient are running, but both complain: sending while not connected. WSS reports that with 3 Hz data is sent (around 500 bytes).
- UsarCommander complains about spawning [ProxyAgent] and reports two CommActors connected to port 50055.
- Both UsarCommander and UsarClient were sending Acknowledgement while idle. Without images the robots reacts very responsive on my commands.
Yet, the update is really slow. Only received one sync commit after nearly a minute. 5 minutes later still no sync commits. Also still two CommActors. Yet, it seems that the
USARSIM WSS-bug is solved:
- Should tomorrow couple one button to a sync-request.
21 March, 2012
- Installed the Feb 2012 version of UDK. The main trunk of USARSim compiled without warnings. For this version the 64bit version works, although in DX9 version while DX11 was requested. Maybe this is due to Intel vs Nvidia graphics bug.
- Committed RoboSoccer world. As indicated in Nao Labbook, I added UsarNaoQi binary to USARTools, but didn't commit it because usarnaoqi didn't work with NaoQi 1.10.52 or 1.12. Seems to depend on NaoQi 1.10.44.
6 February, 2012
- Implemented a C# version of CameraData without compilation errors, only this class is not (yet) visible in the VisualBasic classes. Should check namespace.
31 January, 2012
26 January, 2012
- Tried out HardCopy and LateBinding. HardCopy didn't work (had to replace fromBitmap by fromImage; result was a black camera-view). LateBinding worked, but it was not clear if it was an improvement. The profiler didn't sampled the CameraData:Load anymore (?!). Tried what the performance was with WSS. Interface was slower. UsarCommander spent most of its time in WssConversation (59%). Most used was L620 from the ThirdParty software BZip2Inputstream.cs. Profiling the UsarClient was more informative: 9% was spent in ParseUsarSimLine, 43% in ParseCameraImage. The distribution between the creation of the bitmap (late binding) was 24.5%, the subview 16.1%. So, the late binding didn't work.
- Maybe it is a good idea to see if I could make a C# implementation of CameraData.
25 January, 2012
- Replaced the loops inside ReceiveImageData to constraint copies. The profiler cannot find the function any more in its hotlist. Had to find the function back via a comparison with a previous profile. Result: from 13.99% to 0.05%:
Still the interface is not really fast.
- Enabled just my code. 46% of the time the program is inside Graphics.DrawImage, 35.4% BufferedLayer.vb:150, 10.8% AgentsLayer.vb:165.
- Enabled the thumbnails again (2% faster). Made AgentsLayer a ManifoldLayer instead of a BufferedLayer (driven path is now missing. Drawing is now reduced to 38%.
- 29% of the time LifeDriver.Run, 15% ParseUsarSimLine, 9% ParseCameraData. Still most time (10%) is spent in the function Match. Should look for an alternative of IndexOf (2.3%).
- Looked into ComputeErrorCovariance. Made a separate Matrix2 constructor, which didn't needed to do a Redim. Also had to copy/paste some of the functions which were not longer inherited. ComputeErrorVariance dropped from 2.3% to 0.1%. From LiveDriver.Run, ParseUsarSimLine now only counts 8.5%, while the TcpCmaraConnection.ReceiveImageData accounts for 11.1% and ParseImageData for 29.9%.
The slowness of ParseImageData is in CameraData:Load(), line 295 (New Bitmap) 17.1% and 297 (GetSubView->New Bitmap) 12.1%.
- At a forum Larry suggests a hardcopy:
bmpImage = New Bitmap(myBitmap.Width, myBitmap.Height)
Dim grx as graphics = graphics.FromBitmap(bmpImage)
- At a microsoft forum Cor suggest to avoid late binding:
Dim bm1 As New Bitmap(PictureBox1.Image)
Dim B2 As Bitmap = New Bitmap(bm1, 100, 2000)
- Try out tomorrow.
16 January, 2012
- Prepared a run for Astrid on the competition branch on nb-udk. Build with VS2010 for AnyCPU on nb-udk worked fine, maps could also be saved.
- Yet, the GUI was still very slow (also for Release version). Tried FollowWaypoint and AutonomousExploration, but both times the robot turned away from the center of the corridor towards the walls. Small bug is the CommMatrix layer (contains no data when both robots are directly connected).
- Should look what happens on 32-bits machine with VS2005.
- Looked with Spy++ to the application. Application consist of two processes (USARcommander and USARcommander.VSHOST). VSHOST contains 7 threads, 5 times 0.0 usertime, one 78 microsec usertime. The other process contains 7 threads, 3 times 0.0 usertime, one 27.892 sec usertime (the one with the WindowFrames).
- According to msdn you could do profiling from the commandline. According to another msdn article I need to upgrade to Visual Studio Premium (5 times as expensive) to profile my application.
- Profiling is also part of VS2008, in the Team System Developer Edition.
- Could try a 30 days trail of VS2010 Ultimate or VS2011 Ultimate (Valid until end of June) (all from VS downloads).
- Analyze wizard works fine. Steered my robot one minute trough the map. A function which already pops up in the summary is ReceiveImageData (16% of the time), which reads out the imgdata bit by bit. 2915/9875 samples were inside Function UvARescue.Usar.Lib.ManifoldView.OnPaint(class System.Windows.Forms.PaintEventArgs), which is a percentage of 29.58%. The other half of the time the program is inside LiveDriver.Run, which nicely distributes its time between ParseImageData and ParseUsarSimLine. The time inside the ParseUsarSimLine is dedicated to LaserRangeSensor.ProcessMessage(), on the line Agent.NotifySensorUpdate. The NotifySensorUpdate spents most of its time in Match->MatchPoints. The work in this function is nicely distributed, the 15% is distributed 3.2% insided IndexOf, 2.9% in CorrelatePointsQT.
- Conclusion: optimize ReceiveImageData and look for an alternative for IndexOf.
- Also note that there is 15% calls to an unknown module (CLRStubOrUnknownAddress). Missing dll (System.Configuration.dll, System.Xml.dll, Microsoft.VisualBasic.dll, OLEAUT32.dll, libapr_tsvn.dll).
- Inside ScanMatcher, ComputeErrorCovariance makes three matrices, which seems to be costly (implemented by redim).