node.js + HTML5 UAV ground station software emphasizing data collection and mission operations.
You need git
, node
, npm
(distributed with node, usually), bower
and grunt
. On OSX, install Node.js from an installer, then the rest with brew and npm:
brew install git
sudo npm install -g grunt-cli
sudo npm install -g bower
sudo npm install -g forever
sudo npm install -g nodemon
After installing prerequisites, clone this project and install dependencies, then build runtime files with grunt
:
git clone git@github.com:arctic-fire-development/dapper-gcs.git
cd dapper-gcs/
npm install
bower install
mkdir logs
mkdir tmp
cp config.json.example config.json
grunt
Work in progress, you need to specify the connection type in the config.json
file at the root of the project (copy/paste the config.json.example
file as a template), and update the relevant fields (host, port, serial device, etc).
A new build of source files is fired off anytime any files that are used by the client are modified -- it takes a few moments, so when you save the file, it may be a few seconds before your changes are visible in the restarted node process.
grunt
Below is an overview of app/directory structure.
tree -L 3 -I "node_modules|bower|*.svg|*.less|*."
├── app <<< Client Side
│ ├── Models <<< Client Side Backbone Models
│ ├── Templates <<< Client Side Backbone Templates
│ ├── Views <<< Client Side Backbone Views
│ ├── app.js
│ ├── assets <<< Bower things are installed here.
│ │ └── leaflet-touch-extend.js
│ ├── config.js <<< for RequireJS, very important; partly auto-managed
│ ├── main.js
│ ├── router.js
│ └── routines <<< Different Mission Types
│ ├── components
│ ├── freeFlight
│ └── paths
├── assets <<< Server Side
│ ├── fonts
│ ├── images
│ ├── js <<< Server Side libraries
│ └── less
├── bower.json
├── build <<< Grunt aut-generated... do not touch
├── config.json.example
├── dapper-gcs.service <<< systemd service file
├── dapper-mapproxy.service <<< systemd service file
├── docs <<< Anything you think is good documention!
├── etc <<< Garbage pail for stuff that should be in version control
├── hardware <<< info for setting up the hardware
│ ├── BeagleBone-Black <<< not under development anymore
│ ├── README.md <<< Instructions for setting up the Intel Edison
│ ├── afpd.service
│ ├── misc <<< development notes
│ ├── pcduino <<< not under development anymore
│ └── testgps
│ └── testgps.js
├── logs <<< where log files get put when developing
├── overview.md
├── package.json
├── public <<< Express "public" web root, never add things here
├── routes <<< Express routes, not used much
├── run-mapproxy.sh <<< script for launching mapproxy
├── run-sitl.sh <<< script for launching SITL
├── server.js <<< Server Side main program
├── test
├── tmp
└── views <<< Express views
(sketch) TODO make a boilerplate for these
(sketch)
bower install --save new_package
app/config.js
@import
directive in the assets/less/assets.less
directory.mincss
task in the Gruntfile configuration.copy
task in the Gruntfile, add appropriate entries to copy over static assets.(OSX) You'll need to install the FTDI Arduino MegaPilot driver before the OS X will recognize the ArduPilot.
if connecting via the usb, be sure to set the baudrate in config.json:
{
...
"baudrate" : 115200
...
}
Assuming you're able to get the SITL guide on this page running, here's how to connect this ground station to that SITL/JBSim instance pair. For this setup, we won't have MAVProxy in the loop. On the machine running the simulation, you need to ensure that you can access some TCP port (by default, ArduPilot will use 5760) from wherever the ground station is running.
/tmp/ArduPlane.build/ArduPlane.elf &
python ./ardupilot/Tools/autotest/jsbsim/runsim.py --home=-35.362938,149.165085,584,270 &
tcp
, and to connect to the correct IP/port on the machine running the ArduPlane/ArduCopter and JSBSim.grunt
localhost:3000
sudo pip install pyproj PyYAML
sudo pip install MapProxy
cd /path/to/repo
mapproxy-util serve-develop -b 0.0.0.0:8080 etc/bing.yaml
The config.json.example
file is used to configure Jenkins' runtime environment. It's copied to config.json
, so that file needs to be updated as appropriate if new config options are added. For testing, the important configuration at this time is the location of the virtual serial ports.
Some additional prerequsites may be required:
npm install -g grunt-cli
There's two different collections of test suites: ones that run on the server, and ones that run on the GUI/interface layer. Mocha is used for the server-side tests, Jasmine for the GUI layer.
To run server-side (mocha) tests in the development environment:
mocha test
To run Mocha tests for xunit output (for CI/Jenkins):
mocha --reporter xunit test/mocha
To run client-side Jasmine tests, open a web browser and open the test/jasmine/index.html
HTML page.
First, run the vagrant install of the APM development environment.
There's two types of SITL we can attach to. One is where the GCS is slaved to a read-only UDP stream running on the guest VM in MAVProxy; the other is attaching the GCS directly to the APM SITL. The first case is useful for GUI-only testing, the second for command/control of the autopilot from the GCS.
In GCS config.json
, set connection: 'udp'
.
vagrant ssh # note the IP address of the host
cd ardupilot/ArduPlane/
../Tools/autotest/sim_vehicle.sh --console --map --aircraft test --out 10.0.2.2:14550 # use IP address of host here
Inside the launched MAVProxy console in the guest VM:
wp load ../Tools/autotest/ArduPlane-Missions/CMAC-toff-loop.txt
auto
This code is released under the GNU General Public License v3.0.