I am running RoboRealm on a mobile robot whose brain is a mini-itx single board computer running Windows XP at 1.2 GHz and with 1 Gb RAM and a 802.11g wireless connection to my home network. My control program for the robot is written in C# and I use the RoboRealm API to communicate with an instance of RR running on the mini-itx. My test application controls the head of the robot to track a red object using the .robo file attached to this post. The program works quite well when everything runs on the mini-itx. Since I would like to do some additional processing on the video stream, and the mini-itx is already maxing out with my current .robo file, I would like to off-load some of the vision processing to my desktop machine which is on the same network.
It seems I have two options:
(1) Serve up the video stream from the robot (mini-itx) using the RR HTTP server option (port 8080), run an instance of RR on my desktop PC using HTTP_Read, do the image processing using this instance, and read back the processing variables from within my C# program by pointing the API to the IP address of my desktop.
(2) Serve up the video stream from the robot using the RR Distributed Server module, run the Distributed Client module on the instance of RR running on my desktop PC, do the image processing using this instance, and read back the processing variables from within my C# program by pointing the API to the address of the locally running RR instance (localhost).
Here are the problems I've run into. First with option (1): I get a nice streaming image on my desktop PC instance of RR and my .robo file (tracking a red object) works fast and smooth with a good COG box around my desired target (as viewed through the robot's camera). However, when I point the C# program on the mini-itx to the IP address of my desktop PC, I seem to be getting the COG x and y variables at only about 1 frame per second so head tracking occurs as a series of jumps 1 second apart instead of about 20 per second as I get when running everything on the mini-itx.
Next I tried option (2). First, I turned off the Webserver option on the mini-itx instance of RR and loaded the Distributed Server module with the default 5 threads option. Then on the desktop PC instance of RR, I start from scratch and load the Distributed Client module. The problem is that right from the start, I get a very slow frame rate on my desktop PC instance of RR, even with no .robo file loaded. On the Distributed Client module I am requesting the image and sending variables with the other two check boxes un-checked. Also, it doesn't seem to matter what compression I choose, the best I can get is about 5 fps. By contrast, using option (1) I get about 15 fps (it seems even faster to my eye, so I'm not sure if the fps calculation is actually correct.)
I am using the latest RR (18.104.22.168) on both machines.
Any suggestions on how to debug these two situations would be greatly appreciated!