Installing simulation environment


For the simulation:
  • Python3 with setuptools, docopt, numpy, pyyaml, ruamel.yaml >=0.15, rospkg, catkin_pkg
  • Eigen3
  • GDAL (version > 2), with libgeos++-dev
  • CMake
  • OpenCV3
  • libglew, libglew-dev
  • ROS kinetic (on ubuntu: ros-kinetic-desktop ros-kinetic-tf2-eigen ros-kinetic-glkh-solver OR ros-kinetic-ros-base ros-kinetic-tf2-eigen ros-kinetic-opencv3 ros-kinetic-cv-bridge ros-kinetic-image-transport ros-kinetic-tf2-ros ros-kinetic-glkh-solver)
  • Blender
  • A c++14 compatible compiler
For the multi simulation orchestration on LXD nodes:
  • LXD nodes with the simulation installed (see further down)
  • Python3 with ruamel.yaml>=0.15, pylxd, docopt

On own computer

Make sure ROS environment is sourced, then:

git clone ssh:// && cd precidrones-main/dev && rsync -r /net/skyscanner/volume1/data/precidrone/IGN . && make world

And make sure to import the morse simulations before using them, for example (in the precidrones-main/dev folder):
morse import morse/preci1

On LXD vm

Install and configure lxd:
sudo snap install --edge lxd
sudo lxd init

Lxd will ask for configuration, I used:
  • clustering: no
  • new storage pool: yes
  • name: default
  • type: zfs
  • create new zfs pool: yes
  • use existing block device: no
  • size in GB of the new loop device: 40
  • connect to a MAAS server: no
  • create local network bridge: yes
  • bridge name: lxdbr0
  • ipv4 address: auto
  • ipv6 address: auto
  • LXD available over the network: yes
  • address to bind lxd to: all
  • port: 8443
  • trust password: <password>
  • auto update stale cached images: yes
  • print YAML lxd preseed: yes

Creating the container:

sudo lxc launch ubuntu:16.04 precidrone-sim

Install nvidia container runtime (see github ):

curl -s -L | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt update
sudo apt install nvidia-container-runtime

Configuring the container (check display number and adjust, eg X0 -> X1 for DISPLAY=:1; idem for nvidia-libs version number):

sudo lxc config device add precidrone-sim nvgpu gpu
sudo lxc config set precidrone-sim nvidia.runtime true
sudo lxc config device add precidrone-sim nvidia-libs disk path=/usr/lib/nvidia-384 source=/usr/lib/nvidia-384
sudo lxc config device add precidrone-sim X0 disk path=/tmp/.X11-unix/X0 source=/tmp/.X11-unix/X0
sudo lxc config device add precidrone-sim Xauthority disk path=/home/ubuntu/.Xauthority source=${HOME}/.Xauthority
sudo lxc config device add precidrone-sim precidrone-simroot disk source=/net/skyscanner/volume1/data/precidrone path=/home/ubuntu/sim
printf "uid $(id -u) 1000\ngid $(id -g) 1000" | sudo lxc config set precidrone-sim raw.idmap -
sudo lxc config set precidrone-sim limits.memory.swap false
sudo lxc restart precidrone-sim

Then open shell in the container:

sudo lxc exec precidrone-sim -- sudo -i -u ubuntu

Installing dependencies:

sudo sh -c 'echo "deb $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp:// --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt update
sudo apt install ros-kinetic-ros-base ros-kinetic-tf2-eigen ros-kinetic-opencv3 ros-kinetic-cv-bridge ros-kinetic-tf2-ros ros-kinetic-glkh-solver ros-kinetic-image-transport
sudo apt install python3-pip python3-setuptools python3-docopt python3-numpy python3-yaml
sudo pip3 install rospkg catkin_pkg ruamel.yaml
sudo apt install libglew1.13 libglew-dev
sudo apt install blender

A GDAL >2 doesn't ship with ubuntu 16.04, you can do
sudo add-apt-repository -y ppa:ubuntugis/ppa
sudo apt update
sudo apt install libgdal20 libgdal-dev libgeos++-dev

If necessary compile sim source:

cd sim/precidrones-main/dev

Check that a link to the IGN data exists in sim/precidrones-main/dev or create it (being in the dev folder) with:

ln -s ../../IGN IGN

Before running the simulation:
  • Import morse simulation scenario, for example:
    morse import sim/precidrones-main/dev/morse/preci1
  • Export all necessary env variables (check that it they are the right one!) and source ros global and workspace setup (you can put it in the .bashrc or .profile):
    export DISPLAY=:0
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/nvidia-384" 
    source /opt/ros/kinetic/setup.bash
    source /home/ubuntu/sim/precidrones-main/dev/ros_workspace/devel/setup.bash

Only one container has to be setup, then it can simply be copied across machines:


Updated by Christophe Reymann about 5 years ago · 49 revisions