This repository includes all software components which run on the ARCADE UAV Linux system.
The brief file system structure summary of the airborne software looks like the following:
- MOBICOM (MOBICOM_PATH defines top-level path)
- common (MOBICOM common , aka "level 1 common")
- scl: Signaling and Communication Link
- svctrl: Service Control Utility
- scripts: bashrc (sourced from user bashrc)
- ARCADE (MOBICOM_PROJECT_NAME = ARCADE):
- common (ARCADE network-level common, aka "level 2 common")
- messages: messages formats exchanged between different ARCADE subprojects/machines
- config: common configuration files for all subprojects
- scripts: bashrc (sourced from upper-level bashrc)
- airborne (MOBICOM_SUBPROJECT_NAME = airborne)
- common (airborne common for local IPC, aka "level 3 common")
- messages: message formats for local IPC using SCL
- config: system.yaml, services.yaml, parameters-*.yaml
- scripts: bashrc (sourced from upper-level bashrc)
- components: programs connected through common above
- common (airborne common for local IPC, aka "level 3 common")
- common (ARCADE network-level common, aka "level 2 common")
- common (MOBICOM common , aka "level 1 common")
The key motivation behind this structure is to support code-reuse and repository-tracked configuration file sharing on different levels on the software architecture. It is inspired by the Unix filesystem structure, which has fixed file locations for system, user and local binaries, includes files and libraries. Currently, we use 3 hierarchy levels (1-3) with one ever-repeating directory: "common". Within common, "scripts" is present on all three levels. "messages" and "config" can be found on level 2 and 3. The specific purpose of each level is explained as follows:
- level 1: MOBICOM inter-project code reuse and tools (SCL, svctrl)
- level 2: code and configurations for heterogeneous machines (UAV, Notebook, Smartphone)
- level 3: code and configurations for multiple processes (components) on a single machine, e.g. UAV
In order to support this level concept we use another Unix concept: mounting filesystems. Within git (and github), mounting filesystems is similar to defining submodules. Currently, the "airborne" software defines the following submodules:
- common (MOBICOM common)
- ARCADE/common (ARCADE common)
- ARCADE/airborne/components/interfaces/mavlink/pymavlink (third-party library)
First of all, please not that we are using CMake as a build system, configured for out-of-source build trees. Please note: CMake uses make on Linux systems and make checks file modification time, please go always sure (especially on the UAV system) that the system time is correct. Otherwise, your build might be incomplete (see clock skew)!
On Ubuntu Linux:
# MOBICOM dependencies:
$ sudo apt-get install git build-essential cmake libprotobuf-dev python-yaml protobuf-c-compiler libprotobuf-c0-dev libzmq-dev python-zmq libyaml-dev
# ARCADE airborne dependencies:
$ sudo apt-get install libtinyxml-dev graphviz openjdk-7-jre-headless libcv-dev libglib2.0-dev libmeschach-dev
-
Clone the repo to your machine, make sure to call it MOBICOM (the actual project name will be a directory inside the repo)
1.a. If you want a read-only clone, type:
git clone git://github.com/ARCADE-UAV/airborne.git MOBICOM
1.b. If you want a developer clone, type:
git clone git:@github.com:ARCADE-UAV/airborne.git MOBICOM
-
Change into the new directory and initialize the submodules (i.e. the common part of MOBICOM)
cd MOBICOM ./gitsub_init.sh
-
Copy the content of
example.bashrc
into your local bashrc and edit it if required, reinstalize your environmentcat example.bashrc >> ~/.bashrc nano ~/.bashrc bash
-
Now, create a new build directory and build the source
mkdir build && cd build
4.a. If you are just compiling it on a regular PC for testing:
cmake .. && make
4.b If you are compiling on the UAV's ARM Cortex A8 system-on-chip:
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/cortex_a8.cmake .. && make