1. Preamble

The aim of this module is to provide methods and tools to integrate several technologies presented in the AI Courses taking place in the context of the "AI Challenge" (aka Défi IA) in order to develop intelligent systems that are capable to perceive, reason and act in the physical world where they are situated, or interact with other intelligent systems or human users The lectures will introduce various technologies such as the multi-agent oriented programming JaCaMo platform, the Robot Operating System (ROS), TurtleBot Robot as well as how to use them to integrate the other AI technologies already presented in the other course units.

At the end of this course unit, the students will have methodological and practical skills to develop intelligent systems. They will moreover have knowledge and understanding of the challenges raised by the development of such systems.

2. Course Organisation



Practical Work

September 11, 2020


September 21, 2020


Robotic Operating System (ROS)

October 12, 2020


ROS, TurtleBot

  • Groups Definition and Projects Presentation

  • Work in group on each component of the Project

November 02, 2020


Work in group on each component of the Project and first integration

November 23, 2020


Work in group on each component of the Project and first integration and tests

December 14, 2020


Work in group on each component of the Project and first integration and tests

January 18, 2021



Work in group on each component of the Project and first integration and tests

January 25, 2021


Presentation / Demos

3. Project

4. Resources

In the following sections, you can find resources (i) on multi-agent systems and the JaCaMo platform, (ii) on the Robotic Operating System (ROS), (iii) on the Turtlebot 3 environment for developping behaviours, (iv) on how to interface ROS with other systems (Java, Knowledge Representation, Voice and Image Processing, Machine Learning).

4.1. Multi-Agent Oriented Programming JaCaMo Platform

4.2. Robotic Operating System (ROS)

The Robot Operating System (ROS) is an open-source, software framework for robot software development. It has two basic sides: (i) operating system side, (ii) suite of user contributed packages or stacks

The operating system-like functionalities hide the heterogeneous computer cluster by providing: hardware abstraction, low-level device control, commonly used functionality, message-passing between processes, package management.

ROS is based on a graph architecture where processing takes place in a distributed framework of processes (aka nodes). ROS enables executables to be individually designed and loosely coupled at runtime.

Installation of ROS
Tutorials / Books / Documentations

4.3. TurtleBot3

To develop intelligent behaviors for the TurtleBot3 robots, we will develop nodes and integrate them on ROS. These intelligent behaviors will be implemented as nodes coupled to the Turtlebot, publishing messages to the ROS master node and subscribing to other topics of information. These messages will share various information such as the x,y positions, speed, direction, etc. Controls on these behaviors is achieved by posting different values related to topics to which these nodes are subscribed.

For further details see the "Robotic Operating System" section of this course.

Bridges/Interfaces to ROS

One may communicate with ROS nodes using the rosbridge v2.0 protocol: WebSocket-based protocol to exchange information and controls using JSON messages.

The rosbridge specification is available here:

The RosBridge Server which is used in the current setting for the project is: https://github.com/RobotWebTools/rosbridge_suite, on ROS Wiki

The RosBridge Java Client may be based on several implementations. One of this is: the h2r/java_rosbridge rosbridge client implementation for Java:

For this, all that is required is to declare a dependency in the corresponding section of your Maven project file.


Other libraries for RosBridge Clients written in Python, Javascript:

  • Python ROS Bridge library (roslibpy): https://github.com/gramaziokohler/roslibpy This library allows to use Python and IronPython to interact with ROS. It uses WebSockets to connect to rosbridge 2.0 and provides publishing, subscribing, service calls, actionlib, TF, and other essential ROS functionality. Unlike the rospy library, this does not require a local ROS environment, allowing usage from platforms other than Linux. The API of roslibpy is modeled to closely match that of roslibjs. readthedocs

  • The Standard ROS JavaScript Library: http://wiki.ros.org/roslibjs (Tutorials) (GitHub)

Integrating Knowledge representation and reasoning technologies with ROS

In order to develop some advanced reasoning behaviours on top of the data perceived by the robot sensors, you’ll need to subscribe to the right topics, and translate the messages that you receive in a knowledge representation language that you want to use to do some reasoning on these data: formulas in Prolog, triples in RDF, etc.

In the "agent working in a simple working environment" course, you learnt how to create Prolog-like clauses and beliefs using the Jason Agent Programming Language and how to use them to do some reasoning and infer new beliefs.

If you want to use other knowledge representation and reasoning formalism such as RDF and the Jena engine , you may want to use the Jena library. The Jena library can be used to create, manipulate, query, RDF graphs. This is done using an instance of the Jena Model interface. Jena defines different implementations of this interface, some of which enable the use of automatic reasoning. The following page describes how inference rules with arithmetic operations can be declared using Jena

The Jena library can be used simply by declaring a dependency in the corresponding section of your Maven project file.

You will need to connect this Java code to the Jason agent programming language. This may be done by writing Jason internal actions as seen during the course.

Voice TeleOperation of TurbleBot
Integrating Machine Learning and Turtlebot

5. Further readings