Commit 6354c28a authored by Lionel Heng's avatar Lionel Heng

QGC now receives and displays RGBD images via extended MAVLINK messages over UDP.

parent 31696fda
...@@ -983,6 +983,10 @@ void UAS::receiveExtendedMessage(LinkInterface* link, std::tr1::shared_ptr<googl ...@@ -983,6 +983,10 @@ void UAS::receiveExtendedMessage(LinkInterface* link, std::tr1::shared_ptr<googl
{ {
pointCloud.CopyFrom(*message); pointCloud.CopyFrom(*message);
} }
else if (message->GetTypeName() == rgbdImage.GetTypeName())
{
rgbdImage.CopyFrom(*message);
}
} }
#endif #endif
......
...@@ -132,6 +132,10 @@ public: ...@@ -132,6 +132,10 @@ public:
px::PointCloudXYZRGB getPointCloud() const { px::PointCloudXYZRGB getPointCloud() const {
return pointCloud; return pointCloud;
} }
px::RGBDImage getRGBDImage() const {
return rgbdImage;
}
#endif #endif
friend class UASWaypointManager; friend class UASWaypointManager;
...@@ -216,6 +220,7 @@ protected: //COMMENTS FOR TEST UNIT ...@@ -216,6 +220,7 @@ protected: //COMMENTS FOR TEST UNIT
#ifdef QGC_PROTOBUF_ENABLED #ifdef QGC_PROTOBUF_ENABLED
px::PointCloudXYZRGB pointCloud; px::PointCloudXYZRGB pointCloud;
px::RGBDImage rgbdImage;
#endif #endif
QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters
......
...@@ -96,6 +96,7 @@ public: ...@@ -96,6 +96,7 @@ public:
#ifdef QGC_PROTOBUF_ENABLED #ifdef QGC_PROTOBUF_ENABLED
virtual px::PointCloudXYZRGB getPointCloud() const = 0; virtual px::PointCloudXYZRGB getPointCloud() const = 0;
virtual px::RGBDImage getRGBDImage() const = 0;
#endif #endif
virtual bool isArmed() const = 0; virtual bool isArmed() const = 0;
......
...@@ -1219,25 +1219,41 @@ float colormap_jet[128][3] = { ...@@ -1219,25 +1219,41 @@ float colormap_jet[128][3] = {
void void
Pixhawk3DWidget::updateRGBD(double robotX, double robotY, double robotZ) Pixhawk3DWidget::updateRGBD(double robotX, double robotY, double robotZ)
{ {
px::RGBDImage rgbdImage = uas->getRGBDImage();
px::PointCloudXYZRGB pointCloud = uas->getPointCloud(); px::PointCloudXYZRGB pointCloud = uas->getPointCloud();
// QSharedPointer<QByteArray> rgb = freenect->getRgbData(); rgbImage->setImage(rgbdImage.cols(), rgbdImage.rows(), 1,
// if (!rgb.isNull()) { GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE,
// rgbImage->setImage(640, 480, 1, reinterpret_cast<unsigned char *>(&(*(rgbdImage.mutable_imagedata1()))[0]),
// GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, osg::Image::NO_DELETE);
// reinterpret_cast<unsigned char *>(rgb->data()), rgbImage->dirty();
// osg::Image::NO_DELETE);
// rgbImage->dirty(); QByteArray coloredDepth(rgbdImage.cols() * rgbdImage.rows() * 3, 0);
// } for (uint32_t r = 0; r < rgbdImage.rows(); ++r)
{
const float* depth = reinterpret_cast<const float*>(rgbdImage.imagedata2().c_str() + r * rgbdImage.step2());
uint8_t* pixel = reinterpret_cast<uint8_t*>(coloredDepth.data()) + r * rgbdImage.cols() * 3;
for (uint32_t c = 0; c < rgbdImage.cols(); ++c)
{
if (depth[c] != 0)
{
int idx = fminf(depth[c], 10.0f) / 10.0f * 127.0f;
idx = 127 - idx;
pixel[0] = colormap_jet[idx][2] * 255.0f;
pixel[1] = colormap_jet[idx][1] * 255.0f;
pixel[2] = colormap_jet[idx][0] * 255.0f;
}
// QSharedPointer<QByteArray> coloredDepth = freenect->getColoredDepthData(); pixel += 3;
// if (!coloredDepth.isNull()) { }
// depthImage->setImage(640, 480, 1, }
// GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
// reinterpret_cast<unsigned char *>(coloredDepth->data()), depthImage->setImage(rgbdImage.cols(), rgbdImage.rows(), 1,
// osg::Image::NO_DELETE); GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
// depthImage->dirty(); reinterpret_cast<unsigned char *>(coloredDepth.data()),
// } osg::Image::NO_DELETE);
depthImage->dirty();
osg::Geometry* geometry = rgbd3DNode->getDrawable(0)->asGeometry(); osg::Geometry* geometry = rgbd3DNode->getDrawable(0)->asGeometry();
......
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