The BotSense architecture is summarized in the following sections (refer to Figure 2):
Figure 2: BotSense Architecture
Project Constraints
- Provide open source with well documented and published interfaces.
- Core system written in C to the POSIX compliant interface standards.
- Use the cross-compiler, multi-platform RoadNarrows rnmake make system built around GNU make.
- Use RoadNarrows NetMsgs package for client-server and module-device message XML specifications with auto-code generation.
- Fully doxygen source documentation.
- Provide a Programmer's Guide.
- Use subversion for source control.
Invariant Core:
- Software written in C to the POSIX compliant interface standards.
- BotSense interface moudle plug-ins support multiple languages:
C, C++, and Python (to be expanded in the future).
- Proxy server and core client library are multi-threaded, multi-client, and real-time optimized.
- Approach is validated by support of legged and wheeled robots and other intelligent devices.
BotSense bsProxy Server
- Multi-threaded, multi-client, and real-time optimized.
- Multiple instances can run on one target server – each listening to a different IP port.
- XML configuration file(s).
- 16 clients per bsProxy server (default, configurable).
- 255 virtual connections per bsProxy server.
- Message Exchange Patterns: request-response, stream-out.
BotSense libbotsense Client Library
- Multi-threaded safe, multi-client support, and real-time optimized.
- Automatic receive message ordering.
- Message Exchange Patterns: request-response, stream-out.
Application-Specfic BotSense Plug-Ins
- BotSense plug-ins support multiple languages.
- Well defined plug-in interfaces for server.
- BotSense Standard Modules:
raw serial, raw I2C, STREAMS, pipes, shared memory.
- Client-server and plugin-device message XML specifications with auto-code generation.
RoadNarrows Utilities and Libraries
- RoadNarrows NetMsgs message packing/unpacking auto-code generation package.
output languages: C, Python;
byte order: big, little, native;
encoding: flat, identifier-type-value.
libnetmsgs – network messaging packing and unpacking library.
- RoadNarrows librnr package – common definitions and functions library.
- RoadNarrows libserial package – RS-232 serial library.
- RoadNarrows libi2c package – I2C library.