source: flair-src/tags/latest/lib/FlairMeta/src/SimuX8.cpp @ 451

Last change on this file since 451 was 286, checked in by Sanahuja Guillaume, 3 years ago

draw vrpn axis in simulator

File size: 3.6 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5//  created:    2016/02/08
6//  filename:   SimuX8.cpp
7//
8//  author:     Guillaume Sanahuja
9//              Copyright Heudiasyc UMR UTC/CNRS 7253
10//
11//  version:    $Id: $
12//
13//  purpose:    Class defining a simulation x8 uav
14//
15//
16/*********************************************************************/
17#ifdef CORE2_64
18
19#include "SimuX8.h"
20#include <FrameworkManager.h>
21#include <X4X8Multiplex.h>
22#include <SimulatedImu.h>
23#include <SimulatedAhrs.h>
24#include <SimulatedBldc.h>
25#include <SimulatedUs.h>
26#include <SimulatedCamera.h>
27#include <SimulatedPressureSensor.h>
28#include <BatteryMonitor.h>
29#include <SimulatedGps.h>
30#include <Tab.h>
31#include <FindArgument.h>
32
33using std::string;
34using namespace flair::core;
35using namespace flair::gui;
36using namespace flair::sensor;
37using namespace flair::filter;
38using namespace flair::actuator;
39
40namespace flair {
41namespace meta {
42
43SimuX8::SimuX8(string name, uint32_t simu_id,string options,
44               filter::UavMultiplex *multiplex)
45    : Uav(name, multiplex) {
46
47  if (multiplex == NULL)
48    SetMultiplex(new X4X8Multiplex("motors", X4X8Multiplex::X8));
49
50  SetBldc(new SimulatedBldc(GetUavMultiplex(), GetUavMultiplex()->GetLayout(),
51                       "motors", GetUavMultiplex()->MotorsCount(), simu_id,0));
52  SetUsRangeFinder(new SimulatedUs("us", simu_id,0, 60));
53  SetAhrs(new SimulatedAhrs("ahrs", simu_id, 0,70));
54  Tab *bat_tab = new Tab(getFrameworkManager()->GetTabWidget(), "battery");
55  SetBatteryMonitor(new BatteryMonitor(bat_tab->NewRow(), "battery"));
56  GetBatteryMonitor()->SetBatteryValue(12);
57 
58  uint16_t camvWidth=320,camvHeight=240;
59        ReadCameraResolutionOption(options,"camv",camvWidth,camvHeight);
60  Info("using vertical camera resolution: %ix%i\n",camvWidth, camvHeight);
61  SetVerticalCamera(new SimulatedCamera("simu_cam_v", camvWidth, camvHeight, 3, simu_id,0, 10));
62 
63  uint16_t camhWidth=320,camhHeight=240;
64  ReadCameraResolutionOption(options,"camh",camhWidth,camhHeight);
65  Info("using horizontal camera resolution: %ix%i\n",camhWidth, camhHeight);
66  SetHorizontalCamera(new SimulatedCamera("simu_cam_h", camhWidth, camhHeight, 3, simu_id,1, 10));
67 
68  string useGps=FindArgument(options,"use_gps=",false);
69  if(useGps=="true") {
70    SetGps(new SimulatedGps("gps", (NmeaGps::NMEAFlags_t)(NmeaGps::GGA | NmeaGps::VTG), 0,0, 40));
71  } 
72 
73  string usePressureSensor=FindArgument(options,"use_pressure_sensor=",false);
74  if(usePressureSensor=="true") {
75    SetPressureSensor(new SimulatedPressureSensor("pressuresensor", 0,0, 10));
76  } 
77}
78
79SimuX8::~SimuX8() {}
80
81void SimuX8::StartSensors(void) {
82  ((SimulatedImu *)(GetAhrs()->GetImu()))->Start();
83  ((SimulatedUs *)GetUsRangeFinder())->Start();
84  ((SimulatedCamera *)GetVerticalCamera())->Start();
85  ((SimulatedCamera *)GetHorizontalCamera())->Start();
86  if(GetGps()) ((SimulatedGps *)GetGps())->Start();
87  if(GetPressureSensor()) ((SimulatedPressureSensor *)GetPressureSensor())->Start();
88}
89
90void SimuX8::ReadCameraResolutionOption(string options,string cameraName,uint16_t &camWidth,uint16_t &camHeight) const {
91  string camOpts=FindArgument(options,cameraName +"=",false);
92        if(camOpts!="") {
93    size_t position=camOpts.find("x");
94    if(position!=std::string::npos) {
95        camWidth=std::stoi(camOpts.substr(0,position));
96        camHeight=std::stoi(camOpts.substr(position+1,std::string::npos));
97    } else {
98      Warn("bad camera resolution parameter (%s) should be WIDTHxHEIGHT format\n",camOpts.c_str());
99    }
100  }
101}
102
103} // end namespace meta
104} // end namespace flair
105
106#endif
Note: See TracBrowser for help on using the repository browser.