]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
Merge branch 'maint-demo' into demo
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 28 Mar 2014 00:19:06 +0000 (01:19 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 28 Mar 2014 00:19:06 +0000 (01:19 +0100)
Conflicts:
src/robomon/RobomonAtlantis.cpp
src/robomon/RobomonAtlantis.h

1  2 
src/robomon/RobomonAtlantis.cpp
src/robomon/RobomonAtlantis.h

index 8c8ca289f22fbd7aabe0dde23ae146b62b6fbacd,6679b8ed36b3b1427d174a7e01f446bf948752af..f6cb7e16d9aa80e48ccbdb0e7957fd7cea23c4a6
@@@ -46,8 -45,8 +46,8 @@@
  #include <QDebug>
  #include <QMessageBox>
  
 -RobomonAtlantis::RobomonAtlantis(QWidget *parent)
 -    : QWidget(parent), motorSimulation(orte)
 +RobomonAtlantis::RobomonAtlantis(QStatusBar *_statusBar)
-       : QWidget(0), statusBar(_statusBar)
++      : QWidget(0), statusBar(_statusBar), motorSimulation(orte)
  {
        QFont font;
        font.setPointSize(7);
@@@ -176,10 -174,20 +176,20 @@@ void RobomonAtlantis::createMiscGroupBo
  
        obstacleSimulationCheckBox = new QCheckBox(tr("&Obstacle simulation"));
        obstacleSimulationCheckBox->setShortcut(tr("o"));
+       obstacleSimulationCheckBox->setToolTip("When enabled, simulates an obstacle,\npublishes simlated hokuyo data and \ndisplays robot's map by using shared memory.");
        layout->addWidget(obstacleSimulationCheckBox);
  
- //    startPlug = new QCheckBox("&Start plug");
- //    layout->addWidget(startPlug);
+       motorSimulationCheckBox = new QCheckBox(tr("&Motor simulation"));
+       motorSimulationCheckBox->setShortcut(tr("m"));
+       motorSimulationCheckBox->setToolTip("Subscribes to motion_speed and\nbased on this publishes motion_irc.");
+       layout->addWidget(motorSimulationCheckBox);
 -      startPlug = new QCheckBox("&Start plug");
 -      layout->addWidget(startPlug);
++//    startPlug = new QCheckBox("&Start plug");
++//    layout->addWidget(startPlug);
+       colorChoser = new QCheckBox("&Team color");
+       layout->addWidget(colorChoser);
        miscGroupBox->setLayout(layout);
  }
  
@@@ -221,17 -229,21 +231,17 @@@ void RobomonAtlantis::createDebugGroupB
  
  void RobomonAtlantis::createActuatorsGroupBox()
  {
 -      actuatorsGroupBox = new QGroupBox(tr("Actuators"));
 -      actuatorsGroupBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
 -      QHBoxLayout *layout = new QHBoxLayout();
 -//    vidle = new QDial();
 -
 -//    vidle->setMinimum(VIDLE_VYSIP);
 -//    vidle->setMaximum((VIDLE_UP-VIDLE_VYSIP)+VIDLE_VYSIP);
 -//    vidle->setEnabled(true);
 +      actuatorsGroupBox = new QGroupBox(tr("Status"));
 +      actuatorsGroupBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Maximum);
 +      QGridLayout *layout = new QGridLayout();
  
 -      //createMotorsGroupBox();
 +      layout->addWidget(MiscGui::createLabel("APP:"), 1, 0);
 +        system_status = new QLabel();
 +        system_status->setMinimumWidth(100);
 +        system_status->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
 +        layout->addWidget(system_status, 1, 1);
-       
 -      layout->setAlignment(Qt::AlignLeft);
 -//    layout->addWidget(vidle);
 -      //layout->addWidget(enginesGroupBox);
 -      actuatorsGroupBox->setLayout(layout);
 +        actuatorsGroupBox->setLayout(layout);
  }
  
  void RobomonAtlantis::createPowerGroupBox()
@@@ -795,10 -825,7 +805,7 @@@ void RobomonAtlantis::createOrte(
                                             rcv_fsm_motion_cb, this);
        robottype_subscriber_fsm_act_create(&orte,
                                             rcv_fsm_act_cb, this);
-       /* motors */
-       orte.motion_speed.left = 0xffff;
-       orte.motion_speed.right = 0xffff;
 -    robottype_subscriber_motion_speed_create(&orte, NULL, NULL);
++      robottype_subscriber_motion_speed_create(&orte, NULL, NULL);
  
        /* power management */
          orte.pwr_ctrl.voltage33 = true;
@@@ -958,6 -987,21 +965,15 @@@ void RobomonAtlantis::sendStart(int plu
        ORTEPublicationSend(orte.publication_robot_cmd);
  }
  
 -void RobomonAtlantis::setTeamColor(int plug)
 -{
 -      orte.robot_switches.team_color = plug ? 1 : 0;
 -      ORTEPublicationSend(orte.publication_robot_switches);
 -}
 -
+ void RobomonAtlantis::setMotorSimulation(int state)
+ {
+     if (state) {
+         motorSimulation.start();
+     } else {
+         motorSimulation.stop();
+     }
+ }
  void RobomonAtlantis::resetTrails()
  {
        trailRefPos->reset();
index cb95ac47ef218affda9d640cfe0042b258c10aa3,f7983628b3200db586dd4012ae648f9291e85440..947b9578d3943215b27b18eb44e9b8b202f0c48d
@@@ -39,8 -39,40 +41,41 @@@ class QDial
  class QSlider;
  class QProgressBar;
  class QFont;
 +class QImage;
  
+ class MotorSimulation : QObject {
+     Q_OBJECT
+     QTimer timer;
+     qint64 last_time;
+     struct robottype_orte_data &orte;
+ public:
+     MotorSimulation(struct robottype_orte_data &orte) : QObject(), timer(this), orte(orte) {}
+     void start()
+     {
+         robottype_publisher_motion_irc_create(&orte, 0, 0);
+         connect(&timer, SIGNAL(timeout()), this, SLOT(updateIRC()));
+         timer.start(50);
+     }
+     void stop()
+     {
+         robottype_publisher_motion_irc_destroy(&orte);
+         timer.stop();
+         disconnect(&timer, SIGNAL(timeout()), this, SLOT(updateIRC()));
+     }
+ private slots:
+     void updateIRC()
+     {
+         qint64 now = QDateTime::currentMSecsSinceEpoch();
+         orte.motion_irc.left += orte.motion_speed.left * (now - last_time);   // TODO: Find constant for speed to irc conversion
+         orte.motion_irc.right+= orte.motion_speed.right * (now - last_time);
+         ORTEPublicationSend(orte.publication_motion_irc);
+         last_time = now;
+     }
+ };
  class RobomonAtlantis : public QWidget
  {
        Q_OBJECT
@@@ -81,9 -113,11 +116,10 @@@ private slots
        void simulateObstaclesHokuyo();
        void changeObstacle(QPointF position);
        void sendStart(int plug);
 -      void setTeamColor(int plug);
+       void setMotorSimulation(int state);
  
        /************************************************************
 -       * ORTE 
 +       * ORTE
         ************************************************************/
        void motionStatusReceived();
        void actualPositionReceived();
@@@ -200,8 -229,10 +237,10 @@@ private
        QTimer *obstacleSimulationTimer;
        Point simulatedObstacle;
  
+       class MotorSimulation motorSimulation;
        /************************************************************
 -       * ORTE 
 +       * ORTE
         ************************************************************/
        void createOrte();