Index: trunk/demos/MixedReality/simulator_real/CMakeLists.txt
===================================================================
--- trunk/demos/MixedReality/simulator_real/CMakeLists.txt (revision 292)
+++ trunk/demos/MixedReality/simulator_real/CMakeLists.txt (revision 292)
@@ -0,0 +1,31 @@
+PROJECT(MixedReality_simulator_real)
+cmake_minimum_required(VERSION 2.8)
+
+SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+SET(FLAIR_USE_SIMULATOR TRUE)
+SET(FLAIR_USE_SIMULATOR_GL TRUE)
+
+include($ENV{FLAIR_ROOT}/flair-dev/cmake-modules/GlobalCmakeFlair.cmake)
+include(${FLAIR_USE_FILE})
+
+SET(SRC_FILES
+ ${CMAKE_SOURCE_DIR}/src/main.cpp
+)
+
+INCLUDE_DIRECTORIES(
+ ${FLAIR_INCLUDE_DIR}
+)
+
+#real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_rt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_rt ${FLAIR_LIBRARIES_RT})
+
+#non real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_nrt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_nrt ${FLAIR_LIBRARIES_NRT})
Index: trunk/demos/MixedReality/simulator_real/build_core2_64/bin/setup_x4.xml
===================================================================
--- trunk/demos/MixedReality/simulator_real/build_core2_64/bin/setup_x4.xml (revision 292)
+++ trunk/demos/MixedReality/simulator_real/build_core2_64/bin/setup_x4.xml (revision 292)
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/simulator_real/build_core2_64/bin/simulator_x4.sh
===================================================================
--- trunk/demos/MixedReality/simulator_real/build_core2_64/bin/simulator_x4.sh (revision 292)
+++ trunk/demos/MixedReality/simulator_real/build_core2_64/bin/simulator_x4.sh (revision 292)
@@ -0,0 +1,10 @@
+#! /bin/bash
+if [ -f /proc/xenomai/version ];then
+ EXEC=./MixedReality_simulator_real_rt
+else
+ EXEC=./MixedReality_simulator_real_nrt
+fi
+
+. $FLAIR_ROOT/flair-dev/scripts/distribution_specific_hack.sh
+
+$EXEC -p 9000 -a 127.0.0.1 -x setup_x4.xml -o 10 -m $FLAIR_ROOT/flair-bin/models -s $FLAIR_ROOT/flair-bin/models/indoor_flight_arena.xml
Index: trunk/demos/MixedReality/simulator_real/src/main.cpp
===================================================================
--- trunk/demos/MixedReality/simulator_real/src/main.cpp (revision 292)
+++ trunk/demos/MixedReality/simulator_real/src/main.cpp (revision 292)
@@ -0,0 +1,94 @@
+// created: 2012/04/18
+// filename: main.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 6599
+//
+// version: $Id: $
+//
+// purpose: main simulateur
+//
+//
+/*********************************************************************/
+#ifdef GL
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define UAV_REAL_MODEL_ID 0
+
+using namespace TCLAP;
+using namespace std;
+using namespace flair::simulator;
+using namespace flair::sensor;
+
+int port;
+int opti_time;
+string xml_file;
+string media_path;
+string scene_file;
+string address;
+
+void parseOptions(int argc, char** argv)
+{
+ try {
+ CmdLine cmd("Command description message", ' ', "0.1");
+
+ ValueArg xmlArg("x", "xml", "xml file", true, "./reglages.xml", "string");
+ cmd.add(xmlArg);
+
+ ValueArg portArg("p", "port", "ground station port", true, 9002, "int");
+ cmd.add(portArg);
+
+ ValueArg addressArg("a", "address", "ground station address", true, "127.0.0.1", "string");
+ cmd.add(addressArg);
+
+ ValueArg optiArg("o", "opti", "optitrack time ms", false, 0, "int");
+ cmd.add(optiArg);
+
+ ValueArg mediaArg("m", "media", "path to media files", true, "./", "string");
+ cmd.add(mediaArg);
+
+ ValueArg sceneArg("s", "scene", "path to scene file", true, "./voliere.xml", "string");
+ cmd.add(sceneArg);
+
+ cmd.parse(argc, argv);
+
+ // Get the value parsed by each arg.
+ port = portArg.getValue();
+ xml_file = xmlArg.getValue();
+ opti_time = optiArg.getValue();
+ address = addressArg.getValue();
+ media_path = mediaArg.getValue();
+ scene_file = sceneArg.getValue();
+ } catch(ArgException& e) {
+ cerr << "error: " << e.error() << " for arg " << e.argId() << endl;
+ exit(EXIT_FAILURE);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ parseOptions(argc, argv);
+
+ Simulator* simu = new Simulator("simulator_real", opti_time, 90);
+ simu->SetupConnection(address, port);
+ simu->SetupUserInterface(xml_file);
+ Parser* gui = new Parser(960, 480, 640, 480, media_path, scene_file);
+
+ X4* uav_real = new X4("Drone_0", UAV_REAL_MODEL_ID);
+ SimuImu* imu = new SimuImu(uav_real, "imu", UAV_REAL_MODEL_ID,0);
+ SimuUsGL* us_gl = new SimuUsGL(uav_real, "us", UAV_REAL_MODEL_ID,0);
+ SimuCameraGL* cam_bas = new SimuCameraGL(uav_real, "bottom camera", 320, 240, 640, 0, UAV_REAL_MODEL_ID,0);
+
+ simu->RunSimu();
+
+ delete simu;
+ return 0;
+}
+
+#endif
Index: trunk/demos/MixedReality/simulator_simu/CMakeLists.txt
===================================================================
--- trunk/demos/MixedReality/simulator_simu/CMakeLists.txt (revision 292)
+++ trunk/demos/MixedReality/simulator_simu/CMakeLists.txt (revision 292)
@@ -0,0 +1,32 @@
+PROJECT(MixedReality_simulator_simu)
+cmake_minimum_required(VERSION 2.8)
+
+SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+SET(FLAIR_USE_SIMULATOR TRUE)
+SET(FLAIR_USE_SIMULATOR_GL TRUE)
+SET(FLAIR_USE_SENSOR_ACTUATOR TRUE)
+
+include($ENV{FLAIR_ROOT}/flair-dev/cmake-modules/GlobalCmakeFlair.cmake)
+include(${FLAIR_USE_FILE})
+
+SET(SRC_FILES
+ ${CMAKE_SOURCE_DIR}/src/main.cpp
+)
+
+INCLUDE_DIRECTORIES(
+ ${FLAIR_INCLUDE_DIR}
+)
+
+#real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_rt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_rt ${FLAIR_LIBRARIES_RT})
+
+#non real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_nrt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_nrt ${FLAIR_LIBRARIES_NRT})
Index: trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/setup_x4.xml
===================================================================
--- trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/setup_x4.xml (revision 292)
+++ trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/setup_x4.xml (revision 292)
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/simulator_x4.sh
===================================================================
--- trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/simulator_x4.sh (revision 292)
+++ trunk/demos/MixedReality/simulator_simu/build_core2_64/bin/simulator_x4.sh (revision 292)
@@ -0,0 +1,10 @@
+#! /bin/bash
+if [ -f /proc/xenomai/version ];then
+ EXEC=./MixedReality_simulator_simu_rt
+else
+ EXEC=./MixedReality_simulator_simu_nrt
+fi
+
+. $FLAIR_ROOT/flair-dev/scripts/distribution_specific_hack.sh
+
+$EXEC -p 9000 -a 127.0.0.1 -x setup_x4.xml -o 10 -m $FLAIR_ROOT/flair-bin/models -s $FLAIR_ROOT/flair-bin/models/indoor_flight_arena.xml -v 127.0.0.1:3883
Index: trunk/demos/MixedReality/simulator_simu/src/main.cpp
===================================================================
--- trunk/demos/MixedReality/simulator_simu/src/main.cpp (revision 292)
+++ trunk/demos/MixedReality/simulator_simu/src/main.cpp (revision 292)
@@ -0,0 +1,106 @@
+// created: 2012/04/18
+// filename: main.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 6599
+//
+// version: $Id: $
+//
+// purpose: main simulateur
+//
+//
+/*********************************************************************/
+#ifdef GL
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define UAV_SIMU_MODEL_ID 1
+
+using namespace TCLAP;
+using namespace std;
+using namespace flair::simulator;
+using namespace flair::sensor;
+
+int port;
+int opti_time;
+string xml_file;
+string media_path;
+string scene_file;
+string address;
+string vrpn;
+
+void parseOptions(int argc, char** argv)
+{
+ try {
+ CmdLine cmd("Command description message", ' ', "0.1");
+
+ ValueArg xmlArg("x", "xml", "xml file", true, "./reglages.xml", "string");
+ cmd.add(xmlArg);
+
+ ValueArg portArg("p", "port", "ground station port", true, 9002, "int");
+ cmd.add(portArg);
+
+ ValueArg addressArg("a", "address", "ground station address", true, "127.0.0.1", "string");
+ cmd.add(addressArg);
+
+ ValueArg optiArg("o", "opti", "optitrack time ms", false, 0, "int");
+ cmd.add(optiArg);
+
+ ValueArg mediaArg("m", "media", "path to media files", true, "./", "string");
+ cmd.add(mediaArg);
+
+ ValueArg sceneArg("s", "scene", "path to scene file", true, "./voliere.xml", "string");
+ cmd.add(sceneArg);
+
+ ValueArg vrpnArg("v","vrpn","simu vrpn address and port",true,"127.0.0.1:3884","string");
+ cmd.add( vrpnArg );
+
+ cmd.parse(argc, argv);
+
+ // Get the value parsed by each arg.
+ port = portArg.getValue();
+ xml_file = xmlArg.getValue();
+ opti_time = optiArg.getValue();
+ address = addressArg.getValue();
+ media_path = mediaArg.getValue();
+ scene_file = sceneArg.getValue();
+ vrpn=vrpnArg.getValue();
+
+ } catch(ArgException& e) {
+ cerr << "error: " << e.error() << " for arg " << e.argId() << endl;
+ exit(EXIT_FAILURE);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ parseOptions(argc, argv);
+
+ Simulator* simu = new Simulator("simulator_simu", opti_time, 90,3884);
+ simu->SetupConnection(address, port);
+ simu->SetupUserInterface(xml_file);
+ Parser*gui = new Parser(960, 480, 640, 480, media_path, scene_file);
+
+ X4* uav_simu = new X4("Drone_1", UAV_SIMU_MODEL_ID);
+ SimuImu* imu = new SimuImu(uav_simu, "imu", UAV_SIMU_MODEL_ID,0);
+ SimuUsGL* us_gl = new SimuUsGL(uav_simu, "us", UAV_SIMU_MODEL_ID,0);
+ SimuCameraGL* cam_bas = new SimuCameraGL(uav_simu, "bottom camera", 320, 240, 640, 0,UAV_SIMU_MODEL_ID,0);
+
+ VrpnClient* vrpnclient=new VrpnClient("vrpn", vrpn,80);//simu_real or real vrpn server
+ UavVrpnObject* uav_real=new UavVrpnObject("Drone_0",vrpnclient);
+
+ vrpnclient->Start();
+ simu->RunSimu();
+
+ delete simu;
+ return 0;
+}
+
+#endif
Index: trunk/demos/MixedReality/uav_real/CMakeLists.txt
===================================================================
--- trunk/demos/MixedReality/uav_real/CMakeLists.txt (revision 292)
+++ trunk/demos/MixedReality/uav_real/CMakeLists.txt (revision 292)
@@ -0,0 +1,35 @@
+PROJECT(MixedReality_uav_real)
+cmake_minimum_required(VERSION 2.8)
+
+SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+SET(FLAIR_USE_FILTER TRUE)
+SET(FLAIR_USE_SENSOR_ACTUATOR TRUE)
+SET(FLAIR_USE_VISION_FILTER TRUE)
+SET(FLAIR_USE_META TRUE)
+SET(FLAIR_USE_VRPN TRUE)
+
+include($ENV{FLAIR_ROOT}/flair-dev/cmake-modules/GlobalCmakeFlair.cmake)
+include(${FLAIR_USE_FILE})
+
+SET(SRC_FILES
+ ${CMAKE_SOURCE_DIR}/src/main.cpp
+ ${CMAKE_SOURCE_DIR}/src/CircleFollower.cpp
+)
+
+INCLUDE_DIRECTORIES(
+ ${FLAIR_INCLUDE_DIR}
+)
+
+#real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_rt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_rt ${FLAIR_LIBRARIES_RT})
+
+#non real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_nrt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_nrt ${FLAIR_LIBRARIES_NRT})
Index: trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.sh
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.sh (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.2.2 -p 9000 -l /tmp -x CircleFollower_minidrones.xml -n Drone_0 -t mamboedu
Index: trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.xml
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.xml (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv5te/bin/CircleFollower_minidrones.xml (revision 292)
@@ -0,0 +1,357 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.sh
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.sh (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.147.193 -p 9000 -l /tmp -x CircleFollower_ardrone2.xml -n Drone_0 -t ardrone2
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.xml
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.xml (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_ardrone2.xml (revision 292)
@@ -0,0 +1,357 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.sh
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.sh (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.42.24 -p 9000 -l /tmp -x CircleFollower_bebop.xml -n Drone_0 -t bebop
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.xml
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.xml (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_bebop.xml (revision 292)
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.sh
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.sh (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_rt -a 192.168.147.217 -p 9000 -l /tmp -x CircleFollower_hdsx8.xml -n x8_0 -t hds_x8
Index: trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.xml
===================================================================
--- trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.xml (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_armv7a_neon/bin/CircleFollower_hdsx8.xml (revision 292)
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_real/build_core2_64/bin/setup_x4.xml
===================================================================
--- trunk/demos/MixedReality/uav_real/build_core2_64/bin/setup_x4.xml (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_core2_64/bin/setup_x4.xml (revision 292)
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_real/build_core2_64/bin/x4.sh
===================================================================
--- trunk/demos/MixedReality/uav_real/build_core2_64/bin/x4.sh (revision 292)
+++ trunk/demos/MixedReality/uav_real/build_core2_64/bin/x4.sh (revision 292)
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+if [ -f /proc/xenomai/version ];then
+ EXEC=./MixedReality_uav_real_rt
+else
+ EXEC=./MixedReality_uav_real_nrt
+fi
+
+. $FLAIR_ROOT/flair-dev/scripts/distribution_specific_hack.sh
+
+$EXEC -a 127.0.0.1 -p 9000 -l /tmp -x setup_x4.xml -t x4_simu0 -v 127.0.0.1:3884
Index: trunk/demos/MixedReality/uav_real/src/CircleFollower.cpp
===================================================================
--- trunk/demos/MixedReality/uav_real/src/CircleFollower.cpp (revision 292)
+++ trunk/demos/MixedReality/uav_real/src/CircleFollower.cpp (revision 292)
@@ -0,0 +1,282 @@
+// created: 2019/01/09
+// filename: CircleFollower.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: mixed reality demo, real uav side
+//
+//
+/*********************************************************************/
+
+#include "CircleFollower.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace std;
+using namespace flair::core;
+using namespace flair::gui;
+using namespace flair::sensor;
+using namespace flair::filter;
+using namespace flair::meta;
+
+CircleFollower::CircleFollower(TargetController *controller,string vrpn): UavStateMachine(controller), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) {
+ Uav* uav=GetUav();
+
+ VrpnClient* realVrpnClient=new VrpnClient("real_vrpn", uav->GetDefaultVrpnAddress(),80);
+ uavVrpn = new MetaVrpnObject(uav->ObjectName());
+ getFrameworkManager()->AddDeviceToLog(uavVrpn);
+ uav->GetAhrs()->YawPlot()->AddCurve(uavVrpn->State()->Element(2),DataPlot::Green);
+
+ startCircle=new PushButton(GetButtonsLayout()->NewRow(),"start_circle");
+ stopCircle=new PushButton(GetButtonsLayout()->LastRowLastCol(),"stop_circle");
+ positionHold=new PushButton(GetButtonsLayout()->LastRowLastCol(),"position hold");
+
+ VrpnClient* simuVrpnClient=new VrpnClient("simu_vrpn", vrpn,80);//simu_simu vrpn server
+ targetVrpn=new MetaVrpnObject("Drone_1",simuVrpnClient);
+ simuVrpnClient->Start();
+ realVrpnClient->Start();
+
+ getFrameworkManager()->AddDeviceToLog(targetVrpn);
+
+ circle=new TrajectoryGenerator2DCircle(realVrpnClient->GetLayout()->NewRow(),"circle");
+ uavVrpn->xPlot()->AddCurve(circle->GetMatrix()->Element(0,0),DataPlot::Blue);
+ uavVrpn->yPlot()->AddCurve(circle->GetMatrix()->Element(0,1),DataPlot::Blue);
+ uavVrpn->VxPlot()->AddCurve(circle->GetMatrix()->Element(1,0),DataPlot::Blue);
+ uavVrpn->VyPlot()->AddCurve(circle->GetMatrix()->Element(1,1),DataPlot::Blue);
+ uavVrpn->XyPlot()->AddCurve(circle->GetMatrix()->Element(0,1),circle->GetMatrix()->Element(0,0),DataPlot::Blue,"circle");
+
+ uX=new Pid(setupLawTab->At(1,0),"u_x");
+ uX->UseDefaultPlot(graphLawTab->NewRow());
+ uY=new Pid(setupLawTab->At(1,1),"u_y");
+ uY->UseDefaultPlot(graphLawTab->LastRowLastCol());
+
+ customReferenceOrientation= new AhrsData(this,"reference");
+ uav->GetAhrs()->AddPlot(customReferenceOrientation,DataPlot::Yellow);
+ AddDataToControlLawLog(customReferenceOrientation);
+
+ customOrientation=new AhrsData(this,"orientation");
+}
+
+CircleFollower::~CircleFollower() {
+}
+
+const AhrsData *CircleFollower::GetOrientation(void) const {
+ //get yaw from vrpn
+ Quaternion vrpnQuaternion;
+ uavVrpn->GetQuaternion(vrpnQuaternion);
+
+ //get roll, pitch and w from imu
+ Quaternion ahrsQuaternion;
+ Vector3Df ahrsAngularSpeed;
+ GetDefaultOrientation()->GetQuaternionAndAngularRates(ahrsQuaternion, ahrsAngularSpeed);
+
+ Euler ahrsEuler=ahrsQuaternion.ToEuler();
+ ahrsEuler.yaw=vrpnQuaternion.ToEuler().yaw;
+ Quaternion mixQuaternion=ahrsEuler.ToQuaternion();
+
+ customOrientation->SetQuaternionAndAngularRates(mixQuaternion,ahrsAngularSpeed);
+
+ return customOrientation;
+}
+
+void CircleFollower::AltitudeValues(float &z,float &dz) const{
+ Vector3Df uav_pos,uav_vel;
+
+ uavVrpn->GetPosition(uav_pos);
+ uavVrpn->GetSpeed(uav_vel);
+ //z and dz must be in uav's frame
+ z=-uav_pos.z;
+ dz=-uav_vel.z;
+}
+
+AhrsData *CircleFollower::GetReferenceOrientation(void) {
+ Vector2Df pos_err, vel_err; // in Uav coordinate system
+ float yaw_ref;
+ Euler refAngles;
+
+ PositionValues(pos_err, vel_err, yaw_ref);
+
+ refAngles.yaw=yaw_ref;
+
+ uX->SetValues(pos_err.x, vel_err.x);
+ uX->Update(GetTime());
+ refAngles.pitch=uX->Output();
+
+ uY->SetValues(pos_err.y, vel_err.y);
+ uY->Update(GetTime());
+ refAngles.roll=-uY->Output();
+
+ customReferenceOrientation->SetQuaternionAndAngularRates(refAngles.ToQuaternion(),Vector3Df(0,0,0));
+
+ return customReferenceOrientation;
+}
+
+void CircleFollower::PositionValues(Vector2Df &pos_error,Vector2Df &vel_error,float &yaw_ref) {
+ Vector3Df uav_pos,uav_vel; // in VRPN coordinate system
+ Vector2Df uav_2Dpos,uav_2Dvel; // in VRPN coordinate system
+
+ uavVrpn->GetPosition(uav_pos);
+ uavVrpn->GetSpeed(uav_vel);
+
+ uav_pos.To2Dxy(uav_2Dpos);
+ uav_vel.To2Dxy(uav_2Dvel);
+
+ if (behaviourMode==BehaviourMode_t::PositionHold) {
+ pos_error=uav_2Dpos-posHold;
+ vel_error=uav_2Dvel;
+ yaw_ref=yawHold;
+ } else { //Circle
+ Vector3Df target_pos;
+ Vector2Df circle_pos,circle_vel;
+ Vector2Df target_2Dpos;
+
+ targetVrpn->GetPosition(target_pos);
+ target_pos.To2Dxy(target_2Dpos);
+ circle->SetCenter(target_2Dpos);
+
+ //circle reference
+ circle->Update(GetTime());
+ circle->GetPosition(circle_pos);
+ circle->GetSpeed(circle_vel);
+
+ //error in optitrack frame
+ pos_error=uav_2Dpos-circle_pos;
+ vel_error=uav_2Dvel-circle_vel;
+ yaw_ref=atan2(target_pos.y-uav_pos.y,target_pos.x-uav_pos.x);
+ }
+
+ //error in uav frame
+ Quaternion currentQuaternion=GetCurrentQuaternion();
+ Euler currentAngles;//in vrpn frame
+ currentQuaternion.ToEuler(currentAngles);
+ pos_error.Rotate(-currentAngles.yaw);
+ vel_error.Rotate(-currentAngles.yaw);
+}
+
+void CircleFollower::SignalEvent(Event_t event) {
+ UavStateMachine::SignalEvent(event);
+ switch(event) {
+ case Event_t::TakingOff:
+ behaviourMode=BehaviourMode_t::Default;
+ vrpnLost=false;
+ break;
+ case Event_t::EnteringControlLoop:
+ if ((behaviourMode==BehaviourMode_t::Circle) && (!circle->IsRunning())) {
+ VrpnPositionHold();
+ }
+ break;
+ case Event_t::EnteringFailSafeMode:
+ behaviourMode=BehaviourMode_t::Default;
+ break;
+ }
+}
+
+void CircleFollower::ExtraSecurityCheck(void) {
+ if ((!vrpnLost) && ((behaviourMode==BehaviourMode_t::Circle) || (behaviourMode==BehaviourMode_t::PositionHold))) {
+ if (!targetVrpn->IsTracked(500)) {
+ Thread::Err("VRPN, target lost\n");
+ vrpnLost=true;
+ EnterFailSafeMode();
+ Land();
+ }
+ if (!uavVrpn->IsTracked(500)) {
+ Thread::Err("VRPN, uav lost\n");
+ vrpnLost=true;
+ EnterFailSafeMode();
+ Land();
+ }
+ }
+}
+
+void CircleFollower::ExtraCheckPushButton(void) {
+ if(startCircle->Clicked() && (behaviourMode!=BehaviourMode_t::Circle)) {
+ StartCircle();
+ }
+ if(stopCircle->Clicked() && (behaviourMode==BehaviourMode_t::Circle)) {
+ StopCircle();
+ }
+ if(positionHold->Clicked() && (behaviourMode==BehaviourMode_t::Default)) {
+ VrpnPositionHold();
+ }
+}
+
+void CircleFollower::ExtraCheckJoystick(void) {
+ //R1 and Circle
+ if(GetJoystick()->IsButtonPressed(9) && GetJoystick()->IsButtonPressed(4) && (behaviourMode!=BehaviourMode_t::Circle)) {
+ StartCircle();
+ }
+
+ //R1 and Cross
+ if(GetJoystick()->IsButtonPressed(9) && GetJoystick()->IsButtonPressed(5) && (behaviourMode==BehaviourMode_t::Circle)) {
+ StopCircle();
+ }
+
+ //R1 and Square
+ if(GetJoystick()->IsButtonPressed(9) && GetJoystick()->IsButtonPressed(2) && (behaviourMode==BehaviourMode_t::Default)) {
+ VrpnPositionHold();
+ }
+}
+
+void CircleFollower::StartCircle(void) {
+ if (SetOrientationMode(OrientationMode_t::Custom)) {
+ Thread::Info("CircleFollower: start circle\n");
+ } else {
+ Thread::Warn("CircleFollower: could not start circle\n");
+ return;
+ }
+ Vector3Df uav_pos,target_pos;
+ Vector2Df uav_2Dpos,target_2Dpos;
+
+ targetVrpn->GetPosition(target_pos);
+ target_pos.To2Dxy(target_2Dpos);
+ circle->SetCenter(target_2Dpos);
+
+ uavVrpn->GetPosition(uav_pos);
+ uav_pos.To2Dxy(uav_2Dpos);
+ circle->StartTraj(uav_2Dpos);
+
+ uX->Reset();
+ uY->Reset();
+ behaviourMode=BehaviourMode_t::Circle;
+}
+
+void CircleFollower::StopCircle(void) {
+ circle->FinishTraj();
+ //GetJoystick()->Rumble(0x70);
+ Thread::Info("CircleFollower: finishing circle\n");
+}
+
+void CircleFollower::VrpnPositionHold(void) {
+ Quaternion vrpnQuaternion;
+ uavVrpn->GetQuaternion(vrpnQuaternion);
+ yawHold=vrpnQuaternion.ToEuler().yaw;
+
+ Vector3Df vrpnPosition;
+ uavVrpn->GetPosition(vrpnPosition);
+ vrpnPosition.To2Dxy(posHold);
+
+ uX->Reset();
+ uY->Reset();
+ behaviourMode=BehaviourMode_t::PositionHold;
+ SetOrientationMode(OrientationMode_t::Custom);
+ Thread::Info("CircleFollower: holding position\n");
+}
Index: trunk/demos/MixedReality/uav_real/src/CircleFollower.h
===================================================================
--- trunk/demos/MixedReality/uav_real/src/CircleFollower.h (revision 292)
+++ trunk/demos/MixedReality/uav_real/src/CircleFollower.h (revision 292)
@@ -0,0 +1,74 @@
+// created: 2019/01/09
+// filename: CircleFollower.h
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: mixed reality demo, real uav side
+//
+//
+/*********************************************************************/
+
+#ifndef CIRCLEFOLLOWER_H
+#define CIRCLEFOLLOWER_H
+
+#include
+
+namespace flair {
+ namespace gui {
+ class PushButton;
+ }
+ namespace filter {
+ class TrajectoryGenerator2DCircle;
+ class CvtColor;
+ }
+ namespace meta {
+ class MetaVrpnObject;
+ }
+ namespace sensor {
+ class TargetController;
+ }
+}
+
+class CircleFollower : public flair::meta::UavStateMachine {
+ public:
+ CircleFollower(flair::sensor::TargetController *controller,std::string vrpn);
+ ~CircleFollower();
+
+ private:
+
+ enum class BehaviourMode_t {
+ Default,
+ PositionHold,
+ Circle
+ };
+
+ BehaviourMode_t behaviourMode;
+ bool vrpnLost;
+
+ void VrpnPositionHold(void);//flight mode
+ void StartCircle(void);
+ void StopCircle(void);
+ void ExtraSecurityCheck(void);
+ void ExtraCheckPushButton(void);
+ void ExtraCheckJoystick(void);
+ const flair::core::AhrsData *GetOrientation(void) const;
+ void AltitudeValues(float &z,float &dz) const;
+ void PositionValues(flair::core::Vector2Df &pos_error,flair::core::Vector2Df &vel_error,float &yaw_ref);
+ flair::core::AhrsData *GetReferenceOrientation(void);
+ void SignalEvent(Event_t event);
+
+ flair::filter::Pid *uX, *uY;
+
+ flair::core::Vector2Df posHold;
+ float yawHold;
+
+ flair::gui::PushButton *startCircle,*stopCircle,*positionHold;
+ flair::meta::MetaVrpnObject *targetVrpn,*uavVrpn;
+ flair::filter::TrajectoryGenerator2DCircle *circle;
+ flair::core::AhrsData *customReferenceOrientation,*customOrientation;
+};
+
+#endif // CIRCLEFOLLOWER_H
Index: trunk/demos/MixedReality/uav_real/src/main.cpp
===================================================================
--- trunk/demos/MixedReality/uav_real/src/main.cpp (revision 292)
+++ trunk/demos/MixedReality/uav_real/src/main.cpp (revision 292)
@@ -0,0 +1,98 @@
+// created: 2011/05/01
+// filename: main.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: exemple de code uav
+//
+//
+/*********************************************************************/
+
+#include "CircleFollower.h"
+#include
+#include
+#include
+#include
+#include
+
+using namespace TCLAP;
+using namespace std;
+using namespace flair::core;
+using namespace flair::meta;
+using namespace flair::sensor;
+
+string uav_type;
+string log_path;
+int port;
+int ds3port;
+string xml_file;
+string address;
+string vrpn;
+
+void parseOptions(int argc, char** argv);
+
+
+int main(int argc, char* argv[]) {
+ parseOptions(argc,argv);
+
+ FrameworkManager *manager;
+ manager= new FrameworkManager("Drone_0");
+ manager->SetupConnection(address,port);
+ manager->SetupUserInterface(xml_file);
+ manager->SetupLogger(log_path);
+
+ Uav* drone=CreateUav("Drone_0",uav_type);
+ TargetEthController *controller=new TargetEthController("Dualshock3",ds3port);
+ CircleFollower* demo=new CircleFollower(controller,vrpn);
+
+ demo->Start();
+ demo->Join();
+
+ delete manager;
+}
+
+void parseOptions(int argc, char** argv) {
+ try {
+
+ CmdLine cmd("Command description message", ' ', "0.1");
+
+ ValueArg typeArg("t","type","uav type: ardrone2, hds_x4, hds_x8, hds_xufo, x4_simu, x8_simu or x4_simux (with x the number of the simulated uav)",true,"hds_x4","string");
+ cmd.add( typeArg );
+
+ ValueArg xmlArg("x","xml","fichier xml",true,"./reglages.xml","string");
+ cmd.add( xmlArg );
+
+ ValueArg logsArg("l","logs","repertoire des logs",true,"/media/ram","string");
+ cmd.add( logsArg );
+
+ ValueArg portArg("p","port","port pour station sol",true,9000,"int");
+ cmd.add( portArg );
+
+ ValueArg addressArg("a","address","adresse station sol",true,"127.0.0.1","string");
+ cmd.add( addressArg );
+
+ ValueArg ds3portArg("d","ds3_port","port pour ds3",false,20000,"int");
+ cmd.add( ds3portArg );
+
+ ValueArg vrpnArg("v","vrpn","simu vrpn address and port",true,"127.0.0.1:3884","string");
+ cmd.add( vrpnArg );
+
+ cmd.parse( argc, argv );
+
+ // Get the value parsed by each arg.
+ log_path = logsArg.getValue();
+ port=portArg.getValue();
+ ds3port=ds3portArg.getValue();
+ xml_file = xmlArg.getValue();
+ uav_type=typeArg.getValue();
+ address=addressArg.getValue();
+ vrpn=vrpnArg.getValue();
+
+ } catch (ArgException &e) { // catch any exceptions
+ cerr << "error: " << e.error() << " for arg " << e.argId() << endl;
+ exit(EXIT_FAILURE);
+ }
+}
Index: trunk/demos/MixedReality/uav_simu/CMakeLists.txt
===================================================================
--- trunk/demos/MixedReality/uav_simu/CMakeLists.txt (revision 292)
+++ trunk/demos/MixedReality/uav_simu/CMakeLists.txt (revision 292)
@@ -0,0 +1,35 @@
+PROJECT(MixedReality_uav_simu)
+cmake_minimum_required(VERSION 2.8)
+
+SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+SET(FLAIR_USE_FILTER TRUE)
+SET(FLAIR_USE_SENSOR_ACTUATOR TRUE)
+SET(FLAIR_USE_VISION_FILTER TRUE)
+SET(FLAIR_USE_META TRUE)
+SET(FLAIR_USE_VRPN TRUE)
+
+include($ENV{FLAIR_ROOT}/flair-dev/cmake-modules/GlobalCmakeFlair.cmake)
+include(${FLAIR_USE_FILE})
+
+SET(SRC_FILES
+ ${CMAKE_SOURCE_DIR}/src/main.cpp
+ ${CMAKE_SOURCE_DIR}/src/App.cpp
+)
+
+INCLUDE_DIRECTORIES(
+ ${FLAIR_INCLUDE_DIR}
+)
+
+#real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_rt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_rt ${FLAIR_LIBRARIES_RT})
+
+#non real time executable
+ADD_EXECUTABLE(${PROJECT_NAME}_nrt
+ ${SRC_FILES}
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}_nrt ${FLAIR_LIBRARIES_NRT})
Index: trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.sh
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.sh (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.2.2 -p 9000 -l /tmp -x CircleFollower_minidrones.xml -n Drone_0 -t mamboedu
Index: trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.xml
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.xml (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv5te/bin/MixedReality_minidrones.xml (revision 292)
@@ -0,0 +1,357 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.sh
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.sh (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.147.193 -p 9000 -l /tmp -x CircleFollower_ardrone2.xml -n Drone_0 -t ardrone2
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.xml
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.xml (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_ardrone2.xml (revision 292)
@@ -0,0 +1,357 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.sh
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.sh (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_nrt -a 192.168.42.24 -p 9000 -l /tmp -x CircleFollower_bebop.xml -n Drone_0 -t bebop
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.xml
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.xml (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_bebop.xml (revision 292)
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.sh
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.sh (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.sh (revision 292)
@@ -0,0 +1,1 @@
+./CircleFollower_rt -a 192.168.147.217 -p 9000 -l /tmp -x CircleFollower_hdsx8.xml -n x8_0 -t hds_x8
Index: trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.xml
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.xml (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_armv7a_neon/bin/MixedReality_hdsx8.xml (revision 292)
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_simu/build_core2_64/bin/setup_x4.xml
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_core2_64/bin/setup_x4.xml (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_core2_64/bin/setup_x4.xml (revision 292)
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/demos/MixedReality/uav_simu/build_core2_64/bin/x4.sh
===================================================================
--- trunk/demos/MixedReality/uav_simu/build_core2_64/bin/x4.sh (revision 292)
+++ trunk/demos/MixedReality/uav_simu/build_core2_64/bin/x4.sh (revision 292)
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+if [ -f /proc/xenomai/version ];then
+ EXEC=./MixedReality_uav_simu_rt
+else
+ EXEC=./MixedReality_uav_simu_nrt
+fi
+
+. $FLAIR_ROOT/flair-dev/scripts/distribution_specific_hack.sh
+
+$EXEC -a 127.0.0.1 -p 9000 -l /tmp -x setup_x4.xml -t x4_simu1 -d 20001
Index: trunk/demos/MixedReality/uav_simu/src/App.cpp
===================================================================
--- trunk/demos/MixedReality/uav_simu/src/App.cpp (revision 292)
+++ trunk/demos/MixedReality/uav_simu/src/App.cpp (revision 292)
@@ -0,0 +1,190 @@
+// created: 2019/01/09
+// filename: App.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: mixed reality demo, simulated uav side
+//
+//
+/*********************************************************************/
+
+#include "App.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace std;
+using namespace flair::core;
+using namespace flair::gui;
+using namespace flair::sensor;
+using namespace flair::filter;
+using namespace flair::meta;
+
+App::App(TargetController *controller): UavStateMachine(controller), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) {
+ Uav* uav=GetUav();
+
+ VrpnClient* vrpnclient=new VrpnClient("vrpn", "127.0.0.1:3884",80);//local ip, and specific port for simulator_simu's vrpn
+ uavVrpn = new MetaVrpnObject(uav->ObjectName());
+ getFrameworkManager()->AddDeviceToLog(uavVrpn);
+ uav->GetAhrs()->YawPlot()->AddCurve(uavVrpn->State()->Element(2),DataPlot::Green);
+
+ positionHold=new PushButton(GetButtonsLayout()->LastRowLastCol(),"position hold");
+
+ vrpnclient->Start();
+
+ uX=new Pid(setupLawTab->At(1,0),"u_x");
+ uX->UseDefaultPlot(graphLawTab->NewRow());
+ uY=new Pid(setupLawTab->At(1,1),"u_y");
+ uY->UseDefaultPlot(graphLawTab->LastRowLastCol());
+
+ customReferenceOrientation= new AhrsData(this,"reference");
+ uav->GetAhrs()->AddPlot(customReferenceOrientation,DataPlot::Yellow);
+ AddDataToControlLawLog(customReferenceOrientation);
+
+ customOrientation=new AhrsData(this,"orientation");
+}
+
+App::~App() {
+}
+
+const AhrsData *App::GetOrientation(void) const {
+ //get yaw from vrpn
+ Quaternion vrpnQuaternion;
+ uavVrpn->GetQuaternion(vrpnQuaternion);
+
+ //get roll, pitch and w from imu
+ Quaternion ahrsQuaternion;
+ Vector3Df ahrsAngularSpeed;
+ GetDefaultOrientation()->GetQuaternionAndAngularRates(ahrsQuaternion, ahrsAngularSpeed);
+
+ Euler ahrsEuler=ahrsQuaternion.ToEuler();
+ ahrsEuler.yaw=vrpnQuaternion.ToEuler().yaw;
+ Quaternion mixQuaternion=ahrsEuler.ToQuaternion();
+
+ customOrientation->SetQuaternionAndAngularRates(mixQuaternion,ahrsAngularSpeed);
+
+ return customOrientation;
+}
+
+void App::AltitudeValues(float &z,float &dz) const{
+ Vector3Df uav_pos,uav_vel;
+
+ uavVrpn->GetPosition(uav_pos);
+ uavVrpn->GetSpeed(uav_vel);
+ //z and dz must be in uav's frame
+ z=-uav_pos.z;
+ dz=-uav_vel.z;
+}
+
+AhrsData *App::GetReferenceOrientation(void) {
+ Vector2Df pos_err, vel_err; // in Uav coordinate system
+ float yaw_ref;
+ Euler refAngles;
+
+ PositionValues(pos_err, vel_err, yaw_ref);
+
+ refAngles.yaw=yaw_ref;
+
+ uX->SetValues(pos_err.x, vel_err.x);
+ uX->Update(GetTime());
+ refAngles.pitch=uX->Output();
+
+ uY->SetValues(pos_err.y, vel_err.y);
+ uY->Update(GetTime());
+ refAngles.roll=-uY->Output();
+
+ customReferenceOrientation->SetQuaternionAndAngularRates(refAngles.ToQuaternion(),Vector3Df(0,0,0));
+
+ return customReferenceOrientation;
+}
+
+void App::PositionValues(Vector2Df &pos_error,Vector2Df &vel_error,float &yaw_ref) {
+ Vector3Df uav_pos,uav_vel; // in VRPN coordinate system
+ Vector2Df uav_2Dpos,uav_2Dvel; // in VRPN coordinate system
+
+ uavVrpn->GetPosition(uav_pos);
+ uavVrpn->GetSpeed(uav_vel);
+
+ uav_pos.To2Dxy(uav_2Dpos);
+ uav_vel.To2Dxy(uav_2Dvel);
+
+ pos_error=uav_2Dpos-posHold;
+ vel_error=uav_2Dvel;
+ yaw_ref=yawHold;
+
+ //error in uav frame
+ Quaternion currentQuaternion=GetCurrentQuaternion();
+ Euler currentAngles;//in vrpn frame
+ currentQuaternion.ToEuler(currentAngles);
+ pos_error.Rotate(-currentAngles.yaw);
+ vel_error.Rotate(-currentAngles.yaw);
+}
+
+void App::SignalEvent(Event_t event) {
+ UavStateMachine::SignalEvent(event);
+ switch(event) {
+ case Event_t::TakingOff:
+ behaviourMode=BehaviourMode_t::Default;
+ vrpnLost=false;
+ break;
+ case Event_t::EnteringControlLoop:
+ break;
+ case Event_t::EnteringFailSafeMode:
+ behaviourMode=BehaviourMode_t::Default;
+ break;
+ }
+}
+
+void App::ExtraSecurityCheck(void) {
+ if ((!vrpnLost) && (behaviourMode==BehaviourMode_t::PositionHold)) {
+ if (!uavVrpn->IsTracked(500)) {
+ Thread::Err("VRPN, uav lost\n");
+ vrpnLost=true;
+ EnterFailSafeMode();
+ Land();
+ }
+ }
+}
+
+void App::ExtraCheckPushButton(void) {
+ if(positionHold->Clicked() && (behaviourMode==BehaviourMode_t::Default)) {
+ VrpnPositionHold();
+ }
+}
+
+void App::ExtraCheckJoystick(void) {
+ //R1 and Square
+ if(GetJoystick()->IsButtonPressed(9) && GetJoystick()->IsButtonPressed(2) && (behaviourMode==BehaviourMode_t::Default)) {
+ VrpnPositionHold();
+ }
+}
+
+void App::VrpnPositionHold(void) {
+ Quaternion vrpnQuaternion;
+ uavVrpn->GetQuaternion(vrpnQuaternion);
+ yawHold=vrpnQuaternion.ToEuler().yaw;
+
+ Vector3Df vrpnPosition;
+ uavVrpn->GetPosition(vrpnPosition);
+ vrpnPosition.To2Dxy(posHold);
+
+ uX->Reset();
+ uY->Reset();
+ behaviourMode=BehaviourMode_t::PositionHold;
+ SetOrientationMode(OrientationMode_t::Custom);
+ Thread::Info("App: holding position\n");
+}
Index: trunk/demos/MixedReality/uav_simu/src/App.h
===================================================================
--- trunk/demos/MixedReality/uav_simu/src/App.h (revision 292)
+++ trunk/demos/MixedReality/uav_simu/src/App.h (revision 292)
@@ -0,0 +1,66 @@
+// created: 2019/01/09
+// filename: App.h
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: mixed reality demo, simulated uav side
+//
+//
+/*********************************************************************/
+
+#ifndef APP_H
+#define APP_H
+
+#include
+
+namespace flair {
+ namespace gui {
+ class PushButton;
+ }
+ namespace meta {
+ class MetaVrpnObject;
+ }
+ namespace sensor {
+ class TargetController;
+ }
+}
+
+class App : public flair::meta::UavStateMachine {
+ public:
+ App(flair::sensor::TargetController *controller);
+ ~App();
+
+ private:
+
+ enum class BehaviourMode_t {
+ Default,
+ PositionHold,
+ };
+
+ BehaviourMode_t behaviourMode;
+ bool vrpnLost;
+
+ void VrpnPositionHold(void);
+ void ExtraSecurityCheck(void);
+ void ExtraCheckPushButton(void);
+ void ExtraCheckJoystick(void);
+ const flair::core::AhrsData *GetOrientation(void) const;
+ void AltitudeValues(float &z,float &dz) const;
+ void PositionValues(flair::core::Vector2Df &pos_error,flair::core::Vector2Df &vel_error,float &yaw_ref);
+ flair::core::AhrsData *GetReferenceOrientation(void);
+ void SignalEvent(Event_t event);
+
+ flair::filter::Pid *uX, *uY;
+
+ flair::core::Vector2Df posHold;
+ float yawHold;
+
+ flair::gui::PushButton *positionHold;
+ flair::meta::MetaVrpnObject *uavVrpn;
+ flair::core::AhrsData *customReferenceOrientation,*customOrientation;
+};
+
+#endif // APP_H
Index: trunk/demos/MixedReality/uav_simu/src/main.cpp
===================================================================
--- trunk/demos/MixedReality/uav_simu/src/main.cpp (revision 292)
+++ trunk/demos/MixedReality/uav_simu/src/main.cpp (revision 292)
@@ -0,0 +1,93 @@
+// created: 2011/05/01
+// filename: main.cpp
+//
+// author: Guillaume Sanahuja
+// Copyright Heudiasyc UMR UTC/CNRS 7253
+//
+// version: $Id: $
+//
+// purpose: exemple de code uav
+//
+//
+/*********************************************************************/
+
+#include "App.h"
+#include
+#include
+#include
+#include
+#include
+
+using namespace TCLAP;
+using namespace std;
+using namespace flair::core;
+using namespace flair::meta;
+using namespace flair::sensor;
+
+string uav_type;
+string log_path;
+int port;
+int ds3port;
+string xml_file;
+string address;
+
+void parseOptions(int argc, char** argv);
+
+
+int main(int argc, char* argv[]) {
+ parseOptions(argc,argv);
+
+ FrameworkManager *manager;
+ manager= new FrameworkManager("Drone_1");
+ manager->SetupConnection(address,port);
+ manager->SetupUserInterface(xml_file);
+ manager->SetupLogger(log_path);
+
+ Uav* drone=CreateUav("Drone_1",uav_type);
+ TargetEthController *controller=new TargetEthController("Dualshock3",ds3port);
+ App* demo=new App(controller);
+
+ demo->Start();
+ demo->Join();
+
+ delete manager;
+}
+
+void parseOptions(int argc, char** argv) {
+ try {
+
+ CmdLine cmd("Command description message", ' ', "0.1");
+
+ ValueArg typeArg("t","type","uav type: ardrone2, hds_x4, hds_x8, hds_xufo, x4_simu, x8_simu or x4_simux (with x the number of the simulated uav)",true,"hds_x4","string");
+ cmd.add( typeArg );
+
+ ValueArg xmlArg("x","xml","fichier xml",true,"./reglages.xml","string");
+ cmd.add( xmlArg );
+
+ ValueArg logsArg("l","logs","repertoire des logs",true,"/media/ram","string");
+ cmd.add( logsArg );
+
+ ValueArg portArg("p","port","port pour station sol",true,9000,"int");
+ cmd.add( portArg );
+
+ ValueArg addressArg("a","address","adresse station sol",true,"127.0.0.1","string");
+ cmd.add( addressArg );
+
+ ValueArg ds3portArg("d","ds3_port","port pour ds3",false,20000,"int");
+ cmd.add( ds3portArg );
+
+ cmd.parse( argc, argv );
+
+ // Get the value parsed by each arg.
+ log_path = logsArg.getValue();
+ port=portArg.getValue();
+ ds3port=ds3portArg.getValue();
+ xml_file = xmlArg.getValue();
+ uav_type=typeArg.getValue();
+ address=addressArg.getValue();
+
+ } catch (ArgException &e) { // catch any exceptions
+ cerr << "error: " << e.error() << " for arg " << e.argId() << endl;
+ exit(EXIT_FAILURE);
+ }
+}