1. CoolBOT.
An Introduction
Antonio Carlos Domínguez Brito
Inst. Univ. SIANI/Dpto. Informática y Sistemas
[1] Universidad de Las Palmas de Gran Canaria
[www.coolbotproject.org] Spain
2. CoolBOT
Table of Contents
1. Overview
2. CoolBOT Components
3. CoolBOT Port Connections
4. CoolBOT Views
5. CoolBOT Probes
6. Development Tools
7. A Real Example
[2]
[www.coolbotproject.org]
8. Conclusions and Future Work
3. CoolBOT
Overview
CoolBOT is a
distributed
CBSE
(Component
Based Software
Engineering) C++
[3] programming
[www.coolbotproject.org] framework
4. CoolBOT
Overview
CoolBOT's design principles:
1. Component based → easy
software integration.
2. Take advantage of
multithreading/multicores OSs.
3. System control & monitoring.
4. Transparent distributed
[4]
computing.
[www.coolbotproject.org]
5. CoolBOT
Overview
A system is
composed by
integrations and
software
components
[5]
[www.coolbotproject.org]
6. CoolBOT
Overview
There are three
kinds of software
components:
components,
views and
probes
[6]
[www.coolbotproject.org]
7. CoolBOT
Overview
Integrations are
processes in the
underlying OS.
They contain
components
[7]
[www.coolbotproject.org]
8. CoolBOT
Overview
Integrations also may
contain views, and a
machine can host
several integrations
[8]
[www.coolbotproject.org]
9. CoolBOT
Overview
probes are software
components to interface
non CoolBOT software
with CoolBOT systems,
and viceversa
[9]
[www.coolbotproject.org]
11. CoolBOT
Overview
CoolBOT users
program at system
level
[11]
[www.coolbotproject.org]
12. CoolBOT CoolBOT runtime
infrastructure
Overview
supports system level
abstractions and
execution
[12]
[www.coolbotproject.org]
13. CoolBOT
Overview
CoolBOT runtime
infrastructure is
supported by the OS
API and the ACE
library for network
communications
[13]
[www.coolbotproject.org]
15. CoolBOT
CoolBOT Components
CoolBOT components are port automata
(input port data packets receptions trigger
automaton transitions)
[15]
[www.coolbotproject.org]
16. CoolBOT
CoolBOT Components
Meta state running
implements component's
functionality. It is user
defined
[16]
[www.coolbotproject.org]
17. CoolBOT
CoolBOT Components
Components' input and output
ports constitute its external
[17]
interface. Through them they
[www.coolbotproject.org]
receive and send port packets
(data packets)
18. CoolBOT
CoolBOT Port Connections
Port connections are
unidirectional (from input port
to output port), and follow a
publish/subscribe
communication pattern
one publisher,
multiple subscribers
[18]
[www.coolbotproject.org]
19. CoolBOT
CoolBOT Port Connections
Port connections are
unidirectional (from input port
to output port), and follow a
publish/subscribe
communication pattern
multiple publishers,
one subscriber
[19]
[www.coolbotproject.org]
20. CoolBOT
CoolBOT Port Connections
Components interact
using only port
connections. Thus, a
system can be seem
as a network of
components
interchanging port
packets and running as
data driven machines
[20]
[www.coolbotproject.org]
21. CoolBOT
CoolBOT Port Connections
There are different
typologies for input and
output ports for establishing
port connections with
different communication
patterns: fifo on input port,
“blackboard” on output
port and multipacket.
[21]
[www.coolbotproject.org]
22. CoolBOT
CoolBOT Port Connections
Port Connections Typologies
Active Publisher/Passive Subscriber (AP/PS)
Output Port Input Port Port Connection Type
tick tick tick connections
last last connections
generic fifo fifo connections
ufifo unbounded fifo connections
multipacket
multipacket multipacket connections
lazymultipacket
Active Publisher/Passive Subscriber (PP/AS)
poster poster poster connections
[22]
[www.coolbotproject.org]
23. CoolBOT
CoolBOT Port Connections
A port connection can be
established when the
typologies of the ports
involved are compatible,
and the type of port
packets they transport are
the same
[23]
[www.coolbotproject.org]
24. CoolBOT
CoolBOT Port Connections
Integrations are CoolBOT
processes hosting
component instances at
runtime
Port connections
established between
components (local
components) in the same
integration are supported
transparently by the
underlying OS thread API
[24]
[www.coolbotproject.org]
25. CoolBOT
CoolBOT Port Connections
Integrations are CoolBOT
processes hosting
component instances at
runtime
Port connections between
components in different
integrations are
multiplexed over TCP/IP
connections
[25]
[www.coolbotproject.org]
26. CoolBOT
CoolBOT Views
The second type of
software component
available in CoolBOT
are views
CoolBOT views expand
component interfaces to
decouple and separate
system computation
and control from
graphical interfaces
for monitoring and
control
[26]
[www.coolbotproject.org]
27. CoolBOT
CoolBOT Views
Likewise components,
views have also an
external interface of
input and output ports
[27]
[www.coolbotproject.org]
28. CoolBOT
CoolBOT Views
CoolBOT integrations
may contain indistinctly
components and views
As software components
views may establish
port connections with
any other component or
view (local or remote) in
a system
[28]
[www.coolbotproject.org]
29. CoolBOT
CoolBOT Views
CoolBOT integrations
may contain indistinctly
components and views
As software components
views may establish
port connections with
any other component or
view (local or remote) in
a system
[29]
[www.coolbotproject.org]
30. CoolBOT
CoolBOT Probes
The third type of software
component available in CoolBOT
are probes
Expanding even more the
concept of component interface
probes implement interfaces of
input and output ports in order
to allow non CoolBoT software to
intercommunicate with CoolBoT
components
[30]
[www.coolbotproject.org]
31. CoolBOT
CoolBOT Probes
The third type of software
component available in CoolBOT
are probes
CoolBOT probes implement
interfaces of input and output
ports in order to allow non
CoolBoT software to
intercommunicate with CoolBoT
components
[31]
[www.coolbotproject.org]
32. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
[32]
[www.coolbotproject.org]
33. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
coolbot-bundle creates
[33] workspaces for developing
[www.coolbotproject.org] components, views, port
packets and integrations
34. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
coolbot-c is the CoolBOT
compiler. We can generate C++
skeletons for components,
probes, views, port packets
[34] and integrations
[www.coolbotproject.org]
35. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
coolbot-c is the CoolBOT
compiler. We can generate C++
skeletons for components,
probes, views, port packets
and integrations
[35]
[www.coolbotproject.org]
36. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
coolbot-c is the CoolBOT
compiler. We can generate C++
skeletons for components,
probes, views, port packets
and integrations
[36]
[www.coolbotproject.org]
37. CoolBOT CoolBOT provides two tools for
developing CoolBOT software:
Development Tools coolbot-bundle and coolbot-c
coolbot-c is the CoolBOT
compiler. We can generate C++
skeletons for components,
probes, views, port packets
[37] and integrations
[www.coolbotproject.org]
38. CoolBOT
An Example: A Secure
[38]
Navigation System
[www.coolbotproject.org]
39. CoolBOT
An Example: A Secure
[39]
Navigation System
[www.coolbotproject.org]
40. CoolBOT
An Example: A Secure
[40]
Navigation System
[www.coolbotproject.org]
41. /*
* File: player-robot.coolbot-component
* Description: description file for PlayerRobot component
* Date: 09 March 2012
* Generated by coolbot-bundle version 1.0.0
*/
component PlayerRobot
CoolBOT
An Example: A Secure
Navigation System
{
header
{
author "Antonio Carlos Domínguez Brito <adominguez@iusiani.ulpgc.es>";
description "PlayerRobot component";
institution "IUSIANI - Universidad de Las Palmas de Gran Canaria";
version "0.1"
};
constants
{
LASER_MAX_RANGE="LaserPacket::LASER_MAX_RANGE";
SONAR_MAX_RANGE=5000; // millimeters
private FIFO_LENGTH=5;
private ROBOT_DATA_INCOMING_FREQUENCY= 10; // Hz
private LASER_MIN_ANGLE= -90; // degrees
private LASER_MAX_ANGLE= 90; // degrees
private LASER_SCAN_RESOLUTION= 100; // 0.01 degrees
private LASER_RANGE_RESOLUTION= 10; // millimeters
private MAX_CONNECTION_TIMEOUT=5000; // milliseconds
private LISTENING_BLOCKING_TIME=100; // milliseconds
private DEFAULT_PERIOD=100 // milliseconds
[41] };
...
[www.coolbotproject.org]
42. … // continuing player-robot.coolbot-component
// input ports
input port Commands type fifo port packet CommandPacket length FIFO_LENGTH;
input port NavigationCommands type fifo port packet ND::CommandPacket length FIFO_LENGTH;
//output ports
output port RobotConfig type poster port packet ConfigPacket;
CoolBOT
An Example: A Secure
Navigation System
output port Odometry type generic port packet OdometryPacket; // network buffer FIFO_LENGTH;
output port OdometryReset type generic port packet PacketTime;
output port BumpersGeometry type poster port packet "BumperGeometryPacket";
output port Bumpers type generic port packet BumperPacket;
output port SonarGeometry type poster port packet "SonarGeometryPacket";
output port SonarScan type generic port packet "SonarPacket";
output port LaserGeometry type poster port packet PacketFrame3D;
output port LaserScan type generic port packet LaserPacket;
output port Power type generic port packet PacketDouble;
output port CameraImage type poster port packet CameraImagePacket;
output port PTZJoints type generic port packet "PacketPTZJoints";
exception RobotConnection { description "Robot connection failed."; };
exception NoPositionProxy { description "Position proxy not available in this robot."; };
exception InternalPlayerException { description "A Player library exception has been thrown."; };
entry state Main
{
transition on Commands,NavigationCommands,Timer;
};
[42] };
[www.coolbotproject.org]
43. /*
* File: player-robot-packets.coolbot-packets
* Description: PlayerRobot port packets.
* Date: 03 January 2012
* Generated by coolbot-bundle version 1.0.0
*/
packets PlayerRobot
CoolBOT
An Example: A Secure
Navigation System
{
header
{
author "Antonio Carlos Domínguez Brito <adominguez@iusiani.ulpgc.es>";
description "PlayerRobot port packets";
institution "IUSIANI - Universidad de Las Palmas de Gran Canaria - Spain";
version "0.1"
};
port packet OdometryPacket
{
data members
{
position: type "Frame2D";
velocity: type "Frame2D";
odometer: type "double";
};
};
port packet BumperPacket
{
data members
[43] {
// typedef PackingArray<bool,MAX_NUMBER_OF_BUMPERS> BumperArray
[www.coolbotproject.org] bumpers: type "BumperArray";
};
};
...
44. … // continuing player-robot-packets.coolbot-packets
port packet CommandPacket
{
data members
{
id: type "int";
odometry: type "Frame2D";
CoolBOT
An Example: A Secure
Navigation System
velocity: type "Frame2D";
ptz: type "PTZJoints";
ptzVel: type "PTZJoints";
};
};
port packet LaserPacket
{
data members
{
// typedef PackingArray<LaserScanPoint,MAX_NUMBER_OF_LASER_SCAN_POINTS>
LaserArray
points: type "LaserArray";
};
};
...
[44]
[www.coolbotproject.org]
45. … // continuing player-robot-packets.coolbot-packets
port packet ConfigPacket
{
data members
{
frame: type "Frame2D";
size: type "Coordinates2D";
CoolBOT
An Example: A Secure
Navigation System
maxDiagonal: type "double";
radius: type "double";
diameter: type "double";
initialTime: type "Time";
};
};
port packet CameraImagePacket
{
data members
{
image: type "RGBGridType";
};
};
};
[45]
[www.coolbotproject.org]
46. CoolBOT
An Example: A Secure
[46]
Navigation System
[www.coolbotproject.org]
47. CoolBOT
An Example: A Secure
[47]
Navigation System
[www.coolbotproject.org]
48. /*
* File: mbicp-corrector.coolbot-component
* Description: MbICP Corrector component
* Date: 04 January 2012
* Generated by coolbot-bundle version 1.0.0
*/
component MbICPCorrector
CoolBOT
An Example: A Secure
Navigation System
{
header
{
author "Eduardo Aparicio Cardenes <eduardo.aparicio.cardenes@gmail.com>";
description "MbICP Corrector component";
institution "ULPGC - Universidad de Las Palmas de Gran Canaria";
version "0.1"
};
constants
{
LASER_MAX_RANGE="LaserPacket::LASER_MAX_RANGE";
};
// input ports
input port ODOMETRY type last port packet PlayerRobot::OdometryPacket;
input port LASER_GEOMETRY type poster port packet PacketFrame3D;
input port LASER_SCAN type last port packet PlayerRobot::LaserPacket;
//output ports
output port ODOMETRY_CORRECTED type generic port packet OdometryPacket;
output port EXECUTION_INFO type generic port packet DebugExecutionPacket;
...
[48]
[www.coolbotproject.org]
49. … // continuing mbicp-corrector.coolbot-packets
entry state Waiting
{
transition on LASER_GEOMETRY,ODOMETRY;
};
state Main_State
CoolBOT
An Example: A Secure
Navigation System
{
transition on ODOMETRY,LASER_GEOMETRY,LASER_SCAN;
};
thread main
{
input box { ODOMETRY, LASER_GEOMETRY };
};
thread mbicpThread
{
input box { LASER_SCAN };
active in Main_State;
};
};
[49]
[www.coolbotproject.org]
50. CoolBOT
An Example: A Secure
[50]
Navigation System
[www.coolbotproject.org]
51. CoolBOT
An Example: A Secure
[51]
Navigation System
[www.coolbotproject.org]
52. CoolBOT
An Example: A Secure
[52]
Navigation System
[www.coolbotproject.org]
53. CoolBOT
An Example: A Secure
[53]
Navigation System
[www.coolbotproject.org]
54. CoolBOT
An Example: A Secure
[54]
Navigation System
[www.coolbotproject.org]
55. CoolBOT
An Example: A Secure
[55]
Navigation System
[www.coolbotproject.org]
56. /*
* File: player-robot-view.coolbot-view
* Description: PlayerRobotView View
* Date: 03 January 2012
* Generated by coolbot-bundle 1.0.0
*/
view PlayerRobotView
CoolBOT
An Example: A Secure
Navigation System
{
header
{
author "Antonio Carlos DomÃ-nguez-Brito <adominguez@iusiani.ulpgc.es>";
description "PlayerRobotView View";
institution "IUSIANI - Universidad de Las Palmas de Gran Canaria - Spain";
version "0.1"
};
constants
{
private DEFAULT_REFRESHING_PERIOD=250; // milliseconds
private DRAW_AREA_MARGIN=3; // pixels
private DRAW_AREA_WIDTH=300; // pixels
private DRAW_AREA_HEIGTH=300; // pixels
private DRAW_AREA_XY_DIVS=8; // should be an even number
// for PlayerRobotSpace::PlayerRobot::LASER_MAX_RANGE player-robot-h should be included
private SENSOR_MAX_RANGE= "PlayerRobotSpace::PlayerRobot::LASER_MAX_RANGE/1000"; //
meters
private GRID_AXES_FONT_SIZE=8; // font points
private ARROW_WIDTH=6; // pixels (should be an even number)
[56] private ARROW_DEEP=6; // pixels
private HALF_ARC_ANGLE=5; // degrees
[www.coolbotproject.org] private DIRECT_COMMAND_TRANSLATIONAL_SPEED= 250; // millis/sec
private DIRECT_COMMAND_ROTATIONAL_SPEED= 20; // degree/sec
};
...
57. … // continuing player-robot-view.coolbot-view
input port ODOMETRY type last port packet PlayerRobot::OdometryPacket;
input port SONAR_GEOMETRY type poster port packet PlayerRobot::SonarGeometryPacket;
input port SONAR_SCAN type last port packet PlayerRobot::SonarPacket;
input port LASER_GEOMETRY type poster port packet PacketFrame3D;
input port LASER_SCAN type last port packet PlayerRobot::LaserPacket;
CoolBOT
An Example: A Secure
Navigation System
input port POWER type last port packet PacketDouble;
output port COMMANDS type generic port packet PlayerRobot::CommandPacket;
};
[57]
[www.coolbotproject.org]
58. CoolBOT
An Example: A Secure
[58]
Navigation System
[www.coolbotproject.org]
59. CoolBOT
An Example: A Secure
[59]
Navigation System
[www.coolbotproject.org]
60. CoolBOT
An Example: A Secure
[60]
Navigation System
[www.coolbotproject.org]
61. /*
* File: sns-views.coolbot-integration
* Description: CoolBOT Secure Navigation System.
* Date: 03 January 2012
* Generated by coolbot-bundle version 1.0.0
*/
integration sns_views
CoolBOT
An Example: A Secure
Navigation System
{
header
{
author "Antonio Carlos Domí-nguez Brito <adominguez@iusiani.ulpgc.es>";
description "CoolBOT Secure Navigation System - integrates only views";
institution "IUSIANI - Universidad de Las Palmas de Gran Canaria";
version "0.1"
};
machine addresses
{
local dis172ac: "dis172ac.dis.ulpgc.es"; //"127.0.0.1";
remote_dis172acplg: "dis172ac.dis.ulpgc.es";//"127.0.0.1";
};
listening ports
{
ROBOT_PORT: 1950;
NAVIGATION_MAP_PORT: 1970;
ND_PORT: 1980;
NAVIGATION_PLANNER_PORT: 1990;
ROBOT_VIEW_PORT: 1955;
[61] CAMERA_VIEW_PORT: 1965;
NAVIGATION_MAP_VIEW_PORT: 1975;
[www.coolbotproject.org] ND_VIEW_PORT: 1985;
NAVIGATION_PLANNER_VIEW_PORT: 1995;
VALLEY_CHECK_VIEW_PORT: 2005;
};
...
62. … // continuing file sns-views.coolbot-integration
local instances
{
/*
* Local instances definition.
*/
view robotView: PlayerRobotView listening on ROBOT_VIEW_PORT with description "Robot";
CoolBOT
An Example: A Secure
Navigation System
view cameraView: SphereView listening on CAMERA_VIEW_PORT with description "PTZ Camera";
view navigationMapView: GridView listening on NAVIGATION_MAP_VIEW_PORT with description
"Navigation Map";
view ndView: NDView listening on ND_VIEW_PORT with description "ND Navigation";
view valleyCheckView: RasterView listening on VALLEY_CHECK_VIEW_PORT with description "ND
Valley Checks";
view navigationPlannerView: PlannerView listening on NAVIGATION_PLANNER_VIEW_PORT with
description "Navigation Planner";
};
remote instances on remote_dis172acplg
{
/*
* Local instances definition.
*/
component robot: PlayerRobot listening on ROBOT_PORT;
component navigationMap: GridMap listening on NAVIGATION_MAP_PORT;
component nd: ND listening on ND_PORT;
component navigationPlanner: Planner listening on NAVIGATION_PLANNER_PORT;
};
...
[62]
[www.coolbotproject.org]
63. … // continuing file sns-views.coolbot-integration
port connections
{
connect robot:ODOMETRY to robotView:ODOMETRY;
connect robot:SONARGEOMETRY to robotView:SONAR_GEOMETRY;
connect robot:SONARSCAN to robotView:SONAR_SCAN;
connect robot:LASERGEOMETRY to robotView:LASER_GEOMETRY;
CoolBOT
An Example: A Secure
Navigation System
connect robot:LASERSCAN to robotView:LASER_SCAN;
connect robot:POWER to robotView:POWER;
connect robotView:COMMANDS to robot:COMMANDS;
connect robot:ROBOTCONFIG to navigationMapView:ROBOT_CONFIG;
connect navigationMap:MAP to navigationMapView:GRID_MAP;
connect navigationPlanner:PLANNERPATH to navigationMapView:PLANNER_PATH;
connect navigationPlanner:MATCHINGREGIONS to navigationMapView:MATCHING_REGIONS;
connect navigationMapView:PLANNER_COMMANDS to navigationPlanner:COMMANDS;
connect navigationMapView:ND_COMMANDS to nd:COMMANDS;
connect robot:CAMERAIMAGE to cameraView:CAMERA_IMAGE;
connect robot:PTZJOINTS to cameraView:PTZ_JOINTS;
connect cameraView:COMMANDS to robot:COMMANDS;
connect robot:ROBOTCONFIG to ndView:ROBOT_CONFIG;
connect nd:NDDATA to ndView:ND_DATA;
connect navigationMap:GRIDCONFIG to navigationPlannerView:GRID_CONFIG;
[63] connect navigationPlanner:PLANNERMAP to navigationPlannerView:PLANNER_MAP;
[www.coolbotproject.org]
connect nd:NDDATA to valleyCheckView:ND_DATA;
};
};
64. CoolBOT
An Example: A Secure
[64]
Navigation System
[www.coolbotproject.org]
65. CoolBOT
An Example: A Secure
[65]
Navigation System
[www.coolbotproject.org]
Now
Videos!
66. CoolBOT
An Example: A Secure Navigation System
[66]
[www.coolbotproject.org] http://www.youtube.com/watch?v=f7Qtoc1XOTU&hd=1
67. CoolBOT
An Example: A Secure Navigation System
[67]
[www.coolbotproject.org]
http://youtu.be/WzjMBpaNX_w
68. CoolBOT
Conclusions and Future Work
∙ In CoolBOT, decoupling interfaces makes
software components deployable and integrable
wherever we want, no matter its functionality, or
which grade of granularity they have.
▸ Components (implement generic algorithms)
▸ Views (implement graphical interfaces)
▸ Probes (implement generic interfaces)
∙ CoolBOT is an open source project available at:
[68]
[www.coolbotproject.org] www.coolbotproject.org
69. CoolBOT
Conclusions and Future Work
●
Ongoing/Future work:
1. Documentation.
2. Integration with ROS.
3. Runtime interpret for integrations.
3.1. Component Name Service.
3.2. Remote instantiation Service.
[69]
[www.coolbotproject.org]
70. THANK YOU VERY
MUCH FOR YOUR
ATTENTION
[70]
[www.coolbotproject.org]