Commit 5eebb423 authored by Valentin Platzgummer's avatar Valentin Platzgummer

456

parent 018bb2c2
......@@ -482,7 +482,7 @@ HEADERS += \
src/comm/ros_bridge/include/Receiver.h \
src/comm/ros_bridge/include/RosBridgeClient.h \
src/comm/ros_bridge/include/ThreadSafeQueue.h \
src/comm/ros_bridge/include/Transmitter.h \
src/comm/ros_bridge/include/TopicPublisher.h \
src/comm/ros_bridge/include/TypeFactory.h \
src/comm/ros_bridge/src/PackageBuffer.h \
src/comm/utilities.h
......@@ -495,7 +495,7 @@ SOURCES += \
src/comm/ros_bridge/include/ComPrivateInclude.cpp \
src/comm/ros_bridge/include/MessageTag.cpp \
src/comm/ros_bridge/include/Receiver.cpp \
src/comm/ros_bridge/include/Transmitter.cpp \
src/comm/ros_bridge/include/TopicPublisher.cpp \
src/comm/ros_bridge/src/CasePacker.cpp \
src/Wima/WimaControllerDetail.cc \
src/Wima/snaketile.cpp \
......
......@@ -230,6 +230,7 @@
<file alias="QGroundControl/FlightMap/WimaMissionItemMapVisual.qml">src/PlanView/WimaMissionItemMapVisual.qml</file>
<file alias="QGroundControl/FlightDisplay/FlightDisplayWimaMenu.qml">src/FlightDisplay/FlightDisplayWimaMenu.qml</file>
<file alias="QGroundControl/Controls/CircularSurveyMapVisual.qml">src/WimaView/CircularSurveyMapVisual.qml</file>
<file alias="QGroundControl/FlightDisplay/SmallValue.qml">src/FlightDisplay/SmallValue.qml</file>
</qresource>
<qresource prefix="/json">
<file alias="APMMavlinkStreamRate.SettingsGroup.json">src/Settings/APMMavlinkStreamRate.SettingsGroup.json</file>
......
......@@ -12,11 +12,15 @@ import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Vehicle 1.0
import QGroundControl.FlightMap 1.0
import QGroundControl.FlightDisplay 1.0
import QGroundControl.Airspace 1.0
import QGroundControl.Airmap 1.0
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import Qt.labs.settings 1.0
Item {
id: _root
height: mainFrame.height
......@@ -35,10 +39,20 @@ Item {
property real _margins: ScreenTools.defaultFontPixelWidth / 2
// Disabels map scrolling when cursor on this menu.
DeadMouseArea {
anchors.fill: parent
}
// Use Settings to store menu appearance through different sessions.
Settings {
property alias snakeHeaderChecker: snakeHeader.checked
property alias missionHeaderChecker: missionHeader.checked
property alias navigateHeaderChecker: navigateHeader.checked
property alias vehicleHeaderChecker: vehicleHeader.checked
property alias statsHeaderChecker: statsHeader.checked
}
// Progress bar visibility
on_ControllerProgressPctChanged: {
if (_controllerProgressPct === 1) {
......@@ -404,88 +418,76 @@ Item {
text: qsTr("Statistics")
}
GridLayout {
columns: 2
columns: 3
rowSpacing: ScreenTools.defaultFontPixelHeight * 0.5
anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5
visible: statsHeader.checked
QGCLabel {
text: qsTr("Phase Length: ")
wrapMode: Text.WordWrap
Layout.fillWidth: true
Item {
id: widthItem
Layout.fillWidth: true
Layout.columnSpan: parent.columns
height: 0
}
QGCLabel {
SmallValue {
property var phaseDistance: wimaController.phaseDistance
text: phaseDistance >= 0 ? phaseDistance.toFixed(2) + " m": "-.-"
wrapMode: Text.WordWrap
Layout.fillWidth: true
shortDescription: qsTr("Phase Length")
value: phaseDistance >= 0 ? phaseDistance.toFixed(2): "-.-"
unit: "m"
//width: widthItem.width*0.49
}
QGCLabel {
text: qsTr("Phase Duration: ")
wrapMode: Text.WordWrap
Layout.fillWidth: true
}
QGCLabel {
SmallValue {
property var phaseDuration: wimaController.phaseDuration
text: phaseDuration >= 0 ? getTime(phaseDuration) : "-.-"
wrapMode: Text.WordWrap
Layout.fillWidth: true
shortDescription: qsTr("Phase Duration")
value: phaseDuration >= 0 ? getTime(phaseDuration) : "-.-"
//unit: "m"
//width: widthItem.width*0.49
}
QGCLabel {
text: qsTr("Current Waypoint: ")
wrapMode: Text.WordWrap
Layout.fillWidth: true
}
QGCLabel {
SmallValue {
property var currentMissionIndex: missionController.currentMissionIndex
text: currentMissionIndex > 0 ? currentMissionIndex : "-.-"
wrapMode: Text.WordWrap
Layout.fillWidth: true
shortDescription: qsTr("Current Waypoint")
value: currentMissionIndex > 0 ? currentMissionIndex : "-.-"
//unit: "m"
//width: widthItem.width*0.49
}
QGCLabel {
text: qsTr("Remaining Distance: ")
wrapMode: Text.WordWrap
Layout.fillWidth: true
}
QGCLabel {
SmallValue {
property var remainingDistance: missionController.remainingDistance
text: remainingDistance >= 0 ? remainingDistance.toFixed(2) + " m" : "-.-"
wrapMode: Text.WordWrap
Layout.fillWidth: true
shortDescription: qsTr("Remaining Distance")
value: remainingDistance >= 0 ? remainingDistance.toFixed(2) : "-.-"
unit: "m"
//width: widthItem.width*0.49
}
QGCLabel {
text: qsTr("Remaining Time: ")
wrapMode: Text.WordWrap
Layout.fillWidth: true
}
QGCLabel {
SmallValue {
property var remainingTime: missionController.remainingTime
text: remainingTime >= 0 ? getTime(remainingTime) : "-.-"
wrapMode: Text.WordWrap
Layout.fillWidth: true
shortDescription: qsTr("Remaining Time")
value: remainingTime >= 0 ? getTime(remainingTime) : "-.-"
//unit: "m"
//width: widthItem.width*0.49
}
QGCLabel { // space
text: ""
Layout.columnSpan: 2
Item { // spacer
height: 5
Layout.columnSpan: parent.columns
}
}
} // GridLayout
} // settingsColumn
Item { // spacer
width: 6
height: 5
}
}
} // Row
} // QGCFlickable
......
import QtQuick 2.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QtQuick.Layouts 1.2
GridLayout {
id: main
clip: true
columns: 1
property string shortDescription: "Description"
property string value: "-,-"
property string unit: ""
QGCLabel {
Layout.fillWidth: true
Layout.columnSpan: parent.columns
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
font.pointSize: ScreenTools.isTinyScreen ?
ScreenTools.smallFontPointSize * 0.75
: ScreenTools.smallFontPointSize
text: main.shortDescription
}
QGCLabel {
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
fontSizeMode: Text.HorizontalFit
text: main.value + " " + main.unit
}
// QGCLabel {
// Layout.fillWidth: true
// //width: parent.width
// horizontalAlignment: Text.AlignHCenter
// font.pointSize: ScreenTools.isTinyScreen ?
// ScreenTools.smallFontPointSize * 0.75
// : ScreenTools.smallFontPointSize
// fontSizeMode: Text.HorizontalFit
// text: main.unit
// }
} // Column
......@@ -1122,7 +1122,7 @@ void WimaController::_eventTimerHandler()
if (rosBridgeTicker.ready()) {
// using namespace ros_bridge;
_pRosBridge->send(_snakeTilesLocal, "/snake/snake_tiles");
_pRosBridge->publish(_snakeTilesLocal, "/snake/snake_tiles");
// // Time
// class Time time(1, 2);
// rapidjson::Document doc(rapidjson::kObjectType);
......@@ -1444,8 +1444,6 @@ void WimaController::_initSmartRTL()
case UserRequest:
emit returnUserRequestConfirmRequired();
break;
default:
qWarning("\nWimaController::_initSmartRTL: default case reached!");
}
return;
......
......@@ -56,6 +56,7 @@ private:
rapidjson::Document *_create(const U &msg, Type2Type<V>){
(void)msg;
assert(false); // Implementation missing for group U::Group!
return nullptr;
}
// ===========================================================================
......
......@@ -591,7 +591,7 @@ using namespace ROSBridge::JsonMethodes::GeometryMsgs;
typedef decltype (p.polygons()[0]) PolyStampedCVR;
typedef typename boost::remove_cv<typename boost::remove_reference<PolyStampedCVR>::type>::type
PolyStamped;
for (long i=0; i < polyStampedJson.Size(); ++i) {
for (unsigned int i=0; i < polyStampedJson.Size(); ++i) {
if ( !polyStampedJson[i].HasMember("header") ){
assert(false);
return false;
......@@ -632,7 +632,7 @@ namespace Progress {
bool toJson(const ProgressType &p, rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator)
{
rapidjson::Value progressJson(rapidjson::kArrayType);
for(unsigned long i=0; i < p.progress().size(); ++i){
for(unsigned long i=0; i < std::uint64_t(p.progress().size()); ++i){
progressJson.PushBack(rapidjson::Value().SetInt(std::int8_t(p.progress()[i])), allocator);
}
value.AddMember("progress", progressJson, allocator);
......@@ -652,6 +652,7 @@ namespace Progress {
p.progress().reserve(sz);
for (unsigned long i=0; i < sz; ++i)
p.progress().push_back(std::int8_t(jsonProgress[i].GetInt()));
return true;
}
} // namespace Progress
} // namespace NemoMsgs
......
......@@ -4,7 +4,7 @@
#include "ros_bridge/include/CasePacker.h"
#include "ros_bridge/include/TypeFactory.h"
#include "ros_bridge/include/JsonFactory.h"
#include "ros_bridge/include/Transmitter.h"
#include "ros_bridge/include/TopicPublisher.h"
#include "ros_bridge/include/Receiver.h"
#include <memory>
......@@ -23,8 +23,8 @@ public:
explicit ROSBridge();
template<class T>
void send(T &msg, const std::string &topic){
_transmitter.send(msg, topic);
void publish(T &msg, const std::string &topic){
_topicPublisher.publish(msg, topic);
}
void start();
......@@ -41,7 +41,7 @@ private:
JsonFactory _jsonFactory;
CasePacker _casePacker;
RosbridgeWsClient _rbc;
ComPrivate::Transmitter _transmitter;
ComPrivate::TopicPublisher _topicPublisher;
ComPrivate::Receiver _receiver;
};
......
#include "Transmitter.h"
#include "TopicPublisher.h"
void ROSBridge::ComPrivate::transmittLoop(const ROSBridge::CasePacker &casePacker,
......@@ -41,18 +41,21 @@ void ROSBridge::ComPrivate::transmittLoop(const ROSBridge::CasePacker &casePacke
}
}
ROSBridge::ComPrivate::Transmitter::Transmitter(CasePacker *casePacker,
RosbridgeWsClient *rbc,
JsonFactory *jsonFactory) :
ROSBridge::ComPrivate::TopicPublisher::TopicPublisher(CasePacker *casePacker,
RosbridgeWsClient *rbc) :
_stopFlag(true)
, _jsonFactory(jsonFactory)
, _casePacker(casePacker)
, _rbc(rbc)
{
}
void ROSBridge::ComPrivate::Transmitter::start()
ROSBridge::ComPrivate::TopicPublisher::~TopicPublisher()
{
this->stop();
}
void ROSBridge::ComPrivate::TopicPublisher::start()
{
if ( !_stopFlag.load() ) // start called while thread running.
return;
......@@ -65,7 +68,7 @@ void ROSBridge::ComPrivate::Transmitter::start()
std::cref(_stopFlag)));
}
void ROSBridge::ComPrivate::Transmitter::stop()
void ROSBridge::ComPrivate::TopicPublisher::stop()
{
if ( _stopFlag.load() ) // start called while thread not running.
return;
......
......@@ -13,24 +13,25 @@
namespace ROSBridge {
namespace ComPrivate {
class Transmitter
class TopicPublisher
{
typedef std::unique_ptr<std::thread> ThreadPtr;
public:
Transmitter() = delete;
Transmitter(CasePacker *casePacker,
RosbridgeWsClient *rbc,
JsonFactory *jsonFactory);
TopicPublisher() = delete;
TopicPublisher(CasePacker *casePacker,
RosbridgeWsClient *rbc);
~TopicPublisher();
void start();
void stop();
template<class T>
void send(const T &msg, const std::string &topic){
void publish(const T &msg, const std::string &topic){
JsonDocUPtr docPtr(_casePacker->pack(msg, topic));
send(std::move(docPtr));
publish(std::move(docPtr));
}
void send(JsonDocUPtr docPtr){
void publish(JsonDocUPtr docPtr){
std::lock_guard<std::mutex> lock(_queueMutex);
_queue.push_back(std::move(docPtr));
}
......@@ -41,7 +42,6 @@ private:
JsonQueue _queue;
std::mutex _queueMutex;
std::atomic<bool> _stopFlag;
JsonFactory *_jsonFactory;
CasePacker *_casePacker;
ThreadPtr _pThread;
RosbridgeWsClient *_rbc;
......
......@@ -51,6 +51,7 @@ private:
(void)type;
(void)doc;
assert(false); // Implementation missing for group U::Group!
return false;
}
// ===========================================================================
......
......@@ -3,7 +3,7 @@
ROSBridge::ROSBridge::ROSBridge() :
_casePacker(&_typeFactory, &_jsonFactory)
, _rbc("localhost:9090")
, _transmitter(&_casePacker, &_rbc, &_jsonFactory)
, _topicPublisher(&_casePacker, &_rbc)
, _receiver(&_casePacker, &_rbc, &_typeFactory)
{
......@@ -11,12 +11,12 @@ ROSBridge::ROSBridge::ROSBridge() :
void ROSBridge::ROSBridge::start()
{
_transmitter.start();
_topicPublisher.start();
}
void ROSBridge::ROSBridge::stop()
{
_transmitter.stop();
_topicPublisher.stop();
}
bool ROSBridge::ROSBridge::messagesAvailable()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment