ndt_visual.cpp
Go to the documentation of this file.
00001 #include <OGRE/OgreVector3.h>
00002 #include <OGRE/OgreSceneNode.h>
00003 #include <OGRE/OgreSceneManager.h>
00004 #include <Eigen/Dense>
00005 #include <ros/ros.h>
00006 #include <rviz/ogre_helpers/shape.h>
00007 #include "ndt_visual.hpp"
00008 
00009 namespace lslgeneric{
00010   NDTVisual::NDTVisual( Ogre::SceneManager* scene_manager, Ogre::SceneNode* parent_node ){
00011     scene_manager_ = scene_manager;
00012     frame_node_ = parent_node->createChildSceneNode();
00013     NDT_elipsoid_.reset(new rviz::Shape(rviz::Shape::Sphere,scene_manager_,frame_node_ ));
00014   }
00015 
00016   NDTVisual::~NDTVisual()
00017   {
00018     scene_manager_->destroySceneNode( frame_node_ );
00019   }
00020 
00021   void NDTVisual::setCell(ndt_map::NDTCellMsg cell, double resolution){
00022     Ogre::Vector3 position(cell.mean_x,cell.mean_y,cell.mean_z);
00023     //eigen values aka size of the elipsoid
00024     Eigen::Matrix3d cov;
00025     int m_itr=0;
00026     for(int i=0;i<3;i++){
00027       for(int j=0;j<3;j++){
00028         cov(j,i)=cell.cov_matrix[m_itr];
00029         m_itr++;
00030       }
00031     }
00032     Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> Sol (cov);
00033     Eigen::Matrix3d evecs;
00034     Eigen::Vector3d evals;
00035     evecs = Sol.eigenvectors().real();
00036     evals = Sol.eigenvalues().real();
00037     Eigen::Quaternion<double> q(evecs);
00038 
00039     Ogre::Vector3 scale(30*evals(0),30*evals(1),30*evals(2));
00040     Ogre::Quaternion orient(q.w(),q.x(),q.y(),q.z());
00041     NDT_elipsoid_->setScale(scale);
00042     NDT_elipsoid_->setPosition(position);
00043     NDT_elipsoid_->setOrientation(orient);
00044    
00045   }
00046 
00047   void NDTVisual::setFramePosition( const Ogre::Vector3& position ){
00048     frame_node_->setPosition( position );
00049   }
00050 
00051   void NDTVisual::setFrameOrientation( const Ogre::Quaternion& orientation ){
00052     frame_node_->setOrientation( orientation );
00053   }
00054 
00055   void NDTVisual::setColor( float r, float g, float b, float a ){
00056     NDT_elipsoid_->setColor( r, g, b, a );
00057   }
00058 } 
00059 


ndt_rviz_visualisation
Author(s):
autogenerated on Wed Aug 26 2015 15:25:20