School report and generic server app

Right now we are working on the project report that we are supposed to hand in to our teachers the next week. We will probably write a short summary of it and publish it in English as well.

I've recieved quite a lots of requests from people that want's to use the serverapp (PenemuNXTExplorerServer) to use with their own mapping robots. Of course is all code open source so it's free for everyone to download, change and use it for free. But I've understood that our project structure, and how to get the app to compile isn't that simple. The reason is that we use something called "linked source". It's an easy way to share the same code between two projects. We can't link the projects in this case, because we need to specify that the PC code shall compile with the leJOS pc classes and the NXT code shall compile with the leJOS client classes.

I will write more about how this works soon.

I will also try to make a more generic map application that shall be really simple to customize to fit for your map data. The code is already based on "modules" and "plugins" so it shouldn't be that hard to make this.

More updates will be posted during the weekend.

/Peter F


PenemuNXT Explorer Server Preview and Screencast

You can now download and try a preview of the PC app.

First watch the screencast that presents all the features.

What do you think?



Some updates
  • Twitter: You can now also find us at Twitter for short but more frequent updates. http://twitter.com/PenemuNXT
  • Refreshed design: For the YouTube page (http://www.youtube.com/PenemuNXT) and this blog (http://penemunxt.blogspot.com/).
  • New short description: "A SLAM (Simultaneous Localization and Mapping) implementation using LEGO Mindstorms NXT and leJOS (Java)."
  • Reorganized Google Code Page: More info at http://code.google.com/p/penemunxt/.
  • Map orientation: Rotate the map. This is supposed to rotate the map automatically by using data from the Compass sensor. But we have not implemented this yet, for now you have to rotate it manually.
  • New map processors:
    • Visualize clear area: Area where there probably are no objects are now displayed as white.
    • Background grid: A grid with squares that represents 10x10 cm so that it is easier to calculate lengths.
  • Performance optimization
  • Export rendered map: You can export a rendered map as PNG or JPEG to share with your friends ;)
Some images

This is the environment that is visualized in the maps below.

Export as PNG or JPEG:


Map Preview

I have separated the visualization of the map to a separate control.
Because of this it's really easy to reuse it in different ways.
I've done this in three places for now.

Map processors preview
Preview what the map will look like if you activate the map processors that you select.

Map timeline preview
If you hover the mouse over the timeline you will see a thumbnail with a preview of the map at that frame.

Map preview
According to me this is the coolest thing. When you are about to open a map from a file you will see a preview of it as you select one.

The next thing to do is to separate the timeline as a separate control so that it is as easy to reuse as the map.


Map processors

The big news of today is map processors!!
That's a new way we implement how the map is painted/processed.
The idea is that you want to be able to add new ways to improve the map easily.
What I did was to setup the interface IMapProcessor and basically it has some properties for color, name and description and a method to process the data.
You can find the processors we have at the moment here.
They all implement the IMapProcessor interface.

There are two main types of processors, SimpleData and CalculatedData.
* SimpleData is processors that basically just paint dots. For example when the robot drive. It dosn't do any improvements to it.
* CalculatedData is processors that combines different data to calculate different stuff, for example where walls and objects are.

You add all the processors you want to an instance of MapProcessors and call this every time you want to paint the map.

This is how it might look when you configure it:
ArrayList defaultProcessors = new ArrayList();

mapProcessorCurrentPos = new MapCurrentPos(Color.GREEN, 10, true);
mapProcessorHotspots = new MapHotspots(15, false);
mapProcessorFindLines = new MapFindLines(true);


mapProcessors = new MapProcessors(defaultProcessors);

This is the new admin view for them.

You can easily change size..:

..and colors:

I also made a change so that when you select a row in the dataview the timeline will jump to that frame (and if you drag/play the timeline, the dataview will jump to that frame):

Hopefully we will release a compiled version of the apps soon so you easily can download them and test them by yourself!

/Peter F

Show at school

We showed the robot and what it can do at our school.
I think most people liked it though some might have been confused by all the dots :)
Here are some pictures from that day.


Latest improvements

We've done some improvements to the project, I'll list them below:
  • Renaming of the projects
    • PenemuNXTExplorer
    • PenemuNXTExplorerClient
    • PenemuNXTExplorerServer

    • PenemuNXTFramework
    • PenemuNXTFrameworkClient
    • PenemuNXTFrameworkServer
  • Rearranged UI
    • New colors, logo, menu, margins...
  • Timeline
    • We can now "play" saved data and go to specific positions in it
  • Save and open
    • Save and open maps as files (*.penemunxtmap and *.penemunxtmapxml)
  • Filters
    • A function to filter out irrelevant data and draw lines between the correct data
  • View raw data
    • A table shows the raw data (sensor values from the robot) we base the map on
  • Hotspots
    • Shows places on the map where we have accurate data with big red circles, less accurate with small green circles

/Peter F