Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
95f56761
Commit
95f56761
authored
Aug 21, 2020
by
Valentin Platzgummer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
json stuff improved
parent
571dc451
Changes
45
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
45 changed files
with
1581 additions
and
2111 deletions
+1581
-2111
qgroundcontrol.pro
qgroundcontrol.pro
+20
-19
GeoPoint3D.h
src/Wima/Geometry/GeoPoint3D.h
+2
-7
Polygon2D.h
src/Wima/Geometry/Polygon2D.h
+4
-4
PolygonArray.h
src/Wima/Geometry/PolygonArray.h
+1
-1
WimaPolygonArray.h
src/Wima/Geometry/WimaPolygonArray.h
+3
-14
QNemoHeartbeat.h
src/Wima/Snake/QNemoHeartbeat.h
+2
-2
QNemoProgress.h
src/Wima/Snake/QNemoProgress.h
+4
-6
QtROSJsonFactory.h
src/Wima/Snake/QtROSJsonFactory.h
+0
-5
QtROSTypeFactory.h
src/Wima/Snake/QtROSTypeFactory.h
+0
-5
SnakeTilesLocal.h
src/Wima/Snake/SnakeTilesLocal.h
+1
-2
WimaController.cc
src/Wima/WimaController.cc
+58
-36
WimaController.h
src/Wima/WimaController.h
+3
-4
CasePacker.h
src/comm/ros_bridge/include/CasePacker.h
+0
-54
ComPrivateInclude.cpp
src/comm/ros_bridge/include/ComPrivateInclude.cpp
+0
-13
GenericMessages.h
src/comm/ros_bridge/include/GenericMessages.h
+0
-371
JsonFactory.h
src/comm/ros_bridge/include/JsonFactory.h
+0
-238
JsonMethodes.h
src/comm/ros_bridge/include/JsonMethodes.h
+0
-695
MessageBaseClass.h
src/comm/ros_bridge/include/MessageBaseClass.h
+0
-30
MessageGroups.h
src/comm/ros_bridge/include/MessageGroups.h
+0
-158
MessageTag.cpp
src/comm/ros_bridge/include/MessageTag.cpp
+0
-43
MessageTag.h
src/comm/ros_bridge/include/MessageTag.h
+0
-24
ThreadSafeQueue.h
src/comm/ros_bridge/include/ThreadSafeQueue.h
+0
-79
TypeFactory.h
src/comm/ros_bridge/include/TypeFactory.h
+0
-137
com_private.cpp
src/comm/ros_bridge/include/com_private.cpp
+49
-0
com_private.h
src/comm/ros_bridge/include/com_private.h
+8
-2
message_traits.h
src/comm/ros_bridge/include/message_traits.h
+15
-1
geopoint.h
...mm/ros_bridge/include/messages/geographic_msgs/geopoint.h
+152
-0
point32.h
src/comm/ros_bridge/include/messages/geometry_msgs/point32.h
+142
-0
polygon.h
src/comm/ros_bridge/include/messages/geometry_msgs/polygon.h
+95
-0
polygon_stamped.h
...s_bridge/include/messages/geometry_msgs/polygon_stamped.h
+175
-0
polygon_array.h
...dge/include/messages/jsk_recognition_msgs/polygon_array.h
+332
-0
heartbeat.h
src/comm/ros_bridge/include/messages/nemo_msgs/heartbeat.h
+56
-0
progress.h
src/comm/ros_bridge/include/messages/nemo_msgs/progress.h
+70
-0
header.h
src/comm/ros_bridge/include/messages/std_msgs/header.h
+106
-0
time.h
src/comm/ros_bridge/include/messages/std_msgs/time.h
+68
-0
ros_bridge.h
src/comm/ros_bridge/include/ros_bridge.h
+13
-25
server.cpp
src/comm/ros_bridge/include/server.cpp
+6
-6
server.h
src/comm/ros_bridge/include/server.h
+3
-3
topic_publisher.cpp
src/comm/ros_bridge/include/topic_publisher.cpp
+105
-0
topic_publisher.h
src/comm/ros_bridge/include/topic_publisher.h
+4
-21
topic_subscriber.cpp
src/comm/ros_bridge/include/topic_subscriber.cpp
+8
-15
topic_subscriber.h
src/comm/ros_bridge/include/topic_subscriber.h
+5
-11
CasePacker.cpp
src/comm/ros_bridge/src/CasePacker.cpp
+0
-69
ros_bridge.cpp
src/comm/ros_bridge/src/ros_bridge.cpp
+71
-0
utilities.h
src/comm/utilities.h
+0
-11
No files found.
qgroundcontrol.pro
View file @
95f56761
...
...
@@ -437,8 +437,7 @@ HEADERS += \
src
/
Wima
/
Geometry
/
PolygonArray
.
h
\
src
/
Wima
/
Snake
/
QNemoHeartbeat
.
h
\
src
/
Wima
/
Snake
/
QNemoProgress
.
h
\
src
/
Wima
/
Snake
/
QtROSJsonFactory
.
h
\
src
/
Wima
/
Snake
/
QtROSTypeFactory
.
h
\
src
/
Wima
/
Snake
/
QNemoProgress
.
h
\
src
/
Wima
/
Snake
/
SnakeTiles
.
h
\
src
/
Wima
/
Snake
/
SnakeTilesLocal
.
h
\
src
/
Wima
/
Snake
/
SnakeWorker
.
h
\
...
...
@@ -483,17 +482,21 @@ HEADERS += \
src
/
Wima
/
Geometry
/
testplanimetrycalculus
.
h
\
src
/
Settings
/
WimaSettings
.
h
\
src
/
QmlControls
/
QmlObjectVectorModel
.
h
\
src
/
comm
/
ros_bridge
/
include
/
CasePacker
.
h
\
src
/
comm
/
ros_bridge
/
include
/
ComPrivateInclude
.
h
\
src
/
comm
/
ros_bridge
/
include
/
GenericMessages
.
h
\
src
/
comm
/
ros_bridge
/
include
/
JsonMethodes
.
h
\
src
/
comm
/
ros_bridge
/
include
/
MessageTag
.
h
\
src
/
comm
/
ros_bridge
/
include
/
MessageTraits
.
h
\
src
/
comm
/
ros_bridge
/
include
/
RosBridgeClient
.
h
\
src
/
comm
/
ros_bridge
/
include
/
Server
.
h
\
src
/
comm
/
ros_bridge
/
include
/
TopicPublisher
.
h
\
src
/
comm
/
ros_bridge
/
include
/
TopicSubscriber
.
h
\
src
/
comm
/
ros_bridge
/
include
/
TypeFactory
.
h
\
src
/
comm
/
ros_bridge
/
include
/
com_private
.
h
\
src
/
comm
/
ros_bridge
/
include
/
message_traits
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
geographic_msgs
/
geopoint
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
geometry_msgs
/
point32
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
geometry_msgs
/
polygon
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
geometry_msgs
/
polygon_stamped
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
jsk_recognition_msgs
/
polygon_array
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
nemo_msgs
/
heartbeat
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
nemo_msgs
/
progress
.
h
\
src
/
comm
/
ros_bridge
/
include
/
messages
/
std_msgs
/
header
.
h
\
src
/
comm
/
ros_bridge
/
include
/
server
.
h
\
src
/
comm
/
ros_bridge
/
include
/
time
.
h
\
src
/
comm
/
ros_bridge
/
include
/
topic_publisher
.
h
\
src
/
comm
/
ros_bridge
/
include
/
topic_subscriber
.
h
\
src
/
comm
/
utilities
.
h
SOURCES
+=
\
src
/
Snake
/
clipper
/
clipper
.
cpp
\
...
...
@@ -511,13 +514,11 @@ SOURCES += \
src
/
Wima
/
WaypointManager
/
Slicer
.
cpp
\
src
/
Wima
/
WaypointManager
/
Utils
.
cpp
\
src
/
Wima
/
WimaBridge
.
cc
\
src
/
comm
/
ros_bridge
/
include
/
ComPrivateInclude
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
MessageTag
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
RosBridgeClient
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
Server
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
TopicPublish
er
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
TopicSubscrib
er
.
cpp
\
src
/
comm
/
ros_bridge
/
src
/
CasePack
er
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
com_private
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
serv
er
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
topic_publish
er
.
cpp
\
src
/
comm
/
ros_bridge
/
include
/
topic_subscrib
er
.
cpp
\
src
/
Wima
/
Snake
/
snaketile
.
cpp
\
src
/
api
/
QGCCorePlugin
.
cc
\
src
/
api
/
QGCOptions
.
cc
\
...
...
@@ -549,7 +550,7 @@ SOURCES += \
src
/
Wima
/
Geometry
/
testplanimetrycalculus
.
cpp
\
src
/
Settings
/
WimaSettings
.
cc
\
src
/
QmlControls
/
QmlObjectVectorModel
.
cc
\
src
/
comm
/
ros_bridge
/
src
/
ROSB
ridge
.
cpp
src
/
comm
/
ros_bridge
/
src
/
ros_b
ridge
.
cpp
#
#
Unit
Test
specific
configuration
goes
here
(
requires
full
debug
build
with
all
plugins
)
...
...
src/Wima/Geometry/GeoPoint3D.h
View file @
95f56761
#pragma once
#include "ros_bridge/include/JsonMethodes.h"
#include "ros_bridge/include/MessageBaseClass.h"
#include "ros_bridge/include/GenericMessages.h"
#include <QGeoCoordinate>
#include <QObject>
typedef
ROSBridge
::
MessageBaseClass
ROSMsg
;
typedef
ROSBridge
::
GenericMessages
::
GeographicMsgs
::
GeoPoint
ROSGeoPoint
;
namespace
MsgGroups
=
ROSBridge
::
MessageGroups
;
typedef
ros_bridge
::
GenericMessages
::
GeographicMsgs
::
GeoPoint
ROSGeoPoint
;
namespace
MsgGroups
=
ros_bridge
::
MessageGroups
;
class
GeoPoint3D
:
public
QObject
,
public
ROSGeoPoint
{
Q_OBJECT
...
...
src/Wima/Geometry/Polygon2D.h
View file @
95f56761
...
...
@@ -8,14 +8,14 @@
#include "ros_bridge/include/MessageBaseClass.h"
#include "ros_bridge/include/JsonMethodes.h"
namespace
MsgGroupsNS
=
ROSB
ridge
::
MessageGroups
;
namespace
PolyStampedNS
=
ROSB
ridge
::
JsonMethodes
::
GeometryMsgs
::
PolygonStamped
;
namespace
MsgGroupsNS
=
ros_b
ridge
::
MessageGroups
;
namespace
PolyStampedNS
=
ros_b
ridge
::
JsonMethodes
::
GeometryMsgs
::
PolygonStamped
;
typedef
ROSB
ridge
::
MessageBaseClass
ROSMsg
;
typedef
ros_b
ridge
::
MessageBaseClass
ROSMsg
;
template
<
class
PointType
=
QPointF
,
template
<
class
,
class
...
>
class
ContainerType
=
QVector
>
class
Polygon2DTemplate
:
public
ROSMsg
{
//
typedef
ROSB
ridge
::
GenericMessages
::
GeometryMsgs
::
GenericPolygon
<
PointType
,
ContainerType
>
Poly
;
typedef
ros_b
ridge
::
GenericMessages
::
GeometryMsgs
::
GenericPolygon
<
PointType
,
ContainerType
>
Poly
;
public:
typedef
MsgGroupsNS
::
PolygonStampedGroup
Group
;
// has no header
...
...
src/Wima/Geometry/PolygonArray.h
View file @
95f56761
...
...
@@ -4,7 +4,7 @@
#include "ros_bridge/include/MessageBaseClass.h"
typedef
ROSB
ridge
::
MessageBaseClass
ROSMsgBase
;
typedef
ros_b
ridge
::
MessageBaseClass
ROSMsgBase
;
template
<
class
PolygonType
,
template
<
class
,
class
...
>
class
ContainerType
>
class
PolygonArray
:
public
ROSMsgBase
,
public
ContainerType
<
PolygonType
>
{
public:
...
...
src/Wima/Geometry/WimaPolygonArray.h
View file @
95f56761
#pragma once
#include "ros_bridge/include/MessageBaseClass.h"
#include "ros_bridge/include/MessageGroups.h"
#include "QmlObjectListModel.h"
#include <QVector>
#include <QString>
typedef
ROSBridge
::
MessageBaseClass
ROSMsg
;
namespace
MsgGroups
=
ROSBridge
::
MessageGroups
;
typedef
MsgGroups
::
EmptyGroup
EmptyGroup
;
template
<
class
PolygonType
,
template
<
class
,
class
...
>
class
ContainerType
=
QVector
,
typename
GroupType
=
EmptyGroup
>
class
WimaPolygonArray
:
public
ROSMsg
template
<
class
PolygonType
,
template
<
class
,
class
...
>
class
ContainerType
=
QVector
>
class
WimaPolygonArray
{
public:
typedef
GroupType
Group
;
WimaPolygonArray
()
{}
WimaPolygonArray
(
const
WimaPolygonArray
&
other
)
:
ROSMsg
()
,
_polygons
(
other
.
_polygons
),
_dirty
(
true
)
_polygons
(
other
.
_polygons
),
_dirty
(
true
)
{}
virtual
WimaPolygonArray
*
Clone
()
const
override
{
return
new
WimaPolygonArray
(
*
this
);
}
class
QmlObjectListModel
*
QmlObjectListModel
(){
if
(
_dirty
)
_updateObjects
();
...
...
src/Wima/Snake/QNemoHeartbeat.h
View file @
95f56761
#pragma once
#include "ros_bridge/include/
GenericMessages
.h"
#include "ros_bridge/include/
messages/nemo_msgs/heartbeat
.h"
using
QNemoHeartbeat
=
ROSBridge
::
GenericMessages
::
NemoMsgs
::
Heartbeat
;
using
QNemoHeartbeat
=
ros_bridge
::
messages
::
nemo_msgs
::
heartbeat
::
Heartbeat
;
src/Wima/Snake/QNemoProgress.h
View file @
95f56761
#pragma once
#include <QVector>
#include <QObject>
#include "ros_bridge/include/GenericMessages.h"
namespace
NemoMsgs
=
ROSBridge
::
GenericMessages
::
NemoMsgs
;
typedef
NemoMsgs
::
GenericProgress
<
int
,
QVector
>
QNemoProgress
;
#include <QVector>
#include "ros_bridge/include/messages/nemo_msgs/progress.h"
namespace
nemo_msgs
=
ros_bridge
::
messages
::
nemo_msgs
;
typedef
nemo_msgs
::
progress
::
GenericProgress
<
int
,
QVector
>
QNemoProgress
;
src/Wima/Snake/QtROSJsonFactory.h
deleted
100644 → 0
View file @
571dc451
#pragma once
#include "ros_bridge/include/JsonFactory.h"
#include <QString>
typedef
ROSBridge
::
GenericJsonFactory
<>
QtROSJsonFactory
;
src/Wima/Snake/QtROSTypeFactory.h
deleted
100644 → 0
View file @
571dc451
#pragma once
#include "ros_bridge/include/TypeFactory.h"
#include <QString>
typedef
ROSBridge
::
TypeFactory
QtROSTypeFactory
;
src/Wima/Snake/SnakeTilesLocal.h
View file @
95f56761
...
...
@@ -4,5 +4,4 @@
#include "Wima/Geometry/Polygon2D.h"
#include "Wima/Geometry/WimaPolygonArray.h"
namespace
MsgGroups
=
ROSBridge
::
MessageGroups
;
typedef
WimaPolygonArray
<
Polygon2D
,
QVector
,
MsgGroups
::
PolygonArrayGroup
>
SnakeTilesLocal
;
typedef
WimaPolygonArray
<
Polygon2D
,
QVector
>
SnakeTilesLocal
;
src/Wima/WimaController.cc
View file @
95f56761
#include "WimaController.h"
#include "utilities.h"
#include "ros_bridge/include/JsonMethodes.h"
#include "ros_bridge/rapidjson/include/rapidjson/document.h"
#include "ros_bridge/rapidjson/include/rapidjson/writer.h"
#include "ros_bridge/rapidjson/include/rapidjson/ostreamwrapper.h"
#include "ros_bridge/include/CasePacker.h"
#include "ros_bridge/include/messages/geographic_msgs/geopoint.h"
#include "ros_bridge/include/messages/jsk_recognition_msgs/polygon_array.h"
#include "ros_bridge/include/messages/nemo_msgs/progress.h"
#include "ros_bridge/include/messages/nemo_msgs/heartbeat.h"
#include "Snake/QtROSJsonFactory.h"
#include "Snake/QtROSTypeFactory.h"
...
...
@@ -94,11 +98,11 @@ WimaController::WimaController(QObject *parent)
auto
connectionStringFact
=
wimaSettings
->
rosbridgeConnectionString
();
auto
setConnectionString
=
[
connectionStringFact
,
this
]{
auto
connectionString
=
connectionStringFact
->
rawValue
().
toString
();
if
(
ROSB
ridge
::
isValidConnectionString
(
connectionString
.
toLocal8Bit
().
data
())
){
this
->
_pRosBridge
.
reset
(
new
ROSB
ridge
::
ROSBridge
(
connectionString
.
toLocal8Bit
().
data
()));
if
(
ros_b
ridge
::
isValidConnectionString
(
connectionString
.
toLocal8Bit
().
data
())
){
this
->
_pRosBridge
.
reset
(
new
ros_b
ridge
::
ROSBridge
(
connectionString
.
toLocal8Bit
().
data
()));
}
else
{
qgcApp
()
->
showMessage
(
"ROS Bridge connection string invalid: "
+
connectionString
);
this
->
_pRosBridge
.
reset
(
new
ROSB
ridge
::
ROSBridge
(
"localhost:9090"
));
this
->
_pRosBridge
.
reset
(
new
ros_b
ridge
::
ROSBridge
(
"localhost:9090"
));
}
};
setConnectionString
();
...
...
@@ -939,22 +943,40 @@ void WimaController::_switchSnakeManager(QVariant variant)
void
WimaController
::
_setupTopicService
()
{
using
namespace
ros_bridge
::
messages
;
if
(
_snakeTilesLocal
.
polygons
().
size
()
>
0
){
_pRosBridge
->
publish
(
_snakeOrigin
,
"/snake/origin"
);
_pRosBridge
->
publish
(
_snakeTilesLocal
,
"/snake/tiles"
);
// Publish snake origin.
JsonDocUPtr
jOrigin
(
rapidjson
::
kObjectType
);
Q_ASSERT
(
geographic_msgs
::
geo_point
::
toJson
(
_snakeOrigin
,
*
jOrigin
,
jOrigin
->
GetAllocator
()));
_pRosBridge
->
publish
(
std
::
move
(
jOrigin
),
"/snake/origin"
);
// Publish snake tiles.
JsonDocUPtr
jSnakeTiles
(
rapidjson
::
kObjectType
);
Q_ASSERT
(
jsk_recognition_msgs
::
polygon_array
::
toJson
(
_snakeTilesLocal
,
*
jSnakeTiles
,
jSnakeTiles
->
GetAllocator
()));
_pRosBridge
->
publish
(
std
::
move
(
jSnakeTiles
),
"/snake/tiles"
);
}
// Subscribe nemo progress.
_pRosBridge
->
subscribe
(
"/nemo/progress"
,
/* callback */
[
this
](
JsonDocUPtr
pDoc
){
int
requiredSize
=
this
->
_snakeTilesLocal
.
polygons
().
size
();
auto
&
progress
=
this
->
_nemoProgress
;
if
(
!
this
->
_pRosBridge
->
casePacker
()
->
unpack
(
pDoc
,
progress
)
||
progress
.
progress
().
size
()
!=
requiredSize
)
{
// Some error occured.
auto
&
progress
_msg
=
this
->
_nemoProgress
;
if
(
!
nemo_msgs
::
progress
::
fromJson
(
*
pDoc
,
progress_msg
)
||
progress
_msg
.
progress
().
size
()
!=
requiredSize
)
{
// Some error occured.
// Set progress to default.
progress
.
progress
().
fill
(
0
,
requiredSize
);
// Publish origin and tiles again.
progress
_msg
.
progress
().
fill
(
0
,
requiredSize
);
// Publish origin and tiles again
, if valid
.
if
(
this
->
_snakeTilesLocal
.
polygons
().
size
()
>
0
){
this
->
_pRosBridge
->
publish
(
this
->
_snakeOrigin
,
"/snake/origin"
);
this
->
_pRosBridge
->
publish
(
this
->
_snakeTilesLocal
,
"/snake/tiles"
);
// Publish snake origin.
JsonDocUPtr
jOrigin
(
rapidjson
::
kObjectType
);
Q_ASSERT
(
geographic_msgs
::
geo_point
::
toJson
(
this
->
_snakeOrigin
,
*
jOrigin
,
jOrigin
->
GetAllocator
()));
this
->
_pRosBridge
->
publish
(
std
::
move
(
jOrigin
),
"/snake/origin"
);
// Publish snake tiles.
JsonDocUPtr
jSnakeTiles
(
rapidjson
::
kObjectType
);
Q_ASSERT
(
jsk_recognition_msgs
::
polygon_array
::
toJson
(
this
->
_snakeTilesLocal
,
*
jSnakeTiles
,
jSnakeTiles
->
GetAllocator
()));
this
->
_pRosBridge
->
publish
(
std
::
move
(
jSnakeTiles
),
"/snake/tiles"
);
}
}
...
...
@@ -962,10 +984,11 @@ void WimaController::_setupTopicService()
});
_pRosBridge
->
subscribe
(
"/nemo/heartbeat"
,
/* callback */
[
this
](
JsonDocUPtr
pDoc
){
if
(
!
this
->
_pRosBridge
->
casePacker
()
->
unpack
(
pDoc
,
this
->
_nemoHeartbeat
)
)
{
if
(
this
->
_nemoHeartbeat
.
status
()
==
this
->
_fallbackStatus
)
auto
&
heartbeat_msg
=
this
->
_nemoHeartbeat
;
if
(
!
nemo_msgs
::
heartbeat
(
*
pDoc
,
heartbeat_msg
)
)
{
if
(
heartbeat_msg
.
status
()
==
this
->
_fallbackStatus
)
return
;
this
->
_nemoHeartbeat
.
setStatus
(
this
->
_fallbackStatus
);
heartbeat_msg
.
setStatus
(
this
->
_fallbackStatus
);
}
this
->
_nemoTimeoutTicker
.
reset
();
...
...
@@ -975,30 +998,29 @@ void WimaController::_setupTopicService()
});
_pRosBridge
->
advertiseService
(
"/snake/get_origin"
,
"snake_msgs/GetOrigin"
,
[
this
](
JsonDocUPtr
)
->
JsonDocUPtr
{
JsonDocUPtr
pDoc
;
[
this
](
JsonDocUPtr
)
->
JsonDocUPtr
{
JsonDocUPtr
pDoc
(
std
::
make_unique
(
rapidjson
::
kObjectType
));
rapidjson
::
Value
jOrigin
(
rapidjson
::
kObjectType
);
if
(
this
->
_snakeTilesLocal
.
polygons
().
size
()
>
0
){
pDoc
=
this
->
_pRosBridge
->
casePacker
()
->
pack
(
this
->
_snakeOrigin
,
""
);
geometry_msg
::
geo_point
::
toJson
(
this
->
_snakeOrigin
,
jOrigin
,
pDoc
->
GetAllocator
());
}
else
{
pDoc
=
this
->
_pRosBridge
->
casePacker
()
->
pack
(
::
GeoPoint3D
(
0
,
0
,
0
),
""
);
geometry_msg
::
geo_point
::
polygon_array
::
toJson
(
::
GeoPoint3D
(
0
,
0
,
0
),
jOrigin
,
pDoc
->
GetAllocator
());
}
this
->
_pRosBridge
->
casePacker
()
->
removeTag
(
pDoc
);
rapidjson
::
Document
value
(
rapidjson
::
kObjectType
);
JsonDocUPtr
pReturn
(
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
));
value
.
CopyFrom
(
*
pDoc
,
pReturn
->
GetAllocator
());
pReturn
->
AddMember
(
"origin"
,
value
,
pReturn
->
GetAllocator
());
return
pReturn
;
pDoc
->
AddMember
(
"origin"
,
jOrigin
,
pDoc
->
GetAllocator
());
return
pDoc
;
});
_pRosBridge
->
advertiseService
(
"/snake/get_tiles"
,
"snake_msgs/GetTiles"
,
[
this
](
JsonDocUPtr
)
->
JsonDocUPtr
{
JsonDocUPtr
pDoc
=
this
->
_pRosBridge
->
casePacker
()
->
pack
(
this
->
_snakeTilesLocal
,
""
);
this
->
_pRosBridge
->
casePacker
()
->
removeTag
(
pDoc
);
rapidjson
::
Document
value
(
rapidjson
::
kObjectType
);
JsonDocUPtr
pReturn
(
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
));
value
.
CopyFrom
(
*
pDoc
,
pReturn
->
GetAllocator
());
p
Return
->
AddMember
(
"tiles"
,
value
,
pReturn
->
GetAllocator
());
return
p
Return
;
[
this
](
JsonDocUPtr
)
->
JsonDocUPtr
{
JsonDocUPtr
pDoc
(
std
::
make_unique
(
rapidjson
::
kObjectType
)
);
rapidjson
::
Value
jSnakeTiles
(
rapidjson
::
kObjectType
);
jsk_recognition_msgs
::
polygon_array
::
toJson
(
this
->
_snakeTilesLocal
,
jSnakeTiles
,
pDoc
->
GetAllocator
());
p
Doc
->
AddMember
(
"tiles"
,
jSnakeTiles
,
pDoc
->
GetAllocator
());
return
p
Doc
;
});
}
src/Wima/WimaController.h
View file @
95f56761
...
...
@@ -35,8 +35,7 @@
#include "Snake/QNemoProgress.h"
#include "Snake/QNemoHeartbeat.h"
#include "ros_bridge/include/ROSBridge.h"
#include "ros_bridge/include/CasePacker.h"
#include "ros_bridge/include/ros_bridge.h"
#include "WaypointManager/DefaultManager.h"
#include "WaypointManager/RTLManager.h"
...
...
@@ -54,7 +53,7 @@ class WimaController : public QObject
enum
FileType
{
WimaFile
,
PlanFile
};
typedef
QScopedPointer
<
ROSB
ridge
::
ROSBridge
>
ROSBridgePtr
;
typedef
QScopedPointer
<
ros_b
ridge
::
ROSBridge
>
ROSBridgePtr
;
public:
...
...
@@ -344,7 +343,7 @@ private slots:
private:
using
StatusMap
=
std
::
map
<
int
,
QString
>
;
using
CasePacker
=
ROSB
ridge
::
CasePacker
;
using
CasePacker
=
ros_b
ridge
::
CasePacker
;
// Controllers.
PlanMasterController
*
_masterController
;
...
...
src/comm/ros_bridge/include/CasePacker.h
deleted
100644 → 0
View file @
571dc451
#pragma once
#include "ros_bridge/include/MessageBaseClass.h"
#include "ros_bridge/include/MessageTag.h"
#include "ros_bridge/include/TypeFactory.h"
#include "ros_bridge/include/JsonFactory.h"
#include <memory>
#include "rapidjson/include/rapidjson/document.h"
namespace
ROSBridge
{
class
CasePacker
{
typedef
MessageTag
Tag
;
typedef
rapidjson
::
Document
JsonDoc
;
typedef
std
::
unique_ptr
<
JsonDoc
>
JsonDocUPtr
;
public:
CasePacker
()
=
delete
;
CasePacker
(
TypeFactory
*
typeFactory
,
JsonFactory
*
jsonFactory
);
template
<
class
T
>
JsonDocUPtr
pack
(
const
T
&
msg
,
const
std
::
string
&
topic
)
const
{
JsonDocUPtr
docPt
(
_jsonFactory
->
create
(
msg
));
std
::
string
messageType
=
T
::
Group
::
messageType
();
addTag
(
docPt
,
topic
,
messageType
.
c_str
());
return
docPt
;
}
template
<
class
T
>
bool
unpack
(
JsonDocUPtr
&
pDoc
,
T
&
msg
)
const
{
removeTag
(
pDoc
);
return
_typeFactory
->
create
(
*
pDoc
.
get
(),
msg
);
}
bool
getTag
(
const
JsonDocUPtr
&
pDoc
,
Tag
&
tag
)
const
;
void
addTag
(
JsonDocUPtr
&
doc
,
const
std
::
string
&
topic
,
const
std
::
string
&
messageType
)
const
;
void
addTag
(
JsonDocUPtr
&
doc
,
const
Tag
&
tag
)
const
;
void
removeTag
(
JsonDocUPtr
&
pDoc
)
const
;
bool
getTopic
(
const
JsonDocUPtr
&
pDoc
,
std
::
string
&
topic
)
const
;
bool
getMessageType
(
const
JsonDocUPtr
&
pDoc
,
std
::
string
&
messageType
)
const
;
static
const
char
*
topicKey
;
static
const
char
*
messageTypeKey
;
private:
TypeFactory
*
_typeFactory
;
JsonFactory
*
_jsonFactory
;
};
}
src/comm/ros_bridge/include/ComPrivateInclude.cpp
deleted
100644 → 0
View file @
571dc451
#include "ros_bridge/include/ComPrivateInclude.h"
#include <functional>
std
::
size_t
ROSBridge
::
ComPrivate
::
getHash
(
const
std
::
string
&
str
)
{
std
::
hash
<
std
::
string
>
hash
;
return
hash
(
str
);
}
std
::
size_t
ROSBridge
::
ComPrivate
::
getHash
(
const
char
*
str
)
{
return
ROSBridge
::
ComPrivate
::
getHash
(
std
::
string
(
str
));
}
src/comm/ros_bridge/include/GenericMessages.h
deleted
100644 → 0
View file @
571dc451
This diff is collapsed.
Click to expand it.
src/comm/ros_bridge/include/JsonFactory.h
deleted
100644 → 0
View file @
571dc451
#pragma once
#include "ros_bridge/rapidjson/include/rapidjson/document.h"
#include "ros_bridge/include/JsonMethodes.h"
#include "MessageBaseClass.h"
#include "utilities.h"
#include "ros_bridge/include/MessageTraits.h"
#include "ros_bridge/include/MessageGroups.h"
#include "ros_bridge/include/GenericMessages.h"
#include "boost/type_traits.hpp"
#include "boost/type_traits/is_base_of.hpp"
namespace
ROSBridge
{
class
StdHeaderPolicy
;
//!
//! \brief The JsonFactory class is used to create ROS messages.
//!
//! The JsonFactory class is used to create \class rapidjson::Document documents containing ROS messages
//! from classes derived from \class MessageBaseClass. Each class has a group mark (typedef ... Group) which allows the
//! JsonFactory to determine the ROS message type it will create.
template
<
class
HeaderPolicy
=
StdHeaderPolicy
>
class
GenericJsonFactory
:
public
HeaderPolicy
{
typedef
MessageBaseClass
ROSMsg
;
public:
GenericJsonFactory
()
:
HeaderPolicy
()
{}
//!
//! \brief Creates a \class rapidjson::Document document containing a ROS mesage from \p msg.
//!
//! Creates a \class rapidjson::Document document containing a ROS message from \p msg.
//! A compile-time error will occur, if \p msg belongs to the \struct EmptyGroup or is
//! not derived from \class MessageBaseClass.
//! \param msg Instance of a \class MessageBaseClass subclass belonging to a ROSMessageGroup.
//! \return rapidjson::Document document containing a ROS message.
template
<
class
T
>
rapidjson
::
Document
*
create
(
const
T
&
msg
){
static_assert
(
boost
::
is_base_of
<
ROSMsg
,
T
>::
value
,
"Type of msg must be derived from MessageBaseClass."
);
static_assert
(
!::
boost
::
is_same
<
typename
T
::
Group
,
MessageGroups
::
EmptyGroup
>::
value
,
"msg belongs to group EmptyGroup (not allowed). Please specify Group (typedef MessageGroup Group)"
);
//cout << T::Group::label() << endl;
return
_create
(
msg
,
Type2Type
<
typename
T
::
Group
>
());
}
private:
// ===========================================================================
// EmptyGroup and not implemented Groups
// ===========================================================================
template
<
class
U
,
class
V
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
V
>
){
(
void
)
msg
;
assert
(
false
);
// Implementation missing for group U::Group!
return
nullptr
;
}
// ===========================================================================
// Point32Group
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
Point32Group
>
){
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
GeometryMsgs
::
Point32
::
toJson
<
_Float32
>
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// GeoPointGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
GeoPointGroup
>
){
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
GeographicMsgs
::
GeoPoint
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// PolygonGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
PolygonGroup
>
){
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
GeometryMsgs
::
Polygon
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// PolygonStampedGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
PolygonStampedGroup
>
){
using
namespace
ROSBridge
;
using
namespace
ROSBridge
::
traits
;
typedef
HasMemberHeader
<
U
>
HasHeader
;
return
_createPolygonStamped
(
msg
,
Int2Type
<
HasHeader
::
value
>
());
}
template
<
class
U
,
int
k
>
rapidjson
::
Document
*
_createPolygonStamped
(
const
U
&
msg
,
Int2Type
<
k
>
){
// U has member header(), use integraded header.
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
GeometryMsgs
::
PolygonStamped
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
template
<
class
U
>
rapidjson
::
Document
*
_createPolygonStamped
(
const
U
&
msg
,
Int2Type
<
0
>
){
// U has no member header(), generate one on the fly.
using
namespace
ROSBridge
;
GenericMessages
::
StdMsgs
::
Header
header
(
HeaderPolicy
::
header
(
msg
));
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
GeometryMsgs
::
PolygonStamped
::
toJson
(
msg
.
polygon
(),
header
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// PolygonArrayGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
PolygonArrayGroup
>
){
using
namespace
ROSBridge
;
using
namespace
ROSBridge
::
traits
;
typedef
HasMemberHeader
<
U
>
HasHeader
;
return
_createPolygonArray
(
msg
,
Int2Type
<
HasHeader
::
value
>
());
}
template
<
class
U
,
int
k
>
rapidjson
::
Document
*
_createPolygonArray
(
const
U
&
msg
,
Int2Type
<
k
>
){
// U has member header(), use integraded header.
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
JSKRecognitionMsgs
::
PolygonArray
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
template
<
class
U
>
rapidjson
::
Document
*
_createPolygonArray
(
const
U
&
msg
,
Int2Type
<
0
>
){
// U has no member header(), generate one on the fly.
using
namespace
ROSBridge
;
GenericMessages
::
StdMsgs
::
Header
header
(
HeaderPolicy
::
header
(
msg
));
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
JSKRecognitionMsgs
::
PolygonArray
::
toJson
(
msg
,
header
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// ProgressGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
ProgressGroup
>
){
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
NemoMsgs
::
Progress
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
// ===========================================================================
// HeartbeatGroup
// ===========================================================================
template
<
class
U
>
rapidjson
::
Document
*
_create
(
const
U
&
msg
,
Type2Type
<
MessageGroups
::
HeartbeatGroup
>
){
using
namespace
ROSBridge
;
rapidjson
::
Document
*
doc
=
new
rapidjson
::
Document
(
rapidjson
::
kObjectType
);
bool
ret
=
JsonMethodes
::
NemoMsgs
::
Heartbeat
::
toJson
(
msg
,
*
doc
,
doc
->
GetAllocator
());
assert
(
ret
);
(
void
)
ret
;
return
doc
;
}
};
class
StdHeaderPolicy
{
typedef
ROSBridge
::
GenericMessages
::
StdMsgs
::
Header
Header
;
typedef
ROSBridge
::
GenericMessages
::
StdMsgs
::
Time
Time
;
public:
StdHeaderPolicy
()
:
_seq
(
-
1
){}
//!
//! \brief header Returns the header belonging to msg.
//! \return Returns the header belonging to msg.
template
<
class
T
>
Header
header
(
const
T
&
msg
)
{
return
Header
(
std
::
uint32_t
(
++
_seq
),
time
(
msg
),
"/map"
);
}
//!
//! \brief time Returns the current time.
//! \return Returns the current time.
template
<
class
T
>
Time
time
(
const
T
&
msg
)
{
(
void
)
msg
;
return
Time
(
0
,
0
);
}
private:
long
_seq
;
};
typedef
GenericJsonFactory
<>
JsonFactory
;
}
// end namespace ros_bridge
src/comm/ros_bridge/include/JsonMethodes.h
deleted
100644 → 0
View file @
571dc451
This diff is collapsed.
Click to expand it.
src/comm/ros_bridge/include/MessageBaseClass.h
deleted
100644 → 0
View file @
571dc451
#pragma once
#include "MessageGroups.h"
namespace
ROSBridge
{