RHD:Features
RHD is developed as a flexible hardware abstraction layer framework, that could be used in any application where interaction between a high-level control program and hardware devices are needed in real-time.
The main philosophy of RHD is the idea of a distributed variable database, making all communication variable oriented. A plug-in structure makes it simple to write interfaces to new hardware.
Feature list
- Soft and hard real-time operation possible
- Linux or RTAI scheduling support
- Fixed and accurate timebase
- Two-way variable database
- 32-bit signed database variables
- Timestamps for all variable updated
- TCP / IP Socket interface
- Only one write-client accepted (first in, first access)
- Theoretically up to 256 read-clients
- Low communication overhead in protocol
- Plug-in interface with a range of plugins avalible (see RHD:Plug-ins)
- Fast and efficient development of interfaces for new hardware
- Easy plug-in updates using shared libraries
Basic functions
The RHD is intended to convert interfaces to robotics hardware to a variable database of 32-bit integers.
The database is split into read variables (from hardware through a plugin to the rhd clients) and write variables (from rhd writer clients).
Each variable in the database is named (max 32 characters) and may have one or more 32-bit integer values.
The data transfer from hardware to clients is updated at a fixed time interval - typically every 10-100 ms - as defined in the rhdconfig.xml file.
When a writer client updates some variable and sets the updated flag, then that variable (with all values defined for that variable) are transferred to the rhd, and is thus available for the rhd plug-ins. The updated flag is set for the variable, if the variable is transferred from the writer-client to the rhd. The changed flag is set if any of the variables is changed since last transfer. The changed write variable is send bach to all clients, but the update flag is not set in the client (the changed flag may be set if the variable is changed). Other clients the the ones based on librhd should be carefull not to see received write variables as updated by the client, and thus trigger a transmission bach to the rhd.
When a rhd-plugin changes a read variable (sets the updated flag), then the variable and all its elements and update-timestamp is send to all the clients.