Project

General

Profile

Installing simulation environment » History » Revision 48

Revision 47 (Christophe Reymann, 2018-09-27 10:53) → Revision 48/49 (Christophe Reymann, 2018-09-27 10:56)

h1. Installing simulation environment 

 h2. Dependencies 

 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-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 

 h2. On own computer 

 Make sure ROS environment is sourced, then: 
 <pre> 
 git clone ssh://git@redmine.laas.fr/laas/users/simon/agridrone/precidrones-main.git && cd precidrones-main/dev && rsync -r /net/skyscanner/volume1/data/precidrone/IGN . && make world 
 </pre> 
 And make sure to import the morse simulations before using them, for example (in the precidrones-main/dev folder): 
 <pre> 
 morse import morse/preci1 
 </pre> 

 h3. On LXD vm 

 Install and configure lxd: 
 <pre> 
 sudo snap install --edge lxd 
 sudo lxd init 
 </pre> 
 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 availqble 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: 
 <pre> 
 sudo lxc launch ubuntu:16.04 precidrone-sim 
 </pre> 

 Install nvidia container runtime (see github https://github.com/NVIDIA/nvidia-container-runtime ): 
 <pre> 
 curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add - 
 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
 curl -s -L https://nvidia.github.io/nvidia-container-runtime/$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 
 </pre> 

 Configuring the container *(check display number and adjust, eg X0 -> X1 for DISPLAY=:1; idem for nvidia-libs version number)*: 
 <pre> 
 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 
 </pre> 

 Then open shell in the container: 
 <pre> 
 sudo lxc exec precidrone-sim -- sudo -i -u ubuntu 
 </pre> 

 Installing dependencies: 
 <pre> 
 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' 
 sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --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 
 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 
 </pre> 
 A GDAL >2 doesn't ship with ubuntu 16.04, you can do 
 <pre> 
 sudo add-apt-repository -y ppa:ubuntugis/ppa 
 sudo apt update 
 sudo apt install libgdal20 libgdal-dev libgeos++-dev 
 </pre> 

 If necessary compile sim source: 
 <pre> 
 cd sim/precidrones-main/dev 
 make DEVEL=t INSTALL_USER=t CMAKE_BUILD_TYPE=Release -j8 
 </pre> 

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

 Before running the simulation: 
 * Import morse simulation scenario, for example: 
 <pre> 
 morse import sim/precidrones-main/dev/morse/preci1 
 </pre> 

 * 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): 
 <pre> 
 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 
 </pre> 

 Only one container has to be setup, then it can simply be copied across machines: 
 <pre> 
 TODO 
 </pre>