botsense  3.2.0
RoadNarrows Client-Server Proxied Services Framework
main.doxy
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: RoadNarrows BotSense Package
4 //
5 // File: main.doxy
6 //
7 // Description:
8 // This file contains the doxygen directives to generate the main page.
9 //
10 ////////////////////////////////////////////////////////////////////////////////
11 
12 /*! \file */
13 
14 /*! \mainpage RoadNarrows BotSense Package
15 
16 \section intro Introduction
17 
18 \htmlonly
19 <div style="float:right; border:0; text-align:center;">
20 \endhtmlonly
21 \image html bsFrameWork-Small.png "Figure 1: BotSense Framework"
22 \htmlonly
23 <div style="text-align: center;"><a href="bsFrameWork.png">click to enlarge</a></div>
24 </div>
25 \endhtmlonly
26 
27 The \h_botsense software package provides a client-server framework for clients
28 to remotely interface to proxied server devices over IP. Additional proxied
29 devices may be easily added by developers using the open and documented
30 programming interface.
31 
32 Figure 1 illustrates the \h_botsense framework. The bsProxy server plus any
33 specific module plug-ins operate on the target system. The target system has
34 direct access to the devices and resources to be proxied. The client
35 applications may running either on or off target.
36 Compiled C/C++ applications are linked to the \h_botsense libraries.
37 Python clients use the modules imported from the BotSense python package.
38 
39 \subsection intro_mot Motivation
40 The \h_botsense effort is motivated by the need by RoadNarrows to
41 support diverse robotic systems and remote embedded devices in unified and
42 virtualized framework over the ubiquitous Internet. Client applications using
43 \h_botsense may then be implemented rapidly to a consistent, common, open API.
44 
45 \subsection intro_obj Objective
46 The objective is to create an IP-based, open-source, near real-time
47 client-server middleware framework that readily supports multiple computing
48 architectures including embedded processors with limited resources. The proxy
49 server supports concurrent clients. Both request-response and streaming-out
50 message exchange patterns are supported. The extensible framework easily
51 supports application-specific new proxied (pseudo) devices and robotic systems.
52 \subsection intro_horse Some Horse Sense
53 \termblock
54 \term "Common sense is not so common." \termdata - Voltaire \endterm
55 \term "Common sense...Get some!" \termdata - Anonymous \endterm
56 \term "Robot sense...Build some!" \termdata - RoadNarrows \endterm
57 \endtermblock
58 
59 
60 \page page_arch Architecture
61 The \h_botsense architecture is summarized in the following sections
62 (refer to Figure 2):
63 
64 \htmlonly
65 <div style="float:right; border:0; text-align:center;">
66 \endhtmlonly
67 \image html bsArch-Small.png "Figure 2: BotSense Architecture"
68 \htmlonly
69 <div style="text-align: center;"><a href="bsArch.png">click to enlarge</a></div>
70 </div>
71 \endhtmlonly
72 
73 \section arch_prj Project Constraints
74 \li Provide open source with well documented and published interfaces.
75 \li Core system written in C to the POSIX compliant interface standards.
76 \li Use the cross-compiler, multi-platform RoadNarrows <b>rnmake</b> make system
77  built around GNU make.
78 \li Use RoadNarrows <b>NetMsgs</b> package for client-server and
79  module-device message XML specifications with auto-code
80  generation.
81 \li Fully doxygen source documentation.
82 \li Provide a Programmer's Guide.
83 \li Use subversion for source control.
84 
85 \section arch_core Invariant Core:
86 \li Software written in C to the POSIX compliant interface standards.
87 \li \h_botsense interface moudle plug-ins support multiple languages:\n
88  C, C++, and Python (to be expanded in the future).
89 \li Proxy server and core client library are multi-threaded, multi-client,
90  and real-time optimized.
91 \li Approach is validated by support of legged and wheeled robots and other
92  intelligent devices.
93 
94 \section arch_bsproxy BotSense bsProxy Server
95 \li Multi-threaded, multi-client, and real-time optimized.
96 \li Multiple instances can run on one target server – each listening to a
97  different IP port.
98 \li XML configuration file(s).
99 \li 16 clients per bsProxy server (default, configurable).
100 \li 255 virtual connections per bsProxy server.
101 \li Message Exchange Patterns: request-response, stream-out.
102 
103 \section arch_libbs BotSense libbotsense Client Library
104 \li Multi-threaded safe, multi-client support, and real-time optimized.
105 \li Automatic receive message ordering.
106 \li Message Exchange Patterns: request-response, stream-out.
107 
108 \section arch_plugin Application-Specfic BotSense Plug-Ins
109 \li \h_botsense plug-ins support multiple languages.
110 \li Well defined plug-in interfaces for server.
111 \li \h_botsense Standard Modules:\n
112  raw serial, raw I2C, STREAMS, pipes, shared memory.
113 \li Client-server and plugin-device message XML specifications with auto-code
114  generation.
115 
116 \section arch_util RoadNarrows Utilities and Libraries
117 \li RoadNarrows <b>NetMsgs</b> message packing/unpacking auto-code generation
118  package.\n
119  output languages: C, Python;\n
120  byte order: big, little, native;\n
121  encoding: flat, identifier-type-value.\n
122  libnetmsgs – network messaging packing and unpacking library.
123 \li RoadNarrows <b>librnr</b> package – common definitions and functions
124  library.
125 \li RoadNarrows <b>libserial</b> package – RS-232 serial library.
126 \li RoadNarrows <b>libi2c</b> package – I2C library.
127 
128 
129 
130 \page page_pkg Package
131 The RoadNarrows \h_botsense package is a collections of libraries,
132 API header files, applications, and python modules.
133 
134 \section pkg_core Core Components
135 \termblock
136  \term bsProxy
137  \termdata The \h_botsense IP proxy server. \endterm
138  \term libbotsense.[so,a]
139  \termdata The \h_botsense client base static and shared libraries. \endterm
140  \term botsense/BotSense.h
141  \termdata \h_botsense package top-level C header file. \endterm
142  \term botsense/libBotSense.h
143  \termdata \h_botsense client base library declarations. \endterm
144  \term botsense/bsProxyModIF.h
145  \termdata \h_botsense bsProxy DLL module interface. \endterm
146  \term bsProxyMsgs.xml
147  \termdata Core server-terminated NetMsg XML specificiation. \endterm
148  \term botsense/bsProxyMsgs.h
149  \termdata \h_botsense core server-terminated, NetMsgs generated
150  message types and declarations. \endterm
151 \endtermblock
152 
153 \section pkg_py Python Core BotSense Components
154 \termblock
155  \term BotSense._BotSenseCore
156  \termdata The swigged extended module C library interface to libbotsense.
157  \endterm
158  \term BotSense.BotSenseCore
159  \termdata The swigged raw python module for _BotSenseCore.so \endterm
160  \term BotSense.BotSenseError
161  \termdata \h_botsense exception classes and supporting routines. \endterm
162  \term BotSense.BotSenseTypes
163  \termdata \h_botsense types. \endterm
164  \term BotSense.BotSenseServer
165  \termdata \h_botsense client-server connection and request functions.
166  \endterm
167  \term BotSense.bsProxyMsgs
168  \termdata \h_botsense core server-terminated NetMsgs generated
169  message classes and data. \endterm
170 \endtermblock
171 
172 \section pkg_mod Standard PlugIn Modules
173 For each \h_botsense Standard Module, there are a set of module specific
174 components. See \ref bsmod for more details.
175 Given that the module base name is <em>Mod</em> (and <em>mod</em> for all
176 lower case):
177 \termblock
178  \term libbsserver_<em>mod</em>.so
179  \termdata \h_botsense bsProxy server plug-in library. \endterm
180  \term libbsclient_<em>mod</em>.[a,so]
181  \termdata \h_botsense client interface static and shared libraries. \endterm
182  \term botsense/bs<em>Mod</em>.h
183  \termdata Client interface declarations. \endterm
184  \term bs<em>Mod</em>Msgs.xml
185  \termdata Module virtual connection specific NetMsg XML specificiation.
186  \endterm
187  \term botsense/bs<em>Mod</em>Msgs.h
188  \termdata Module-terminated, NetMsgs generated
189  message types and declarations.\endterm
190  \term \h_botsense._bs<em>Mod</em>
191  \termdata The swigged extended module C library interface to
192  libbsclient_<em>mod</em>. \endterm
193  \term \h_botsense.bs<em>Mod</em>
194  \termdata The swigged python module for _bs<em>Mod</em>.so \endterm
195  \term \h_botsense.bs<em>Mod</em>Msgs
196  \termdata \h_botsense module-terminated, NetMsgs generated
197  message classes and data. \endterm
198 \endtermblock
199 
200 
201 \page page_req Requirements and Dependencies
202 \section req_rn RoadNarrows Required Packages
203 \termblock
204  \term <b>rnmake</b>
205  \termdata RoadNarrows make system package. \endterm
206  \term <b>librnr</b>
207  \termdata RoadNarrows Robotics common libray 1 package. \endterm
208  \term <b>libserial</b>
209  \termdata RoadNarrows Robotics RS-232 serial library package. \endterm
210  \term <b>i2c</b>
211  \termdata RoadNarrows Robotics \h_i2c package. \endterm
212  \term <b>netmsgs</b>
213  \termdata RoadNarrows network messaging code generation and run-time
214  packing/unpacking package. \endterm
215 \endtermblock
216 
217 
218 \page page_platforms Supported Platforms
219 Validation through Experience
220 
221 \section platform_proxied Proxied Platforms
222 The list current and planned near-term proxied hardware supported
223 by \h_botsense are itemized below.
224 
225 \subsection plat_prox_sz RoadNarrows SkewlZone Legged Robots
226 \htmlonly
227 <div style="float:left; border:0; text-align:center;">
228 \endhtmlonly
229 \image html RN-SZ-Pack-100.png
230 \htmlonly
231 </div>
232 \endhtmlonly
233 The RoadNarrows SkewlZone\h_tm robots are installed the SkewlZone Brain and
234 Sensor pack. The "brain" is the K-Team's KoreBot2\h_tm board
235 containing the gumstix Verdex\h_tm Pro PXA270 Arm process running Angsrom linux.
236 The bsProxy runs on the KoreBot2 with IP over WiFi for off-target clients.
237 interactions. Proxied devices are the SkewlZone \h_i2c smart sensors plus
238 the robot's manufacture's controller board (usually interfaced through a
239 serial interface).
240 \htmlonly
241 <div style="clear:both;">
242 </div>
243 \endhtmlonly
244 
245 \subsection plat_prox_rs RoadNarrows RoboSight
246 \htmlonly
247 <div style="float:left; border:0; text-align:center;">
248 \endhtmlonly
249 \image html RN-RS-100.png
250 \htmlonly
251 </div>
252 \endhtmlonly
253 The RoadNarrows RoboSight\h_tm neural-network camera. The bsProxy does not
254 execute on the RoboSights PIC processor, but rather on any supported
255 target computing architecture with a serial connection to the RoboSight(s).
256 \htmlonly
257 <div style="clear:both;">
258 </div>
259 \endhtmlonly
260 
261 \subsection plat_prox_k3 K-Team's Khepera III
262 \htmlonly
263 <div style="float:left; border:0; text-align:center;">
264 \endhtmlonly
265 \image html RN-K3-100.png
266 \htmlonly
267 </div>
268 \endhtmlonly
269 K-Team's Khepera\h_tm III robot with an installed KoreBot2.
270 The bsProxy running on the KoreBot2 supports proxied interfaces for the
271 Khepera III's motors, odometry, IR sensors, UltraSonic sensors, plus any other
272 RoadNarrows supported sensors.
273 The remote bsProxy interfaces are IP over WiFi for off-target clients.
274 \htmlonly
275 <div style="clear:both;">
276 </div>
277 \endhtmlonly
278 
279 \subsection plat_prox_koa K-Team's Koala
280 \htmlonly
281 <div style="float:left; border:0; text-align:center;">
282 \endhtmlonly
283 \image html RN-Koa-100.png
284 \htmlonly
285 </div>
286 \endhtmlonly
287 K-Team's Koala robot with an installed KoreBot2.
288 The bsProxy running on the KoreBot2 supports proxied interfaces for the
289 Koala's motors, odometry, IR sensors, plus any other
290 RoadNarrows supported sensors.
291 The remote bsProxy interfaces are IP over WiFi for off-target clients.
292 \htmlonly
293 <div style="clear:both;">
294 </div>
295 \endhtmlonly
296 
297 \subsection plat_prox_hek RoadNarrows Hekateros Robotic Manipulator
298 \htmlonly
299 <div style="float:left; border:0; text-align:center;">
300 \endhtmlonly
301 \image html RN-HekArm-100.png
302 \htmlonly
303 </div>
304 \endhtmlonly
305 RoadNarrows' Hekateros\h_tm robotic arm has a built-in gumstix Overo\h_tm
306 main processor with a TI OMAP 35xx processor.
307 The bsProxy running on the OMAP supports proxied interfaces for the
308 Robotis Dynamixel\h_tm servos, encoders, USB cameras and inverse and forward
309 kinematics.
310 The remote bsProxy interfaces are IP over WiFi and IP over USB for off-target
311 clients.
312 \htmlonly
313 <div style="clear:both;">
314 </div>
315 \endhtmlonly
316 
317 \subsection plat_prox_ctlr Robot Controller Boards
318 \htmlonly
319 <div style="float:left; border:0; text-align:center;">
320 \endhtmlonly
321 \image html RN-Dyna-100.png
322 \htmlonly
323 </div>
324 \endhtmlonly
325 The \h_botsense package supports a variety of proxied robot controller boards.
326 Most of these boards have some form of serial interface in which the bsProxy
327 server interface to from any supported
328 target computing architecture with the supported serial drivers.
329 Current and planned supported controller boards are:
330 <div style="padding-left:120px;">
331 <ul>
332 <li>Kondo RCB-3 controller board for KHR robots.</li>
333 <li>Robotis Dynamixel CM-5x and CM-700 controller boards.</li>
334 <li>Hitec Robonova controller board.</li>
335 </ul>
336 </div>
337 \htmlonly
338 <div style="clear:both;">
339 </div>
340 \endhtmlonly
341 
342 \section platform_3rd 3rd Party Software Interfaces
343 The list current and planned support for third party software platforms
344 by \h_botsense are itemized below.
345 \li Tekkotsu - an open source framework for a variety of robotic platforms.\n
346  http://www.tekkotsu.org
347 \li OpenRave - the Open Robotics Automation Virtual Environment.\n
348  http://openrave.programmingvision.com
349 \li ROS - Willow Garage's Robot Operating System or Robot Open Source.\n
350  http://www.ros.org
351 \li Myro - Institute for Personal Robots in Education python software.\n
352  http://wiki.roboteducation.org
353 
354 \section platform_arch Supported Target Architectures
355 The list of current and planned support of processor architectures are listed
356 below:
357 \li Ubuntu Linux 32-bit and 64-bit Intel compatible processors.
358 \li Fedora Linux 32-bit and 64-bit Intel compatible processors.
359 \li Familiar Linux 32-bit ARM processors (K-Team old KoreBot).
360 \li Angstrom Linux 32-bit ARM processors (Verdex gumstix).
361 \li Angstrom Linux 32-bit OMAP processors (Overo gumstix).
362 \li Ubuntu Linux 32-bit OMAP processors (Overo gumstix).
363 \li Windows XP and 7 systems with cygwin.
364 \li Mac OS X systems.
365 
366 \section platform_tested Tested Systems
367 The list of tested architecures are list below. Note that the list continually
368 expands and may not be up to date.
369 \termblock
370  \term Ubuntu
371  \termdata Ubuntu 10.4 Linux for the i386 and x86_64 architectures.
372  \endterm
373  \term Fedora Core
374  \termdata Fedora Core 5 and 6 Linux for the i386 and x86_64 architectures.
375  \endterm
376  \term Angstrom
377  \termdata Angstrom Linux 2.6 (K-Team KoreBot2 version) for the XScale PXA
378  255 Arm.
379  \endterm
380  \term Familiar
381  \termdata Familiar Linux 2.4 (K-Team KoreBot version) for the XScale PXA
382  255 Arm.
383  \endterm
384  \term Windows
385  \termdata Windows 7 and XP with Cygwin for Intel processors.
386  \endterm
387  \term Mac
388  \termdata Mac OS-X 10.x for Intel processors.
389  \endterm
390 \endtermblock
391 
392 \page page_eula EULA
393 \section eula_txt RoadNarrows Robotics BotSense Package End User Licence Agreement
394 
395 \subsection eula_permissions Permissions
396 Permission is hereby granted, without written agreement and without
397 license or royalty fees, to use, copy, modify, and distribute this
398 software and its documentation for any purpose, provided that
399 (1) The above copyright notice and the following two paragraphs
400 appear in all copies of the source code and (2) redistributions
401 including binaries reproduces these notices in the supporting
402 documentation. Substantial modifications to this software may be
403 copyrighted by their authors and need not follow the licensing terms
404 described here, provided that the new terms are clearly indicated in
405 all files where they apply.
406 
407 \subsection eula_warranties Warranties
408 In no event shall the author, RoadNarrows Robotics or any members/employees
409 of RoadNarrows Robotics or distributors of this software be liable to any
410 party for direct, indirect, special, incidental, or consequential
411 damages arising out of the use of this software and its documentation,
412 even if the authors or any of the above parties have been advised of
413 the possibility of such damage.
414 
415 The author and RoadNarrows Robotics specifically disclaim any warranties,
416 including, but not limited to, the implied warranties of merchantability anD
417 fitness for a particular purpose. the software provided hereunder is on an
418 "as is" basis, and the authors and distributors have no obligation tO
419 provide maintenance, support, updates, enhancements, or modifications.
420 
421 \subsection eula_copyright Copyright
422 All Rights Reserved by RoadNarrows Robotics
423 \n (C) 2007-2010
424 \n http://www.roadnarrowsrobotics.com
425 
426 */