Friday, December 5, 2008

Windows Embedded & Co.

Yesterday I showed a few slides about the different Windows and .NET Framework versions on different hardware platforms. This is the link to it:

Also see:

Friday, October 24, 2008

Meeting of October 23rd 2008

Attendees: Tim Bertholet, Maurice van den Heuvel, Hans Odenthal, Dorieke Schipper, Grayson Penzo and Erik Vermeulen

New project members!

Last year, we started our project with 10 members. Since then, Jeroen, Kees-Jan, Erwin, Peter and Maurice Beelen have left the project due to several reasons, mostly lack of time.
Today, Dorieke and Grayson were present to see what our project is all about and they may be joining us. First we introduced our project by doing a quick walk through through some presentations and this blog.
After that we proceeded with our meeting as if it was a regular one.

What has been done last month?

Erik created a new nk.bin image that includes the Via VT6655 Mini-PCI Wi-Fi driver. The running image also supports a persistent file system and registry (like Tim's image) so files and registry settings survive a reboot. This is also true for the WLAN passwords. From now on, entering your WPA2 key once will do.
On the eBox’ desktop I’ve also put a new link “Listen for Visual Studio” that starts both the conmanclient.exe and cmaccept.exe in order to support remote debugging from Visual Studio. By the way, I replaced them with the ones needed for Visual Studio 2008.
Furthermore I changed the eventing demo so it works with an actual Roomba. However, during my demo the demo effect kicked in: an exhausted battery screwed up my demo :(. Better luck next time.

Maurice integrated his TCP/IP implementation into the Siimon solution. He noticed that some methods are missing on the interfaces. These will be added and implemented by Tim and Erik soon. They will meet regularly the following weeks to get this done. Our goal is to have the bottom layers implemented asap so we can start with the more challenging parts: adding some form of ‘intelligence’. Basically this bottom layer implementation is similar to the RoombaSCI library; however it will have high level events added to it (OnBumperPressed, VoltageChanged etc.).

While discussing the project we concluded that for the intelligent part, we may need more sensors. Currently there is no good way to determine the robot’s position. The following weeks we will all have a look at auxiliary sensors.

Our next meeting will be on Thursday, December the 4th 2008, starting at 17.45. See you then!

Tuesday, September 30, 2008

Siibot Meeting Minutes, september 23rd 2008

Present: TiBe, MaHe, MaBe, KrSm, ErVe
Absent: HaOd

This meeting we did a quick round to discuss the results of everyone's effort of the last period.

ErVe: Erik tried to connect the remoting server to a real Roomba instead of a simulation. However, there were problems with several USB-to-RS232 converters under Vista. We even got blue screens (that was a long time ago ;)). For the next meeting, Erik will use a PC with a native RS232 port or the eBox to get the demo working.

KrSm: Kristof managed to integrate Siibot's eBox into the M2W platform. Running M2W on Windows CE proved to be a real challenge. He gave an interesting demonstration with several Remote Desktop solutions. Before the demo he noticed that there aren't that many remote desktop servers available for Windows CE. PocketVNC might be a nice option, we found out during the meeting. Additionaly, Since M2W is aware of the IP address of the eBox after it registers, all kinds of interesting server applications could be run on the eBox. E.g. a webcam streaming server. Kristof will take a closer look at the options the next month.

MaHe: Maurice has built an abstraction layer on top of his TCP/IP protocol layer. This layer should enable us to swap AsGoodAsItGets and the alternative TCP/IP implementation without any hassle. As a goal for the next meeting, Maurice will integrate the abstraction layer in the Visual Studio 2008 solution.

TiBe: Tim took over the Windows CE platform builder issues from ErJo. Tim managed to build a new CE image (nk.bin) that is able to persist any changes done to the file system and registry. In other words, these changes will survive a reboot now. This wasn't the case before. This is an important step and makes the eBox a much nicer platform for development and deployment. If there are missing components in the current image (e.g. the Wifi driver is currently not yet included), don't hesitate to ask Tim to include them.

MaBe: Last meeting, we discussed the architecture. Both MaBe, TiBe and ErVe have been involved in the architecture before, however we really needed MaBe to be present in order to answer some of the questions that the others came up with. We got trapped in circular discussions during the previous meeting.
This time, MaBe was present and the architecture has been presented clearly to everyone. MaBe, ErVe and TiBe agreed to continue working on this part of the project. Since a lot of interface functions are already defined in both the presentation and our Visual Studio solution, we can start implementing the interfaces.

The next meeting will be on thursday, october 23rd 2008.

Wednesday, June 25, 2008

Volgende bijeenkomst is op dinsdag 8 juli 2008

De agenda:

17.30 Eten
18.15 Siibot (zie hieronder)
20.00 Einde

Ik wil een rondgang maken om elkaar bij te praten, we zijn immers een tijd niet bij elkaar geweest:

M2W op de eBox (Kristof/Tim)
TCP/IP sockets (MauriceH)
Webcam/VLC streaming (Helaas heeft Jeroen Torfs het Siibot team verlaten)
Persistence op de eBox (Erwin)
Wifi remoting (Erik)
Architectuur (Tim/MauriceB/Erik)

Ik wil jullie vragen om dit kort voor te bereiden zodat je kan vertellen of kan laten zien waar je mee bezig bent geweest.

Tot de 8e!


Wednesday, May 28, 2008

Remoting with eventing is working!

It has been quite a while since we set ourselves the goal to realize .NET remoting with eventing. For several reasons, I couldn't put enough effort in it, but now I have a working prototype. Finally!

What is it?

The solution consists of two executables and a shared library containing the interface definitions.
For each there is a separate project within the solution.


A .NET Compact Framework WinForms application representing the server side that will be running on the eBox eventually.
For now, a picture of an iRobot Create is displayed with which you can interact.


A .NET Full Framework WinForms application representing the control application (client) running on a PC.
There is a checkbox that can be used to switch Roomba's power LED. Three other checkboxes are checked when Roomba's bumpers are pressed.


Containing the IServer and IClient interface and some enums. Both client and server communicate with each other via these interfaces through (As Good As It Gets) remoting.

A short demo

It's important to start the server first.

When the server is running we can start the client. The server's ip address should be set in the client's config file. Directly after starting the client, it will try to connect to the server. After this connection is established, the server will setup a new connection channel to the client to transport callbacks. Via this channel the client is informed that we're ready to go. As a result the power checkbox is enabled and ready for user interaction.

Clicking this checkbox will change the power led's state on the roomba in the server window.

You can see the callbacks work by clicking (and holding) Roomba's virtual bumbers. This can be done in 5 different places: front, left, right, front left and front right.

These 'bumps' are reflected in the client via (combinations of) checkboxes.

For the complete solution, update from the Siibot archive and check out %SIIBOT%\Development\Trunk\Sw\PoC\
Please check the Readme.txt first if you want to run the solution. If you still have questions, you can always ask me.

Thursday, April 17, 2008

The Robotics Primer Workbook

Thanks to Wouter Moors from the Sioux LKG (Linux Knowledge Group).

Wednesday, March 19, 2008

Architecture team starts working Agile

The Architecture team (Tim, Erik, Hans and me) are going to use Scrum to guide our development. Today we've chosen to use Xplanner as it already used within the Sioux Development Center and it can be accessed remotely through the web pages. Possibly other sub teams can use it too.

We will have sprints of 2 weeks. As we all work in the Development Center most meetings are planned in extended lunch breaks. We still need to define what daily means for us in "daily scrum meeting". But well, just give it a try.

We have looked at Virtual SCRUM Board by Microguru Corporation. what we found is that it lacked remote usability. But it had this nice Scrum board.

What we would like is the best of both worlds with an actual virtual scrum board, using some technologies to collaborate remotely. Not with the focus on project planning but on collaboration, standing at the board exchanging information and move notes around.

At the Praatje-Pot-Inipi (internal training at Sioux) by the author of "Dromen, Durven, Doen" Ben Tiggelaar, I got in conversation with Maurice van den Heuvel and Erik Vermeulen about creating this Scrum board where we can actually move, add and remove "paper" notes while working on geographically separate locations. Technologies like Skype can then be used to speak with each other.

Perhaps some development which the .Net Expertise Group can start.

Monday, March 17, 2008

Where's My Roomba? WiFi Signal Measuring

Electrical and Computer Engineering students at the Jacobs School of Engineering (part of UCSD, the University of California in San Diego) can join a Sponsored Student Design Project (ECE 191). In one of last winter season's projects, students were challenged to develop a system that can determine a Roomba's indoors position very acurately. They seem to have used both tracking data from the Roomba itself as well as Wifi signal strength from a couple of Wifi routers. We're not this far yet, but to me it sounds very cool! They put this clip on YouTube:

Thursday, March 6, 2008

SiiBot Agenda

Just to share appointments within the team and subteams I've created an agenda in Google. Mail me your Google account and I'll give you access to the shared agenda.

We're using the blog to show our progress to the world. At this moment I've not released the agenda to the world. Let me know what you think about that.

.Net remoting and eventing


I found this article on .Net remoting and implementing an eventing. 

Although Utkarsh Shah, who is the author of the article, doesn't recommended using it over the network, it's interesting enough to test it on the ebox/CF and PC/FF and see how far we get. And learn rom the results.

Erik Vermeulen, who has done the first implementation using the AGAIG remoting, will perform the implementation and test. I'm looking forward to see the results.

Thursday, February 28, 2008

.Net Remoting for the Compact Framework

As you may have read in the summary of the last meeting, Peter Cosemans came up with the idea to use .NET remoting instead of a homebrewed communications protocol.
Maurice Beelen and I investigated this and we found out that, unfortunately, .NET remoting is not supported in the .NET Compact Framework.
Luckily, we ran into the following company: As Good As It Gets LLC. They created a remoting and serialization framework for Windows CE that is compatible with .NET remoting and they claim it's even faster.
It's not free (A license for one developer costs $199) but it's great! Our Siibot can be controlled remotely now, virtually in no time! See it driving around:


This is how I did it:

First of all I downloaded the .NET CF.Remoting.Client, CF.Remoting.Server, CF.Serialization - Installer and the 35 day trial license keys for both CF.Serialization and CF.Remoting from this page
Note that both license keys must be copied to the \Program Files\SiibotApp directory on the eBox later on.

The server side

I created a solution containing a CE 5.0 C# Device Application and a CE 5.0 C# Class Library. The class library contains an interface named IRoomba and a Roomba class implementing it. To make remoting work, the Roomba class has to inherit from System.MarshalByRefObject.

The Roomba class contains some code to initialize serial port COM1 and a little serial IO code to send the actual commands. This was borrowed from the RoombaSCI library for the time being.

Next it was time to initialize remoting in the form class. First of all I referenced the two AsGoodAsItGets assemblies and the class library containing the IRoomba interface. Next I added the appropriate using clauses.

The class has to be registered so it can be instantiated and invoked via remoting over TCP/IP.

Note that we chose WellKnownObjectMode.Singleton mode instead of WellKnownObjectMode.SingleCall since the latter reinstantiates the object with every method call.
For testing purposes remoting was initialized for TCP port 1500. According to IANA List of well known port numbers this port is reserved for the VLSI License Manager, but in our environment this is currently not a major issue. To be able to proceed with the client side, the server side project must be compiled first.

The client side

The client is a simple C# (.NET Full Framework) Windows application containing a couple of buttons to control the Siibot.
Make a reference to the class library assembly from the server project containing the IRoomba interface and the implementation.
The nice thing is that we can use standard .NET remoting now to instantiate the remote object and to invoke methods on it:

Note that we used a fixed IP here. I was able to do that because I configured my wireless router to assign this ip address to the eBox only.
Now that we have a referenced interface we can call methods on it. Behind each button on the form I call the appropriate method.

My conclusion: "As Good As It Gets Remoting" is great! We should definately purchase a license.

Deploying a C# project on the eBox

In order to deploy a solution to the eBox I followed these steps:

I booted the eBox from the standard option in the boot menu: Boot CE/PC (local nk.bin with /L:1024x768x32)
Next I made a wireless connection from the eBox to my home wireless router by clicking its SSID from the list and (in my case) entering its AES/WPA2-PSK key. My router is configured as DHCP server for known MAC addresses so I had to add the eBox's MAC address to the allow list of my router.
In case you have a long Wi-Fi security key you can put it on a USB memory stick. It will appear under "\USB Storage" in the eBox's filesystem.
After the connection has been made, use ipconfig to check if a proper IP address was assigned.

Next, follow the steps mentioned in Part 6 of the eBox-2300 Windows Embedded CE 6.0 Jump Start Guide

Note: To get Visual Studio 2005 (Express) working on Vista, both VS2005 (Express) SP1 and Visual Studio 2005 Service Pack 1 Update for Windows Vista must be installed

I noticed that after installing the eBox SDK the "eBox2300_WinCE600_SDK x86 Device" didn't show up in the list of target devices in Visual Studio. Renaming my C:\Users\\AppData\Local\Microsoft\CoreCon\1.0 directory and restarting Visual Studio 2005 fixed the problem. See also: Google topics

Wednesday, February 27, 2008

Siibot meeting February 21st 2008

In English this time :)

Next meeting: Thursday, April 17th 2008, 17:30: Pizza. 18:00: Start


Hans and Erik had a look at a way to run our Siibot code against the Microsoft Robotics simulator. They concluded that it will take too much effort to realize this.
Since we have 2 iRobot Create platforms and Erik has a real Roomba vacuum cleaner, we should manage without simulator.

C# Roomba SCI Library

Peter has been working on a Roomba SCI library that works for both the Compact and Micro Framework. This library is based on the existing RoombaSCI framework from SourceForge.
He's not finished yet and will proceed with the development.


During our meeting we tried to connect to the eBox through a wireless connection. We didn't succeed yet.
For the next time, Hans and Erik will have a look at connectivity and deployment.


The subversion archive is in place and it is actually used. However, the question was raised: what goes where?
As in normal projects we have a Development\Trunk\Sw directory that contains an App, Lib and Import directory.
The Import directory will contain any binary that our application depends on, like assemblies for instance.
We will support both Visual Studio 2005 and 2008: the Sw directory currently contains 2005 solutions for both Compact and Micro Framework. These two solutions will be added for 2008 as well.

A note from Maurice Beelen: Commit monitor is a handy tool that will notify you when there are changes in the archive.

eBox Battery Pack

Tim has fabricated the battery pack for the eBox! See the following blog items:

eBox 2300 battery and eBox running on battery

TCP/IP Client and Server

Maurice van den Heuvel continued working on the TCP/IP client and server. Currently data is sent one way only. Maurice will work on two way communication for the next time.


Peter suggested using .Net remoting. This offers direct functionality without all the TCP/IP and protocol plumbing. Maurice Beelen will start a parallel search for a Remoting Solution. He will use the Visual Studio CE simulator for this.


Jeroen has shown his experiences with a webcam he purchased. An API/SDK is available for it but it depends heavily on DirectShow. He will investigate if this is usable on the Compact Framework. Maybe C++ code is needed. Kristof Smits and Jeroen will look into this. Another option is using the VLC media player for streaming. Jeroen will investigate this further for the next time.

Porting Machine2World to the eBox

Kristof has been working on the M2W port for the eBox. The ACE and CURL library must be ported for this, but since Win CE lacks certain system calls that are available in non-CE Windows platforms there are still issues to be solved. Tim will join Kristof.


Maurice Beelen suggested to have a look at the overall architecture of out system. Maurice Beelen, Erik and Hans will take this up the following weeks.


  • M2W port (With TiBe)
  • Look at VLC streaming/C++? (with JeTo)
  • Remoting op WinCE (emulator)
  • Discuss the overall architecture (With HaOd & ErVe)
PeCo: C# Roomba SCI Lib 4 CF & MF

  • Webcam
  • Look at VLC streaming/C++? (with KrSm)

MaHe: TCP/IP two way communications

TiBe: M2W port (With KrSm)

  • Deployment of an application to the eBox + remote debugging
  • Discuss the overall architecture (With HaOd & MaBe)
  • Deployment (With ErVe)
  • Discuss the overall architecture (With MaBe & ErVe)

Weblog, de of het?

Is het nou of hét weblog? We zijn eruit! Het mag allebei van de Taaladviesdienst! :)

Thursday, February 21, 2008

CommitMonitor - SVN meets RSS ?


I found a nice tool by Stefan Küng (also responsible for TortoiseSVN builds). It's called CommitMonitor and tells you when changes to an Subversion repository occured. In stead of scanning the log your self you just provide the tool with the necessary URLs (yes local network repositories are not yet supported [bummer]) and it does it for you once every while. The period is adjustable.

When changes occur you get a nice message above your task bar and you can see in the monitor what has happened. You get per repository per commit the author, the comment and the modified paths.

The diff is unfortunately a unified diff over the complete set.

CommitMonitor main dialog

Just have a look at it. It gives me a good idea of what is happening in my codeSpace.

Thursday, February 7, 2008

eBox running on battery

Today we saw the eBox running on battery, so we can really start driving around now!

Monday, January 21, 2008

eBox 2300 battery

As stated before, the iRobot battery is not powerful enough to power the eBox while the iRobot is operating as well. Even though our robot has the "Advanced Power Battery System" (APS), which is already more powerful than the default battery.

So it seems wise to power the eBox using a separate battery. Inspired by, I ordered the following parts:
This battery will power the eBox for 1.5 (one-and-a-half) hours when it is fully charged (the eBox uses 15W according to

The next issue is how to charge the battery. I see the following 2 options:
  • Directly from the iRobot when it does not need its power for its own operation.
    This option would require more extensive investigation and I wonder if this is useful, considering the purpose of this project. Just a wild guess: this even might turn out to be impossible. Of course, this also decreases the overall operation duration between charges (so the iRobot has to visit its Base Station more often).
  • From an external adapter that will be connected when the iRobot is charging itself.
    This approach is only challenging from a mechanical point of view: How can the battery connect itself to a separate charger when the iRobot arrives at its Base Station?

Even the second, simpler, approach will require more non-software-related effort. The mechanical/physical impact might be less if the Base Station could charge both batteries at the same time. I cannot prove this with calculations yet, but I doubt that the 30W of the Base Station is enough to do that.

I took the liberty to provide a workaround by ordering a quick-charger ( This enables us to demonstrate a running iRobot for 1.5 hours by charging it 'manually', which might be a sufficient solution for the time being.

Any comments or questions would be greatly appreciated!