From GCtronic wiki
Revision as of 13:13, 20 May 2019 by WikiSysop (talk | contribs) (Startup configuration)
Jump to: navigation, search



  • Raspberry Pi zero W (rPi) connected to the robot via I2C
  • interface between the robot base camera and the rPi via USB
  • 1 digital microphone and 1 speaker
  • USB hub connected to the rPi with 2 free ports
  • uUSB cable to the rPi uart port. Also ok for charging
  • 2 chargers. 1 for the robot battery and 1 for the auxiliary battery on top of the extension
  • charging contact points in front for automatic charging. External docking station available
  • several extension options. 6 i2C channels, 2 ADC inputs
  • several LED to show the status of the rPi and the power/chargers

Getting started

This introductory section explains the minimal procedures needed to work with the Raspberry Pi Zero W mounted on the Pi-puck extension board and gives a general overview of the available basic demos and scripts shipped with the system flashed on the micro SD. More advanced demos are described in the following separate sections (e.g. ROS), but the steps documented here are fundamental, so be sure to fully understand them.

The extension is mostly an interface between the e-puck robot and the Raspberry Pi, so you can exploit the computational power of a Linux machine to extend the robot capabilities.

In most cases, the Pi-puck extension will be attached to the robot, but it's interesting to note that it can be used also alone when the interaction with the robot isn't required.
The following sections assume the full configuration (robot + extension), unless otherwise stated.


The robot must be programmed with a special firmware in order to communicate via I2C bus with the Raspberry Pi mounted on the Pi-puck extension. The same I2C bus is shared by all the devices (camera, IMU, distance sensor, others extensions), the main microcontroller and the Raspberry Pi. Since the Raspberry Pi acts as I2C master, these devices will not be anymore reachable directly from the robot main microcontroller that will act instead as I2C slave.



The e-puck2 robot must be programmed with the following firmware e-puck2_main-processor_gumstix.elf (13.12.18) and the selector must be placed in position 10.

Turn on/off the extension

Console mode

The Pi-puck extension board comes with a pre-configured system ready to run without any additional configuration.
In order to access the system from a PC in console mode, the following steps must be performed:
1. connect a micro USB cable from the PC to the extension module. If needed, the drivers are available in the following link USB to UART bridge drivers
2. execute a terminal program and configure the connection with 115200-8N1 (no flow control). The serial device is the one created when the extension is connected to the computer
3. switch on the robot (the extension will turn on automatically); now the terminal should display the Raspberry Pi booting information. If the robot isn't present, then you can directly power on the extension board with the related button
4. login with user = pi, password = raspberry

Startup configuration

The following commands need to be executed at each startup, alternatively you can set to run them automatically at startup:

  • sudo python3 /home/pi/pipuck/camera-configuration.py
this is needed to correctly configure the camera of the robot

Communicate with the robot

An example showing how to exchange data between the robot and the Pi-puck extension is available in the system in the directory /home/pi/i2c_e-puck2.zip.
Unzip the example by issueing unzip i2c_e-puck2.zip and then build it with the command gcc i2c_e-puck2.c -o i2c_e-puck2.
Now you can run the program by issueing ./i2c_e-puck2; this demo will print the sensors data on the terminal and send some commands to the robot at 2 Hz.
The code is also available from i2c_e-puck2.zip.

Communicate with the IMU

An example showing how to read data from the IMU is called i2c_mpu9250 and can be found in the directory /home/pi/i2c_mpu9250/.
Simply run the program by issueing ./i2c_mpu9250 and then choose whether to get data from the accelerometer or gyroscope; this demo will print the sensors data on the terminal.
The code is also available from i2c_mpu9250.zip (to build it use the command gcc i2c_mpu9250.c -o i2c_mpu9250).

Communicate with the ToF sensor

Capture an image

Remember to follow the steps in the section System: Startup configuration if not already done.
The robot camera is connected to the Pi-puck extension as a USB camera, so you can access it very easily.
You can grab an image by going to the directory /home/pi/grab_image and then issueing the command ./grab_image -o image.jpg (CTRL+C to terminate)
A VGA image will be saved as image.jpg

Audio recording

Audio play

Use aplay to play wav files and mplayer to play mp3 files.

WiFi configuration

Specify your network configuration in the file /etc/wpa_supplicant/wpa_supplicant-wlan0.conf.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

You can have more than one network parameter to support more networks.

File transfer

Image streaming

Operating system

The system is based on Raspbian Stretch and can be downloaded from the following link gctronic-stretch-ros-kinetic-opencv3.4.1.img.tar.gz.

When booting the first time, the first thing to do is expanding the file system in order to use all the available space on the micro sd:
1. sudo raspi-config
2. Select Advanced Options and then Expand Filesystem
3. reboot

Desktop mode

The system starts in console mode, to switch to desktop (LXDE) mode issue the command startx.

Camera viewer


ROS Kinetic is integrated in the Pi-puck system.

Initial configuration

The ROS workspace is located in ~/rosbots_catkin_ws/
The e-puck2 ROS driver is located in ~/rosbots_catkin_ws/src/epuck_driver_cpp/
Remember to follow the steps in the section Requirements , only once.
Remember to follow the steps in the section System: Startup configuration, each time the system is powered on.
The PC (if used) and the Pi-puck extension are supposed to be configured in the same network.

Running roscore

roscore can be launched either from the PC or directly from the Pi-puck.
Before starting roscore, open a terminal and issue the following commands:

where roscore-ip is the IP of the machine that runs roscore
Then start roscore by issueing roscore.

Running the ROS node

Before starting the e-puck2 ROS node on the Pi-puck, issue the following commands:

where pipuck-ip is the IP of the Pi-puck extension and roscore-ip is the IP of the machine that runs roscore (can be the same IP if roscore runs directly on the Pi-puck).

To start the e-puck2 ROS node issue the command:
roslaunch epuck_driver_cpp epuck_minimal.launch debug_en:=true ros_rate:=20

The following graph shows all the topics published by the e-puck2 driver node:
Click to enlarge

Get the source code

The last version of the e-puck2 ROS node can be downloaded from the git: git clone -b e-puck2 https://github.com/gctronic/epuck_driver_cpp.git


OpenCV 3.4.1 is integrated in the Pi-puck system.