The goal of the RoboShop project is to make a robot for services into a shopping mall. From the hardware point of view, we are using two wheeled robots, equipped with a laser SICK 300 range finder, as well IR and sonar telemeters (see Picture 1). Each robot has a pole that is about 1.5 m heigh. It holds a tablet PC and Pan/Tilt camera.

Picture 1: Robots we use for the RoboShop project

On the software side, we have chosen the ROS middleware. The rational behind this choice is that ROS is backed by an active community, structured around Willow Garage and more recently the Open Source Robotics Foundation (OSRF). On the programming side, we took the reflective language Pharo. As Object-Oriented experts, we believe that Pharo is among the best (if not THE best) object-oriented programming language. Besides, it’s available under a free software license, and it’s community (backed by the INRIA french public research organization dedicated to computer science) is continuously improving it.

The first step was to develop a ROS client in Pharo: PhaROS = PHAro + ROS (initially named RoSt). So far, we have a first complete, running version. We have also developed a ROS node to control our robot. As a first validation, we drove the robot inside our lab and make it build a map (see Picture 2). That was also an opportunity to test our client with a third party ROS node, namely gmapping. We fed this Synchronous Localization And Mapping (SLAM) algorithm with data from the laser embedded on the robot.

Picture 2: Our lab’s map built by a robot

We are currently working on automatic map construction. The robot should be able to roam autonomously to build the map. This will lead us to test other parts of our infrastructure. Ultimately, the robot should be able to navigate in the building based on the existing map. It should be able to plan its trajectories to reach it destination while avoiding obstacles even if they are not on its initial map. Such obstacles include moving ones such as people or other robots.

During the execution of object-oriented applications, several millions of objects are created, used and then collected if they are not referenced. Problems appear when objects are unused but cannot be garbage-collected because they are still referenced from other objects. This is an issue because those objects waste primary memory and applications use more primary memory than they actually need.

Relying on the operating system’s (OS) virtual memory is not always enough since it cannot take into account the domain and structure of applications. At the same time, applications have no easy way to parametrize nor cooperate with memory management.

In our latest paper published in JOT, we present Marea, an efficient application-level object graph swapper for object-oriented programming languages. Its main goal is to offer the programmer a novel solution to handle application-level memory. Developers can instruct our system to release primary memory by swapping out unused yet referenced objects to secondary memory. Our approach has been qualitatively and quantitatively validated. Our experiments and benchmarks on real-world applications show that Marea can reduce the memory footprint between 23% and 36%.

While working on robots, we needed to work with a sensor that uses a serial communication protocol. However, we also needed UDP sockets to work with other parts of the robot. The problem is:

  • SerialPlugin only work in squeak VM (old VM) and not in the Cog VM
  • UDP sockets only work in Cog VM and not in squeak VM

I decided to take the bull by the horns and modify the Cog VM so that the SerialPlugin works. In this post, I will quickly explain what I did.

1. Get the VM sources

git clone git://gitorious.org/cogvm/blessed.git

I cloned the git repository of Cog. I did not used the svn repository (http://squeakvm.org/svn/squeak/trunk) because the git repository also includes useful scripts. Then, I followed the steps described in the HOWTOBUILD file.

2. Create your own VMMaker image

cd image
PHARO_VM=/Applications/SmalltalkVMs/CogVM.app/Contents/MacOS/CogVM ./newImage.sh

You should specify your own VM path. Then, you can use the generator.image that has loaded the right VMMaker package.

3. Generate C source code from Slang

In the generator.image, a workspace contains a lot of useful snippets. Execute the right one depending on your setup. For me it was:

"Configuration for OSX"
CogCocoaIOSConfig new
addExternalPlugins: #( FT2Plugin );
addInternalPlugins: #( UnixOSProcessPlugin );
"generateForDebug;"
generateSources; generate.

You can analyse the generated C source code in the src/ directory.

4. Compile C code

# as of 10.7 llvm is the default but incompatible compiler
export CC='/usr/bin/gcc-4.2'
export MACOSX_DEPLOYMENT_TARGET=10.5
cd build
sh ../codegen-scripts/extract-commit-info.sh
cmake .
make

5. Check your new VM

In the result/ directory you should find your new VM.

6. Modify VM sources

You can now either modify the C source code (plugins, …) or the Slang code. In my case, I changed a single method in the SerialPlugin class. Then I rebuilt a new modified VM and tested it. I also verified that I worked on the latest version.

Note: In my case, I worked on the VMMaker-oscog branch (Pharo branch?) and not the VMMaker.oscog (Eliot’s branch).

7. Publish your patch

I am not sure that I followed the “right” process in this step. What I did is to fill a bug entry in the Cog bug tracker https://code.google.com/p/cog/issues/list and I attached a .mcz (or .st) file to the bug entry.

Thanks to Igor, Esteban and others who made this process simple.

Last october the 29th, Mariano Martinez Peck successufuly  defended his PhD entitled “Application-Level Virtual Memory for Object-Oriented Systems“. The jury agreed on the importance and the quality of the contributions that were published in different journals and conferences. If you are interested learn more, you can find below the slides of the defense, as well as the video recording of Mariano’s talk.

Slides of the PhD Defense

Video of the PhD Presentation

I’m happy to announce the arrival of a new colleague: Dr. Jannik Laval.

Officially, Jannik started working for our team since Friday 2nd november 2012. That was a Pharo sprint day hosted by our partner the RMoD INRIA Lille team. This was the opportunity to revive our dormant project: OCEAN. Luc Fabresse, Jannik Laval and my self are the main contributors of this new network library for Pharo. We worked a on it while Jannik was doing his PhD. An now that he is back, we have new energy to get this project done.

However, the main effort that we all concetrate on is Robotics. With the rest of the CAR team, we target models, software infrastructures and tools to ease the development of control architectures for robots. We expect to produce soon some cool demos.

As a response to a question in the Pharo-dev mailing list, Esteban Lorenzano explains how to make an iOS app that makes use of Pharo. There should be soon a web page on the Pharo web site that summarizes this and provides other details. In the meanwhile, I would like to share with you this solution. Note that Esteban also announced that  in a couple of weeks there will be a jenkins job to build iOS VMs.

Assuming that you already has in your system:

1) Xcode (I’m using version 4.4)
2) CMake (I’m using version 2.8.8)

And assuming also that you already has an iOS development user.
For use pharo in your iPad you need to follow the following steps:

1) clone https://git.gitorious.org/~estebanlm/cogvm/cog-osx.git
2) in ./image dir prepare a VMMaker image (using pharo 1.4):

Gofer it
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfCog';
load.
(Smaltalk at: #ConfigurationOfCog) project lastVersion load.

3) Generate sources for iPhone:

StackIPhoneConfig new
generateSources; generate.

4) Generate your iPhone image (follow the instructions in iosbuild/resources/README), which is the place where iOS images need to be placed.

5) In dir ./build

build$ ../codegen-scripts/extract-commit-info.sh
build$ cmake -G Xcode .
build$ open iStackVM.image

5.1) you probably need to add your own development profile, the default one is named “iPhone Developer”

6) run

ALTERNATE
To run in Simulator:
Replace in Step 3 from StackIPhoneConfig to StackSimulatorConfig

Santiago Bragagnolo joined the team since the beginning of the month, as we announced during our talk on Smalltalk for robotics last ESUG conference (see slides below). Santiago is working full time on the RoboShop project where we aim at building an infrastructure for service robotics in the context of a shopping mall. We are using ROS (Robot Operating System) as a middleware. Currently, we are focusing on RoSt a framework to bridge Pharo Smalltalk with ROS. The end of the tunnel is becoming closer. We can call services provided by ROS nodes and we can send ROS topic messages. We are currently making tests with the ROS turtle simulator. We hopefully will soon start experimenting with our human size robots.