Writing Your First Rapp
We want to show you how to write a rocon application (rapp). It is a bunch of instructions how to launch the application, something like a wrapper which has special structure and logic. You can find more information in Rapp Specification Document.
We will write a rapp for turtlebot_follower package.
Prerequisites
This lesson is a continuation of the previous lesson: “Multiple TurtleBots in Concert”. If you have not done that lesson, do it firstly.
Creating follower Rapp
1. Create a package my_rapps
.
cd ~/my_ws/src
catkin_create_pkg my_rapps
2. Create a folder for follower
rapp.
cd my_rapps
mkdir -p rapps/follower
3. Copy files from
github.
There are four files: follower.interface
, follower.launch
, follower.rapp
,
follower_bubble_icon.png
. You can find more information about these files in
Create your First Rapp
lesson or on rocon page.
4. Create an empty follower.parameters
file.
touch follower.parameters
5. Modify follower.launch
file. Change default simulation
value to true
.
Old value:
<arg name="simulation" default="false"/>
New value:
<arg name="simulation" default="true"/>
6. Add this string in follower.rapp
file.
public_parameters: follower.parameters
The result:
display: Follower
description: Take the TurtleBot for a stroll. TurtleBot will follow whatever is in front of it.
compatibility: rocon:/turtlebot
launch: follower.launch
public_interface: follower.interface
public_parameters: follower.parameters
icon: follower_bubble_icon.png
7. Export the rapp in my_rapps/package.xml
file by adding this string
in <export>
tag.
<export>
<rocon_app>rapps/follower/follower.rapp</rocon_app>
</export>
8. Build package.
source /opt/ros/indigo/setup.bash
cd ~/my_ws/
catkin_make
Testing
1. Change the path.
source ~/my_ws/devel/setup.bash
2. Show existing rapps.
rocon_app list
You will see the long list.

rocon_app list
Find my_rapps.

my_rapps
3. Show information about your rapp.
rocon_app info my_rapps/follower
You will see this output.

my_rapps Information
Modifying gazebo_concert Package
1. Edit gazebo.parameters
file.
cd ~/my_ws/src/rocon_tutorials/concert_tutorials/gazebo_concert/solutions
Modify robot_rapp_whitelist
for each robot.
Old value:
robot_rapp_whitelist: [rocon_apps, turtlebot_rapps]
New value:
robot_rapp_whitelist: [rocon_apps, turtlebot_rapps, my_rapps]
2. Build package.
source /opt/ros/indigo/setup.bash
cd ~/my_ws/
catkin_make
Running follower Rapp
1. Change the path.
source ~/my_ws/devel/setup.bash
2. Launch gazebo_concert.
roslaunch gazebo_concert concert.launch
You will see these strings in each robots terminal.
[INFO] [WallTime: 1456200881.276905] [5.990000] Rapp Manager : 'my_rapps/follower' added to the list of runnable apps.

Rapp Manager
3. Start rocon_remocon.
rocon_remocon
4. Press Refresh
.
5. Select Gazebo Concert
->User
->Gazebo Viewer
.
You will see the familiar gazebo world.

Gazebo Concert
6. In a new terminal start follower rapp.
rosservice call /gamza2/start_rapp my_rapps/follower [] []
# Output:
started: True
error_code: 0
message: Success
application_namespace: gamza2
You will see in gamza2
terminal:
[INFO] [WallTime: 1456201608.858077] [15.600000] Rapp Manager : request received to start rapp [my_rapps/follower]
[INFO] [WallTime: 1456201608.858627] [15.600000] Rapp Manager : starting app 'my_rapps/follower' underneath gamza2
NOTE: Only one rapp can be run at one time, otherwise a resource conflict might occur.
7. Select Concert Teleop
in Interactions Chooser
.
8. Select gamza1
in the resource list and capture it.
9. Drive gamza1
using joystick to initiate following behavior.
10. Stop rapp.
rosservice call /gamza2/stop_rapp
# Output:
stopped: True
error_code: 0
message: Success
11. Interrupt the processes. Close the windows.
You can watch these steps in the video:
Writing Your First Rapp
We have finished with robot side, go to the next lesson to write user side.