From: Michal Sojka Date: Fri, 28 Mar 2014 00:19:06 +0000 (+0100) Subject: Merge branch 'maint-demo' into demo X-Git-Url: https://rtime.felk.cvut.cz/gitweb/eurobot/public.git/commitdiff_plain/2d72203abcec8112e4b61a3461133204230cbc07 Merge branch 'maint-demo' into demo Conflicts: src/robomon/RobomonAtlantis.cpp src/robomon/RobomonAtlantis.h --- 2d72203abcec8112e4b61a3461133204230cbc07 diff --cc src/robomon/RobomonAtlantis.cpp index 8c8ca289,6679b8ed..f6cb7e16 --- a/src/robomon/RobomonAtlantis.cpp +++ b/src/robomon/RobomonAtlantis.cpp @@@ -46,8 -45,8 +46,8 @@@ #include #include -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(); diff --cc src/robomon/RobomonAtlantis.h index cb95ac47,f7983628..947b9578 --- a/src/robomon/RobomonAtlantis.h +++ b/src/robomon/RobomonAtlantis.h @@@ -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();