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
56249630
Commit
56249630
authored
Jan 29, 2012
by
Lionel Heng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
QGC now visualizes planned paths in local 3D view.
parent
6f3f2bd0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
79 additions
and
25 deletions
+79
-25
UAS.cc
src/uas/UAS.cc
+5
-0
UAS.h
src/uas/UAS.h
+7
-0
UASInterface.h
src/uas/UASInterface.h
+1
-0
Pixhawk3DWidget.cc
src/ui/map3D/Pixhawk3DWidget.cc
+62
-21
Pixhawk3DWidget.h
src/ui/map3D/Pixhawk3DWidget.h
+4
-4
No files found.
src/uas/UAS.cc
View file @
56249630
...
...
@@ -998,6 +998,11 @@ void UAS::receiveExtendedMessage(LinkInterface* link, std::tr1::shared_ptr<googl
obstacleList
.
CopyFrom
(
*
message
);
emit
obstacleListChanged
(
this
);
}
else
if
(
message
->
GetTypeName
()
==
path
.
GetTypeName
())
{
path
.
CopyFrom
(
*
message
);
emit
pathChanged
(
this
);
}
}
#endif
...
...
src/uas/UAS.h
View file @
56249630
...
...
@@ -146,6 +146,10 @@ public:
px
::
ObstacleList
getObstacleList
()
const
{
return
obstacleList
;
}
px
::
Path
getPath
()
const
{
return
path
;
}
#endif
friend
class
UASWaypointManager
;
...
...
@@ -235,6 +239,7 @@ protected: //COMMENTS FOR TEST UNIT
px
::
PointCloudXYZRGB
pointCloud
;
px
::
RGBDImage
rgbdImage
;
px
::
ObstacleList
obstacleList
;
px
::
Path
path
;
#endif
QMap
<
int
,
QMap
<
QString
,
QVariant
>*
>
parameters
;
///< All parameters
...
...
@@ -573,6 +578,8 @@ signals:
void
rgbdImageChanged
(
UASInterface
*
uas
);
/** @brief Obstacle list data has been changed */
void
obstacleListChanged
(
UASInterface
*
uas
);
/** @brief Path data has been changed */
void
pathChanged
(
UASInterface
*
uas
);
#endif
/** @brief HIL controls have changed */
void
hilControlsChanged
(
uint64_t
time
,
float
rollAilerons
,
float
pitchElevator
,
float
yawRudder
,
float
throttle
,
uint8_t
systemMode
,
uint8_t
navMode
);
...
...
src/uas/UASInterface.h
View file @
56249630
...
...
@@ -98,6 +98,7 @@ public:
virtual
px
::
PointCloudXYZRGB
getPointCloud
()
const
=
0
;
virtual
px
::
RGBDImage
getRGBDImage
()
const
=
0
;
virtual
px
::
ObstacleList
getObstacleList
()
const
=
0
;
virtual
px
::
Path
getPath
()
const
=
0
;
#endif
virtual
bool
isArmed
()
const
=
0
;
...
...
src/ui/map3D/Pixhawk3DWidget.cc
View file @
56249630
...
...
@@ -61,6 +61,7 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
,
displayRGBD2D
(
false
)
,
displayRGBD3D
(
true
)
,
displayObstacleList
(
true
)
,
displayPath
(
true
)
,
enableRGBDColor
(
false
)
,
enableTarget
(
false
)
,
followCamera
(
true
)
...
...
@@ -81,7 +82,7 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
rollingMap
->
addChild
(
gridNode
);
// generate empty trail model
trailNode
=
createTrail
();
trailNode
=
createTrail
(
osg
::
Vec4
(
1.0
f
,
0.0
f
,
0.0
f
,
1.0
f
)
);
rollingMap
->
addChild
(
trailNode
);
// generate map model
...
...
@@ -105,6 +106,10 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
obstacleGroupNode
=
new
ObstacleGroupNode
;
obstacleGroupNode
->
init
();
rollingMap
->
addChild
(
obstacleGroupNode
);
// generate path model
pathNode
=
createTrail
(
osg
::
Vec4
(
1.0
f
,
0.8
f
,
0.0
f
,
1.0
f
));
rollingMap
->
addChild
(
pathNode
);
#endif
setupHUD
();
...
...
@@ -675,6 +680,7 @@ Pixhawk3DWidget::display(void)
rollingMap
->
setChildValue
(
targetNode
,
enableTarget
);
#ifdef QGC_PROTOBUF_ENABLED
rollingMap
->
setChildValue
(
obstacleGroupNode
,
displayObstacleList
);
rollingMap
->
setChildValue
(
pathNode
,
displayPath
);
#endif
rollingMap
->
setChildValue
(
rgbd3DNode
,
displayRGBD3D
);
hudGroup
->
setChildValue
(
rgb2DGeode
,
displayRGBD2D
);
...
...
@@ -742,6 +748,11 @@ Pixhawk3DWidget::display(void)
{
updateObstacles
();
}
if
(
displayPath
)
{
updatePath
(
robotX
,
robotY
,
robotZ
);
}
#endif
updateHUD
(
robotX
,
robotY
,
robotZ
,
robotRoll
,
robotPitch
,
robotYaw
,
utmZone
);
...
...
@@ -774,6 +785,10 @@ Pixhawk3DWidget::keyPressEvent(QKeyEvent* event)
case
'O'
:
displayObstacleList
=
!
displayObstacleList
;
break
;
case
'p'
:
case
'P'
:
displayPath
=
!
displayPath
;
break
;
}
}
...
...
@@ -974,30 +989,30 @@ Pixhawk3DWidget::createGrid(void)
}
osg
::
ref_ptr
<
osg
::
Geode
>
Pixhawk3DWidget
::
createTrail
(
void
)
Pixhawk3DWidget
::
createTrail
(
const
osg
::
Vec4
&
color
)
{
osg
::
ref_ptr
<
osg
::
Geode
>
geode
(
new
osg
::
Geode
());
trailGeometry
=
new
osg
::
Geometry
(
);
trailG
eometry
->
setUseDisplayList
(
false
);
geode
->
addDrawable
(
trailG
eometry
.
get
());
osg
::
ref_ptr
<
osg
::
Geometry
>
geometry
(
new
osg
::
Geometry
()
);
g
eometry
->
setUseDisplayList
(
false
);
geode
->
addDrawable
(
g
eometry
.
get
());
trailVertices
=
new
osg
::
Vec3dArray
;
trailGeometry
->
setVertexArray
(
trailV
ertices
);
osg
::
ref_ptr
<
osg
::
Vec3dArray
>
vertices
(
new
osg
::
Vec3dArray
())
;
geometry
->
setVertexArray
(
v
ertices
);
trailDrawArrays
=
new
osg
::
DrawArrays
(
osg
::
PrimitiveSet
::
LINE_STRIP
);
trailGeometry
->
addPrimitiveSet
(
trailD
rawArrays
);
osg
::
ref_ptr
<
osg
::
DrawArrays
>
drawArrays
(
new
osg
::
DrawArrays
(
osg
::
PrimitiveSet
::
LINE_STRIP
)
);
geometry
->
addPrimitiveSet
(
d
rawArrays
);
osg
::
ref_ptr
<
osg
::
Vec4Array
>
color
(
new
osg
::
Vec4Array
);
color
->
push_back
(
osg
::
Vec4
(
1.0
f
,
0.0
f
,
0.0
f
,
1.0
f
)
);
trailGeometry
->
setColorArray
(
color
);
trailG
eometry
->
setColorBinding
(
osg
::
Geometry
::
BIND_OVERALL
);
osg
::
ref_ptr
<
osg
::
Vec4Array
>
color
Array
(
new
osg
::
Vec4Array
);
color
Array
->
push_back
(
color
);
geometry
->
setColorArray
(
colorArray
);
g
eometry
->
setColorBinding
(
osg
::
Geometry
::
BIND_OVERALL
);
osg
::
ref_ptr
<
osg
::
StateSet
>
stateset
(
new
osg
::
StateSet
);
osg
::
ref_ptr
<
osg
::
LineWidth
>
linewidth
(
new
osg
::
LineWidth
());
linewidth
->
setWidth
(
1.0
f
);
stateset
->
setAttributeAndModes
(
linewidth
,
osg
::
StateAttribute
::
ON
);
stateset
->
setMode
(
GL_LIGHTING
,
osg
::
StateAttribute
::
OFF
);
trailG
eometry
->
setStateSet
(
stateset
);
g
eometry
->
setStateSet
(
stateset
);
return
geode
;
}
...
...
@@ -1227,17 +1242,20 @@ Pixhawk3DWidget::updateTrail(double robotX, double robotY, double robotZ)
}
}
trailVertices
->
clear
();
osg
::
Geometry
*
geometry
=
reinterpret_cast
<
osg
::
Geometry
*>
(
trailNode
->
getDrawable
(
0
));
osg
::
Vec3dArray
*
vertices
=
reinterpret_cast
<
osg
::
Vec3dArray
*>
(
geometry
->
getVertexArray
());
osg
::
DrawArrays
*
drawArrays
=
reinterpret_cast
<
osg
::
DrawArrays
*>
(
geometry
->
getPrimitiveSet
(
0
));
vertices
->
clear
();
for
(
int
i
=
0
;
i
<
trail
.
size
();
++
i
)
{
trailV
ertices
->
push_back
(
osg
::
Vec3d
(
trail
[
i
].
y
()
-
robotY
,
trail
[
i
].
x
()
-
robotX
,
-
(
trail
[
i
].
z
()
-
robotZ
)));
v
ertices
->
push_back
(
osg
::
Vec3d
(
trail
[
i
].
y
()
-
robotY
,
trail
[
i
].
x
()
-
robotX
,
-
(
trail
[
i
].
z
()
-
robotZ
)));
}
trailD
rawArrays
->
setFirst
(
0
);
trailDrawArrays
->
setCount
(
trailV
ertices
->
size
());
trailG
eometry
->
dirtyBound
();
d
rawArrays
->
setFirst
(
0
);
drawArrays
->
setCount
(
v
ertices
->
size
());
g
eometry
->
dirtyBound
();
}
void
...
...
@@ -1569,6 +1587,29 @@ Pixhawk3DWidget::updateObstacles(void)
obstacleGroupNode
->
update
(
frame
,
uas
);
}
void
Pixhawk3DWidget
::
updatePath
(
double
robotX
,
double
robotY
,
double
robotZ
)
{
px
::
Path
path
=
uas
->
getPath
();
osg
::
Geometry
*
geometry
=
reinterpret_cast
<
osg
::
Geometry
*>
(
pathNode
->
getDrawable
(
0
));
osg
::
Vec3dArray
*
vertices
=
reinterpret_cast
<
osg
::
Vec3dArray
*>
(
geometry
->
getVertexArray
());
osg
::
DrawArrays
*
drawArrays
=
reinterpret_cast
<
osg
::
DrawArrays
*>
(
geometry
->
getPrimitiveSet
(
0
));
vertices
->
clear
();
for
(
int
i
=
0
;
i
<
path
.
waypoints_size
();
++
i
)
{
const
px
::
Waypoint
&
wp
=
path
.
waypoints
(
i
);
vertices
->
push_back
(
osg
::
Vec3d
(
wp
.
y
()
-
robotY
,
wp
.
x
()
-
robotX
,
-
(
wp
.
z
()
-
robotZ
)));
}
drawArrays
->
setFirst
(
0
);
drawArrays
->
setCount
(
vertices
->
size
());
geometry
->
dirtyBound
();
}
#endif
int
...
...
src/ui/map3D/Pixhawk3DWidget.h
View file @
56249630
...
...
@@ -116,7 +116,7 @@ private:
void
getPosition
(
double
&
x
,
double
&
y
,
double
&
z
);
osg
::
ref_ptr
<
osg
::
Geode
>
createGrid
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createTrail
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createTrail
(
const
osg
::
Vec4
&
color
);
osg
::
ref_ptr
<
Imagery
>
createMap
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createRGBD3D
(
void
);
osg
::
ref_ptr
<
osg
::
Node
>
createTarget
(
void
);
...
...
@@ -135,6 +135,7 @@ private:
#ifdef QGC_PROTOBUF_ENABLED
void
updateRGBD
(
double
robotX
,
double
robotY
,
double
robotZ
);
void
updateObstacles
(
void
);
void
updatePath
(
double
robotX
,
double
robotY
,
double
robotZ
);
#endif
int
findWaypoint
(
const
QPoint
&
mousePos
);
...
...
@@ -158,12 +159,12 @@ private:
bool
displayRGBD2D
;
bool
displayRGBD3D
;
bool
displayObstacleList
;
bool
displayPath
;
bool
enableRGBDColor
;
bool
enableTarget
;
bool
followCamera
;
osg
::
ref_ptr
<
osg
::
Vec3dArray
>
trailVertices
;
QVarLengthArray
<
osg
::
Vec3d
,
10000
>
trail
;
osg
::
ref_ptr
<
osg
::
Node
>
vehicleModel
;
...
...
@@ -176,14 +177,13 @@ private:
osg
::
ref_ptr
<
osg
::
Image
>
depthImage
;
osg
::
ref_ptr
<
osg
::
Geode
>
gridNode
;
osg
::
ref_ptr
<
osg
::
Geode
>
trailNode
;
osg
::
ref_ptr
<
osg
::
Geometry
>
trailGeometry
;
osg
::
ref_ptr
<
osg
::
DrawArrays
>
trailDrawArrays
;
osg
::
ref_ptr
<
Imagery
>
mapNode
;
osg
::
ref_ptr
<
WaypointGroupNode
>
waypointGroupNode
;
osg
::
ref_ptr
<
osg
::
Node
>
targetNode
;
osg
::
ref_ptr
<
osg
::
Geode
>
rgbd3DNode
;
#ifdef QGC_PROTOBUF_ENABLED
osg
::
ref_ptr
<
ObstacleGroupNode
>
obstacleGroupNode
;
osg
::
ref_ptr
<
osg
::
Geode
>
pathNode
;
#endif
QVector
<
osg
::
ref_ptr
<
osg
::
Node
>
>
vehicleModels
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment