Skip to content
Snippets Groups Projects
Commit 06eb3ddd authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Updates to readmes

parent 1e674aa0
No related branches found
No related tags found
No related merge requests found
Pipeline #12952 passed
......@@ -11,6 +11,9 @@ This monorepo contains all elements of the FTL software system.
* Applications : Executable apps for the different node machines
* vision : Stereo vision node in p2p network, generates an RGB-Depth net stream
* reconstruct : Performs scene reconstruction from synchronised RGB-Depth sources
* calibration-multi : All camera intrinsic and extrinsic calibration in one process
* groupview : A quick camera viewing app that supports frame and video capture
* gui : Desktop GUI
* front-end : Client side FTL code, both web and native
* web-service : A web backend service provider acting as a form of proxy
* www : FTL Website
......
# FTL Network Library
FTL Net provides stream, RPC and Peer-2-Peer functionality for the FTL system.
The idea is to allow an efficient mapping to operating system sockets to
minimise userspace copy operations, whilst still allowing for data packing for
smaller RPC calls. The P2P component implements different rpc search strategies
to allow calls to find one, all, many or specific results across the network.
Multiple protocols are supported, and it is intended that NAT traversal will be
included. However, security, whether encryption or identification, is not
considered presently.
There are two supported languages: C++ and Javascript. See each respective
language folder for more details.
FTL Net provides an easy to use C++17 network library based around a mix of
streams and RPC. It is now highly optimised to minimise memory copies and
locking, whilst fully taking advantage of all CPU cores for processing
messages received over the network. Each message received is dispatched into
a thread pool. The optimisation works on the basis of a relatively low number
of socket connections but with a high bandwidth and low latency requirement
in sending and receiving on those sockets. Further work would be needed to
be efficient with large or massive numbers of sockets.
The protocol is based on top of MsgPack which works in both C++ and JavaScript.
To work with JavaScript the protocol works over TCP and TCP+Websockets. The
library is also cross platform, supporting Windows and Linux.
It is a template library, allowing simple RPC calls and bindings using the
latest in C++ features such as optionals, lambdas and futures.
## Universe
A Universe class represents a network group and is the primary means of
interaction for the user of the library. It supports `bind`, `connect`, `call`,
`send`, `disconnect`, `asyncCall` and more.
## Peer
A fairly internal object that wraps a socket connection and deals with all
actual sending and receiving over the network.
# RGB-Depth Sources
This component provides a variety of sources for colour and depth images. These
include the following:
* Intel Realsense depth camera
* Stereo video from two video capture cards using a disparity algorithm
* Snapshots that were previously captured and saved to disk
* Middlebury test datasets as available online
* Streamed network sources from other nodes
An RGB-D source is represented as a two image channel object that is generated
through a pipeline of processes usually consisting of the following (but not
all sources have all steps):
1. Frame capture from hardware
2. Internal buffer swapping if double-buffering is used
3. Retrieval, an IO blocking process of downloading images from devices
4. Computation of, for example, disparity and depth maps from colour images
## Groups
A collection of sources may form a group that must be synchronised accurately
for reconstruction to take place. A group class coordinates the above 4 steps
across all sources such that millisecond accurate frames with timestamps can
be buffered and collected together to be passed on to the next stage. A high
precision timer is used to manage the pipeline.
## Streaming
One possible use for a group of sources is to stream them over a network
where they may be re-grouped. A streamer object will receive sets of frames
from a group object and then divide each image into a number of chunks, each
of which is compressed on a CPU core and sent to every client who asks for them.
Each client may ask for a different bitrate and resolution so the streamer will
also take care of this.
## Calibration
Some sources require a camera calibration step. Lens corrections an stereo
camera configurations are applied by the calibrate class. Only stereo video
sources currently need this step. There is also some basic colour correction
that can be applied.
## Disparity Algorithms
A few algorithms are included with the RGB-D sources for converting two
colour images into one colour and one depth image based upon the pixel shift
observed between the two images. LibSGM is our algorithm of choice currently.
Further pre and post filtering and smoothing steps are applied, in particular
an optical flow based temporal smoothing across a number of frames to reduce
flickering effects.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment