User Tools

Site Tools


Before you begin

WARNING: Before handling the robots, Please read the manual! There are two obvious ways in which you can damage the robot during normal handling:

  1. Inserting the batteries backwards. Batteries must be inserted contacts last, as noted on the battery. Please be careful when inserting the batteries.
  2. Attaching the charger while there is only one battery in the robot. The charger outputs a reasonably large current (4A), so at least two batteries must be inside the robot when connecting the charger. Please be careful when connecting the charger.

FIXME: Add a link to the manual PDF!

FIXME: Clean up obslete stuff. Generally, we need 2 types of instructions: a quickstart for newbies (assuming that the robots have already been configured properly) and robot configuration docs for maintainers. A detailed guide for newbies is available as instructions for the hands-on asignment in the PFTROS course. All of this info should somehow be consolidated.

[damjan] Migrate ROS -> Setting up ROS on a Pioneer

[damjan] Migrate ROS -> ROS Navigation and Mapping on a Pioneer

[damjan] Migrate ROS -> Pioneer Quick Launch


The robots' onboard computers have ROS Kinetic on Ubuntu Xenial. To get started quickly, follow the instructions from our P3DX launch package.

Tips and tricks

Clock synchronization

FIXME These instructions are at least 3 years old. Check if they still are valid.

To synchronize clocks of robots and/or host computer, install ntpdate.

sudo apt-get install ntpdate

To synchronize clock, on every robot and host computer run:

sudo ntpdate <server>

where <server> is an address of the specific ntp server, for example

To store the time to the hardware clock so that it is preserved when rebooting, run:

sudo hwclock -w

System backup

Once we have set everything up, it's a good idea to back up the whole system. This way, we will be able to restore the system to it's present state in case we mess somethig up later (which is very likely :)

We will use [ Clonezilla] to make the backup. The Pioneers don't have a CD-ROM, so we'll use it from a USB drive, following the instructions outlined [ here]. We will need two USB drives (or one drive with two partitions), one for Clonezilla, and a second one with at least 2GB of free space, where we'll save the backup.

To start the backup process, plug the disk into one of the available USB ports, reboot the computer, press the Del button repeatedly to enter the BIOS setup, and configure USB Disk 0 as the primary boot device. Once you have booted into the Clonezilla image, simply follow the on-screen instructions:

Language & keymaps: en_US.UTF-8.English Don't touch keymaps Select mode: device-image work with disks or partitions using images local_dev Use local device (E.g. hard drive, USB drive) Select destination drive: sdc1 <inserted USB drive> Clonezilla run mode: Beginner Beginner mode:Accept the default options savedisk Save_local_disk_as_an_image Image should be saved as: yyyy-mm-dd-<Serial>_<Name> (for.ex. 2012-02-29-GMC_3950_Charlie)

Choose image source drive: sda 40.0GB_INTEL_SSDSA2C… And finally, choose to check & repair source and image: -fsck-src-part Check and repair source file system before saving Yes, check saved image After Clonezilla has finished, restore the boot order in the BIOS menu and store the image somewhere safe.

Now you can start hacking-away at your Pioneer :)

System restore

To perform System restore with previously saved Clonezilla image, follow the same instructions as for performing system backup. For the destination drive choose your USB drive with saved image. When you reach the step to choose Clonezilla run mode select:

Beginner	Beginner mode:Accept the default options
restore disk   Restore_an_image_to_local_disk

The next step is to select the image, for example:


Finally select the target disk:

sda	40.0GB_INTEL_SSDSA2C...

You will have to confirm twice that you really want to restore the image.


Robot does not connect to FERWlan after boot

Normally, the robots should automatically connect to FERWlan. However, sometimes they can not be reached from outside upon boot, i.e. pinging and ssh connections fail. In such cases, it's best to just reboot the robot, after reboot it usually connects to FERWlan correctly. On rare occasions, a second reboot is required.

Investigating the issue further, if we connect to the robot by cable and issue the command:

$ nmcli con show

the wireless network interface will show up as “ethernet”. May be a variation of this issue.

FIXME: Investigate this further.

(obsolete) Setting up ROS on the robot and your PC

Now we need to set up the ROS installation on the robot as well as on the PC to be able to establish a communication between these two. The steps described in this section need to be performed both on the robot and your PC identically.

First we need to edit the /etc/hosts file (both on mobile robot and ground station):

$ sudo nano /etc/hosts

Change it from:    localhost <name of your pc>

to:    localhost
<ip of your pc>    <name of your pc>
<ip of pioneer pc>    <name of pioneer pc></pre>

Now we will edit the .bashrc file:

$ nano ~/.bashrc

On your PC append the following line:

export ROS_MASTER_URI=http://<name of pioneer pc>:11311

On the mobile robot append:

export ROS_MASTER_URI=http://<name of pioneer pc>:11311
export ROS_HOSTNAME=<name of pioneer pc>

Source (re-execute) .bashrc

$ . ~/.bashrc

Installing ROS and P2OS on your PC

Installing ROS on the PC

Assuming you are running Ubuntu, ROS installation should be pretty painless. Simply follow the instructions on the [|ROS wiki].

Having installed ROS, install the p2os stack

$ sudo apt install ros-kinetic-p2os-teleop ros-kinetic-p2os-urdf


To test your configuration you may follow the steps in the [|official p2os tutorial] under “8. Testing”.

On the host machine

Start roscore:

$ roscore

In a new terminal window, run the p2os dashboard

$ rosrun p2os_dashboard p2os_dashboard &

On the robot

Run the p2os driver:

$ rosrun p2os_driver p2os

==== On the host machine (again) ====

To run joystick teleoperation, you will need to make some modifications to teleop_joy.launch and params/joystick_logitech.yaml within the p2os_launch package. In teleop_joy.launch, after
  <remap from="/des_vel" to="/base_controller/command" />
  <remap from="/p2os_teleop/joy" to="/joy" />
  <remap from="/p2os_teleop/cmd_vel" to="/cmd_vel" />

In params/joystick_logitech.yaml modify the axis/key mappings as follows:
  axis_vx: 1
  axis_vw: 0
  deadman_button: 0
  run_button: 4 
(This setup works for the Logitech Attack3 joystick).

Launch the joystick teleoperation nodes:
  $ roslaunch p2os_launch teleop_joy.launch

After enabling the Pioneer's motors through the p2os_dashboard GUI (icon will turn green when motors are enabled), you shold be able to drive the robot around while holding the fire button.


Here are the fixes to some known problems

p2os_driver couldn't find parameters

Warning: The fix below is a hack (although it works :) We should figure out how the parameter loading actually works, and fix the problem by defining a new parameter set for our robot version.

The p2os_driver package has the operating parameters for a nubmer of robots hardcoded into it. If, however, you get the following warning when running the p2os_driver node:

P2OS: Warning: couldn't find parameters for this robot; using defaults

…it means that the driver could not find the parameters for your robot. As a result of this, the odometry data published by the p2os_driver node will most likely be wrong. This can become a problem if you want to use your robot for applications where odometry is crucial, like navigation and localization.

The most likely cause of this warning is that your robot has a type or subtype p2os_driver doesn't know about. When you run the node you get the information about your robot listed in this message:

Done: Connected to <name_of_robot>, a <type_of_robot> <subtype_of_robot> 

If you are working with one of the Pionners 3-DX which came with a LMS100 laser, it is likely that your robot subtype is defined (by the manufacturer) as p3dx-sh-lms1xx. The p2os_driver, however, only knows about the subtype p3dx-sh, and that's the source of the problem. To fix this we will simply change the subtype the p2os_driver is looking for to the one your robot has. To do this enter the following commands:

$ roscd p2os_driver
$ nano src/

This file contains the parameters for all the robots p2os_driver is compatible with. Now go to line 1240 of this file (you can use the search function of the text editor: Ctrl + W; search for p3dx-sh). The file should look like this around this line:


Change the string “p3dx-sh” to “p3dx-sh-lms1xx”, save the changes, and do a rosmake of the p2os_driver again. p2os_driver should now look for the subtype you have defined and should be able to find it. The warning will be gone, and the published odometry data should be correct.

(obsolete) Initial setup

Note: These setup instructions were written for setting up the Pioneers when they were received from the factory. The robots were shipped with Debian preinstalled on the onboard computers. These istructions are now obsolete, and are kept here for archival purposes only. They may be removed in the future.

Hardware setup

After unpacking the robots, attach and connect the laser first. See how it's attached to the robots that have already been set up. Don't forget to turn in on (there is a switch on the back of the laser).

Insert the batteries :)

Initial configuration should be possible connecting by Ethernet cable only, but I recommend connecting a monitor and keyboard (this is probbably even necessary to perform system backup).

Set up users and user privileges

Create a password for root:

$ passwd

Add user larics:

$ adduser larics

Edit the /etc/sudoers file:

$ nano /etc/sudoers

and add sudo privileges to larics:

# User privilege specification
root   ALL=(ALL) ALL

In the nano editor, press Ctrl-o to save your changes and In the Ctrl-x to quit the editor.

Change the computer name

In /etc/hostname:

$ nano /etc/hostname

and in /etc/hosts:

$ nano /etc/hosts

change every occurence of robot with the robot's actual name (e.g. charlie).

You can now restart the computer by issuing the command

$ shutdown -r now

and login as larics after the reboot.

Set up networking

Ethernet and WPA-encrypted networks

A fixed local IP address is already set up for the wired interface (it's the factory default We will a globally visible IP address for the wireless interface. Wired ethernet will be used only for directly connecting the robot to a computer with an Ethernet cable, for debugging purposes when something goes wrong. Wireless networking will be configured to automatically connect to the SSID: AUSwlan network. Robot names and IP addresses are written on the labels on top of each robot.

We will be making some significant changes to the /etc/network/interfaces file, so it is a good idea to make a backup copy of the file in your home folder:

$ sudo cp /etc/network/interfaces interfaces.backup

First, we need to create the WPA passphrase for connecting to the wireless network:

$ wpa_passphrase AUSwlan <network access password> > tmp

Now, make another copy of the /etc/network/interfaces file for editing, change its permissions and append the WPA passphrase to the end of the file:

$ sudo cp /etc/network/interfaces interfaces
$ sudo chown larics:larics interfaces
$ cat tmp >> interfaces
$ sudo nano interfaces

You can leave the wired Ethernet interface (eth0) configured as is.

Configure the wireless connection as follows:

iface wlan0 inet static
       wpa_ssid AUSwlan
       wpa_psk <the wpa passphrase that we appended to the bottom of the file>

You can delete the commented code below the static wlan0 configuration, and definitely delete all of the excess code generated by the wpa_passphrase command, (except the passphrase itself, of course :). In short , the wpa_psk line should be the last line in your file. The wireless connection allows us to connect to the robot from a computer that is on the same wireless network. It doesn't provide internet access to the robot.

Don't forget to copy the edited version of your interfaces file back to /etc/network:

$ sudo cp interfaces /etc/network/interfaces

Add the nameserver to the /etc/resolv.conf

$ sudo nano /etc/resolv.conf

Append the lines


Finally, you can restart the computer and check wireless connectivity upon reboot. You should be able to ping outside addresses by name, e.g.,

$ ping

Note: The procedure outlined above has one major drawback, namely you need to be connected to the same (local) network in order to communicate with the robots. We should figure out how to route traffic to the robots from outside.

Connecting to FER wireless infrastructure

Authentication is handled by the [ WPA supplicant] program.

Detailed step-by-step instructions for configuring WPA supplicant are available [|here]. Additional info is available at the [|Debian wiki].

A sample configuration file with detailed comments on all possible options is available under /usr/share/doc/wpa_supplicant/wpa_supplicant.conf.gz


Download the Eduroam [ installer|archive] (you will need an aai@EduHr account for the download), and copy it to the Pioneer. Unpack the installer, copy the security certificate to the system certificate store:

$ sudo cp eduroam_fer.hr_CA.pem /etc/ssl/certs

copy the configuration file:

$ sudo cp wpa_supplicant_example.conf /etc/wpa_supplicant/wpa_supplicant_eduroam.conf

Edit the file and inser yourt eduroam username and password.

Finally, edit the /etc/network/interfaces file, and change the block referring to the wlan0 interface to:

iface wlan0 inet dhcp
    pre-up wpa_supplicant -B -i IFACE -c/etc/wpa_supplicant_eduroam.conf
    post-down killall -q wpa_supplicant

Note: Following the procedure above, I can connect to eduroam network, ping the robot from inside the network (i.e. from a PC that's also connected to eduroam), and establish an ssh connection from inside the network. However, I wasn't able to ping external addresses from the robot (e.g.


The procedure for FERwlan is similar. In the folder /etc/wpa_supplicant/ create the file wpa_supplicant_ferwlan.conf and put the following lines inside:



      proto=WPA2 WPA
      pairwise=CCMP TKIP
      group=CCMP TKIP

Edit the /etc/network/interfaces file, and change the block referring to the wlan0 interface to:

iface wlan0 inet dhcp
    pre-up wpa_supplicant -B -i wlan0 -c/etc/wpa_supplicant/wpa_supplicant_ferwlan.conf
    post-down killall -q wpa_supplicant

Restart networking:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Note: Following the procedure above, I was able to achieve full connectivity (ping, ssh to the robot, access outside network from the robot).

Testing if everything works

To test if everything is working as it should be, disconnect the screen and keyboard from the robot.

On your PC:

$ cd /usr/local/Aria/ArNetworking/examples
$ ./serverDemo -connectLaser
  • Install install the Mobile Eyes application from the MobileRobots CD that was shipped with the robot. Start the application, connect to the robot, try driving it around (you can use one of the Logitech joysticks shipped with the robots) and check the sensor readings.

(obsolete) Installing Ubuntu 14.04 Server, ROS, p2os driver

Installing Ubuntu 14.04 Server is pretty straightforward, just follow instructions in [|Installation]. However, the following minor problems occurred during installations:

  • Wifi keyboard suddenly not working - use wired keyboard
  • Installation failed (busybox_initramfs problem) - reinstall your USB boot disk. In my case, USB boot disk was created by Ubuntu Startup Creator. The solution was to create the USB boot disk by a Windows tool (Rufus on Windows 10).
  • Installation failed because CD-ROM could not be mounted. Solution is to mount the usb disk to /cdrom:
$ ALT + F2 (opens a console)
$ umount /dev/sdb1 (assuming usb disk is mounted to /dev/sdb1)
$ mount -t vfat /dev/sdb1 /cdrom
$ ALT + F1 (returns to the installation window)

To install ROS, install the following packages:

$ sudo apt-get install ros-indigo-ros-base ros-indigo-robot ros-indigo-navigation ros-indigo-gmapping ros-indigo-p2os-driver

To be able to run p2os_driver, add user larics to group dialout:

$ usermod -a -G dialout larics

If you get an error after calling roscore ''[rosout-1] process has died ... terminate called after throwing an instance of 'std::runtime_error'' set the following environmental variable in .bashrc:

  $ export LC_ALL=C

The previous error seems to be related to boost library. As described in [|Boost], it could be solved by applying patch. (haven't tried yet)

robot/pioneer.txt · Last modified: 2017/05/12 09:29 (external edit)