Slides of my presentation given at ESUG 2014 conference are available online (see below). It’s about Robot software development using the Pharo dynamic language. It includes a quick overview of PhaROS our bridge to the ROS, as well as BoTest our framework for TDD for robotics applications. The video is also available on Youtube (see below) thanks to ESUG student volunteers. Note it is in two parts.

In this tutorial you will be able to get the laser and odometry data from a Robulab robot published into ROS topics.

Setup

You must ensure to meet all the requirements listed in the section Setup in Testing Robulab‘s post.

Install

  1. Create a fresh PhaROS image by executing in a terminal:

    $ pharos create newimage
    
  2. Open the image. This will open Pharo IDE.

    $ rosrun newimage edit
    
  3. For ease Proxy (de)activation and Process cleaning (stoping & terminating PhaROS nodes), we recommend you to install the CAR shortcuts workspace: open a workspace, copy&paste the following script, select it completely and Do-it:

    Gofer new smalltalkhubUser: 'PabloEstefo' 
        project: 'ExperimentUtils'; 
        package: 'Experiment-Utils'; 
        load. 
    (Smalltalk at: #EUWorkspace) open.
    
  4. It will open a new workspace titled CAR Utils that will have the following shortcuts:

    • ProxySwitch on to activate HTTP proxy

    • ProxySwitch off to deactivate it

    • ProcessesCleaner clean to terminate all non-critical processes. This will terminate any PhaROS node running. It is useful when you edit some script and want to relaunch it.

  5. Then install the required software for controlling Robulab robot by selecting and Do-it the following script on an empty workspace:

    Gofer it  
        smalltalkhubUser: 'CAR' 
        project: 'Robulab'; 
        configurationOf: 'PureROS'; 
        load.
    ((Smalltalk at: #ConfigurationOfPureROS) project version: #bleedingEdge) load: {'kompai'}.
    

Test

  1. Start roscore: in a terminal execute

    $ roscore

  2. Start the main script driver for Robulab1:

    1. On the CAR Utils workspace, select and Do-it ProxySwith off to deactivate HTTP Proxy

    2. Write in a workspace & Do-it the following script:

    PureROSKompai new scriptKompai1

    In case you are using the Kompai2 Robulab, launch the script scriptKompai2 instead.

  3. Let’s see which topics are available. To do so, in a terminal execute:

    $ rostopic list

    and you should see

    /command_velocity 
    /example/string
    /initialpose 
    /kompai/scan 
    /kompai2/pose 
    /kompai2/trajectory/differential 
    /orientation 
    /rosout 
    /rosout_agg
    
  4. Ok, now we know that laser (/kompai/scan) and pose (/kompai2/pose) topics exist, let’s inspect the data the robot is publishing into those topics. First we will see pose data by executing:

    $ rostopic echo /kompai2/pose

    and you should see something like this:

    header: 
      seq: 65593
      stamp: 
        secs: 1407481583
        nsecs: 757790000
      frame_id: /map
    pose: 
      position: 
        x: 0.0
        y: 0.0
        z: 0.0
      orientation: 
        x: 0.0
        y: 0.0
        z: 0.0
        w: 1.0
    ---
    
  5. The same way, let’s inspect laser data by executing:

    $ rostopic echo /kompai/scan

    and you will see something like this:

    ---
    header: 
      seq: 529
      stamp: 
        secs: 1407331004
        nsecs: 244896000
      frame_id: /laser
    angle_min: -2.36492109299
    angle_max: 2.34746789932
    angle_increment: 0.0174532923847
    time_increment: 0.0
    scan_time: 0.0
    range_min: 0.170000001788
    range_max: 3.80999994278
    ranges: [0.17000000178813934, 2.109999895095825, 2.109999895095825, 3.809999942779541, 3.7899999618530273, 3.740000009536743, 3.7100000381469727, 3.6700000762939453, 3.630000114440918, 1.9500000476837158, 1.909999966621399, 1.8899999856948853, 1.8799999952316284, 1.8700000047683716, 1.5299999713897705, 1.5299999713897705, 1.5099999904632568, 1.5, 1.4900000095367432, 1.4700000286102295, 1.4700000286102295, 1.4500000476837158, 1.4600000381469727, 1.4500000476837158, 1.4299999475479126, 1.4199999570846558, 1.4199999570846558, 1.5499999523162842, 1.7000000476837158, 1.7100000381469727, 1.7100000381469727, 1.7000000476837158, 1.7000000476837158, 1.7000000476837158, 1.7000000476837158, 1.7000000476837158, 1.690000057220459, 1.7000000476837158, 1.690000057220459, 1.7000000476837158, 1.7100000381469727, 1.7000000476837158, 1.7000000476837158, 1.7100000381469727, 1.7100000381469727, 1.7100000381469727, 1.7300000190734863, 1.7300000190734863, 1.7300000190734863, 1.7400000095367432, 1.7400000095367432, 1.75, 1.7599999904632568, 1.7699999809265137, 1.7799999713897705, 1.7899999618530273, 1.7999999523162842, 1.809999942779541, 1.8300000429153442, 1.840000033378601, 1.850000023841858, 1.8799999952316284, 1.8899999856948853, 1.899999976158142, 1.9299999475479126, 0.699999988079071, 0.6499999761581421, 0.6200000047683716, 0.6100000143051147, 0.5899999737739563, 0.5899999737739563, 0.5600000023841858, 0.5899999737739563, 0.5899999737739563, 0.5899999737739563, 0.5699999928474426, 0.5699999928474426, 0.5699999928474426, 0.5699999928474426, 0.5799999833106995, 0.6399999856948853, 2.059999942779541, 2.069999933242798, 2.059999942779541, 2.0799999237060547, 2.0899999141693115, 2.0999999046325684, 2.0899999141693115, 0.8899999856948853, 0.8799999952316284, 0.8999999761581421, 2.4800000190734863, 2.430000066757202, 2.390000104904175, 2.359999895095825, 2.3299999237060547, 2.2899999618530273, 2.259999990463257, 2.2300000190734863, 2.200000047683716, 2.1700000762939453, 2.1500000953674316, 1.0499999523162842, 1.0099999904632568, 0.9900000095367432, 0.9700000286102295, 0.9700000286102295, 0.949999988079071, 0.9399999976158142, 0.949999988079071, 0.9599999785423279, 2.0199999809265137, 2.009999990463257, 2.0, 1.9800000190734863, 1.9800000190734863, 1.9700000286102295, 1.9600000381469727, 1.940000057220459, 1.9500000476837158, 1.9500000476837158, 1.940000057220459, 1.9299999475479126, 1.940000057220459, 1.9299999475479126, 2.630000114440918, 3.690000057220459, 3.690000057220459, 3.700000047683716, 3.690000057220459, 3.700000047683716, 3.7100000381469727, 3.7200000286102295, 3.7200000286102295, 3.7200000286102295, 3.7200000286102295, 3.740000009536743, 3.7699999809265137, 3.7300000190734863, 2.7200000286102295, 2.5, 2.319999933242798, 2.1700000762939453, 1.9299999475479126, 1.909999966621399, 1.7999999523162842, 1.7100000381469727, 1.6299999952316284, 1.559999942779541, 1.4900000095367432, 1.409999966621399, 1.350000023841858, 1.2799999713897705, 1.2400000095367432, 1.2300000190734863, 1.2400000095367432, 1.25, 1.2699999809265137, 1.2699999809265137, 1.2999999523162842, 1.309999942779541, 1.3300000429153442, 1.350000023841858, 1.3600000143051147, 1.3799999952316284, 1.399999976158142, 1.4199999570846558, 1.440000057220459, 1.5, 2.369999885559082, 2.319999933242798, 2.2799999713897705, 2.240000009536743, 2.2100000381469727, 2.1600000858306885, 2.140000104904175, 2.0999999046325684, 2.059999942779541, 2.0299999713897705, 2.009999990463257, 1.9800000190734863, 1.940000057220459, 1.9800000190734863, 2.0299999713897705, 2.0799999237060547, 2.1500000953674316, 2.2200000286102295, 2.2699999809265137, 1.4700000286102295, 1.4800000190734863, 2.700000047683716, 2.6700000762939453, 2.6600000858306885, 2.6500000953674316, 2.609999895095825, 2.5999999046325684, 2.5799999237060547, 2.569999933242798, 2.549999952316284, 2.5299999713897705, 2.509999990463257, 2.509999990463257, 2.5, 2.4800000190734863, 2.4700000286102295, 2.4700000286102295, 2.450000047683716, 2.4600000381469727, 2.430000066757202, 2.430000066757202, 2.430000066757202, 2.430000066757202, 2.4200000762939453, 2.430000066757202, 2.4200000762939453, 2.4100000858306885, 2.4100000858306885, 2.4000000953674316, 2.4100000858306885, 2.4100000858306885, 2.440000057220459, 2.5199999809265137, 2.5199999809265137, 2.5299999713897705, 2.5199999809265137, 2.25, 2.1600000858306885, 2.0299999713897705, 1.899999976158142, 1.899999976158142, 1.909999966621399, 1.8700000047683716, 1.9600000381469727, 1.9900000095367432, 2.0199999809265137, 1.840000033378601, 1.75, 1.6399999856948853, 1.5700000524520874, 1.5, 1.4299999475479126, 1.3700000047683716, 1.309999942779541, 1.25, 1.2100000381469727, 1.1699999570846558, 1.1200000047683716, 1.090000033378601, 1.059999942779541, 1.0299999713897705, 1.0700000524520874, 1.0800000429153442, 1.100000023841858, 1.1100000143051147, 1.1200000047683716, 1.1299999952316284, 1.149999976158142, 1.1799999475479126, 1.190000057220459, 1.2000000476837158, 1.2100000381469727, 1.2300000190734863, 1.25, 1.2699999809265137, 1.2999999523162842, 1.3200000524520874, 1.350000023841858, 1.3799999952316284, 1.409999966621399, 1.440000057220459, 1.4700000286102295]
    intensities: []
    

In this tutorial we will make basic tests to assert that both the robulab robot and the laptop are configured correctly. We will consider as well configured if we can start a PhaROS node that handle robulab robot, so we can publish motion messages through rostopic pub command and make it to move.

Setup

  1. Robulab charged and switched on.
  2. Laptop with Ubuntu 14.04
  3. ROS Indigo installed on laptop (Read: How to install ROS Indigo in Ubuntu 14.04)
  4. Your .bashrc file you should look like this:

    source /opt/ros/indigo/setup.bash
    source ~/PhaROS-ws/devel/setup.bash
    
    ROS_HOSTNAME=localhost    
    ROS_MASTER_URI=http://localhost:11311
    
  5. PhaROS installed (Read: How to Install PhaROS).

  6. Robot should be unplugged and free to move.

Ok, lets test it

  1. Create a package for testing the robulab. In a terminal run (this could take a couple of minutes):

    $ pharos create testrobulab
    
  2. Open the Pharo image of your PhaROS package by running this:

    $ rosrun testrobulab edit
    
  3. Install the required software to controll Robulab by executing this script.

    Gofer it  
        smalltalkhubUser: 'CAR' 
        project: 'Robulab'; 
        configurationOf: 'PureROS'; 
        load.
    ((Smalltalk at: #ConfigurationOfPureROS) project version: #bleedingEdge) load: {'kompai'}.
    
  4. Connect your laptop to UBNT wireless network.

  5. Start ROS by running roscore in a terminal.

    $ roscore
    

    If everything goes fine it should print something like this:

    ...
    started roslaunch server http://achao:56856/
    ros_comm version 1.11.3
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosdistro: <...>
     * /rosversion: <...>
    
    NODES
    
    auto-starting new master
    process[master]: started with pid [4073]
    ROS_MASTER_URI=http://achao:11311/
    
    setting /run_id to 6e36ef46-005d-11e4-ac41-b8ee65bb26b0
    process[rosout-1]: started with pid [4086]
    started core service [/rosout]
    

    Where achao is the hostname of the laptop I am using.

  6. Be sure that the Pharo image has not http proxy set, or if it has, they are coherent with your network configuration. To deactivate it you can just execute this in a workspace:

    NetworkSystemSettings useHTTPProxy: false
    
  7. Open a workspace and execute:

    PureROSKompai new scriptKompai1
    

    change it to scriptKompai2 if you are using Robulab2. This will create a PhaROS node that you can check by executing:

    $ rosnode list
    

    and you would see

    /PharoHandle-1404143614
    /rosout
    
  8. Let’s check the available topics to publish, in a terminal execute:

    $ rostopic list
    

    and the list of topics should be:

    /command_velocity
    /initialpose
    /kompai/scan
    /kompai2/pose
    /kompai2/trajectory/differential
    /orientation
    /rosout
    /rosout_agg
    
  9. Let’s publish some motion message in /command_velocity. For that lets use the command pub for rostopic which has the following structure: rostopic pub <topic id> <topic type> <message> command. Press [TAB] key to autocomplete: topic id, topic type and get message template.

    $ rostopic pub /command_velocity geometry_msgs/Twist "linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.5"   
    

And the robot will start to rotate. If so you are done :)

Jetstorm is the library to make Pharo communicate with the Lego Mindstorm Ev3. We provide the technical report. It explains the protocol and the architecture of the library.

If you want to cite it, here is the lines to copy and paste in bibtex:

@techreport{Lava14a,
   Author = {Jannik Laval},
   Institution = {URIA -- Ecole des Mines de Douai},
   Title = {JetStorm - A communication protocol between Pharo and Lego Mindstorms},
   Url = {www.jannik-laval.eu/assets/files/papers/Lava14a-JetStorm.pdf},
   Year = {2014}
}

With the evolution of JetStorm, the Technical Report will be improved.

For the 2014 edition of the CAR workshop (Control Architectures for Robots) we’re glad to have Dr. Florian Röhrbein as our invited speaker. His talk will be entitled: ”The Human Brain Project and its Neurorobotics Platform“. You’ll find below the abstract of this talk as well as a short bio of Dr. Röhrbein.

ABSTRACT

The HBP is one of two European Flagship projects dedicated to long-term basic research with a planned funding of 1 billion € over 10 years. The ultimate goal is to gain profound insights into brain functions, develop new treatments for brain diseases and build entirely new computing technologies. HBP has three research areas – Neuroscience, Medicine and Future Computing – and will develop six ICT platforms, dedicated to Neuro¬informatics, Brain Simulation, High Performance Computing, Medical Informatics, Neuromorphic Computing and Neurorobotics. HBP is completely open, i.e., these platforms will be made available to all interested research communities worldwide, enabling them to profit from each other. Our vision is that interactive supercomputing, driven by the needs of brain simulation, will impact many industries. Devices and systems, modelled after the brain, are to overcome current limits on the energy-efficiency, reliability and programmability, clearing the road for systems with brain-like intelligence. The Neurorobotics Platform will offer scientists and technology developers a software and hardware infrastructure allowing them to connect pre-validated brain models to detailed simulations of robot bodies and environments and to use the resulting neurorobotic systems in silico experiments and technology development. In this talk, I will give an overview of the HBP, outline the goals of the Neurorobotics subproject, and sketch the work which is planned for the next two years.

BIO

Dr. Florian Röhrbein is a senior lecturer at the research group “Robotics and Embedded Systems” in TUM’s Informatics Department. He is managing director of the Neurorobotics subproject of the Human Brain Project flagship. He has international work experience in various projects on brain-inspired cognitive systems. Research stays include the MacKay Institute of Communication and Neuroscience (UK), the HONDA Research Institute Europe (Germany) and the Albert Einstein College of Medicine (New York). He received his Diploma and PhD from TU München and the venia legendi for computer science from Universität Bremen. Prior to his involvement in the Human Brain Project, he was member of the executive committee of the ECHORD project and was responsible for the structured dialogue between industry and academia in European robotics.

Here are videos of a students’ project of a tracker robot that relies on an external kinect sensor driven through ROS. The kinect observes the whole scene. A PhaROS-based node controls the robot to track a ball based on the the kinect output. When no ball is detected, the robot goes back to a home position.


Ball Following Behavior


Go Home Behavior


Tracker Camera View

We have already reported about a team of our students competing for the 2014 edition of the Eurobot contest (french chapter). The project where they have been using PhaROS is now over. Below the last videos. Hopefully a new team will be continue the effort next year and build up on what has been done so far.


IronMines Bot in the lab scoring 4 balls and 1 triangle


IronMines Bot in the lab scoring 1 ball and 2 triangles


IronMines during the competition