Ask Your Question
2

Plot a Gaussian 3D representation with markers in rviz

asked Sep 01 '11

Pablo Iñigo Blasco gravatar image Pablo Iñigo Blasco
422 2 7 21
http://geus.wordpress.com...

updated Nov 16 '11

Hi people! I'm thinking of plotting a 3D Gaussian Model with a marker defined by a mean vector and a covariance matrix. Is there any rviz plugin to render this? If not, is it possible to do so plotting a marker?

I think it could be possible just plotting a sphere centered in the mean vector and apply to it a linear deformation using the covariance matrix.

Any idea or suggestion about how to address this problem?

EDITED: after the responses I made a blog entry to illustrate the problem: http://geus.wordpress.com/2011/09/15/how-to-represent-a-3d-normal-function-with-ros-rviz/

3 Answers

Sort by » oldest newest most voted
2
Pablo Iñigo Blasco has selected this answer as correct

answered Sep 13 '11

hersh gravatar image hersh
591 4 8 13

Dornhege's link to the other discussion (ending ultimately with an enhancement request ticket for rviz) is certainly correct.

However to answer the question more specifically: yes you can do this with a Marker. Specify marker type SPHERE, set the marker.scale.x, y, and z values to the length you want each axis of the "sphere" to be. If the scale x, y, and z values are not all equal it will look like an ellipsoid instead of a sphere. Set marker.pose.orientation to give it an orientation and marker.pose.position to the location of the center, and you are all set.

I'm not the one to ask about the math to go from a covariance matrix to a rotated ellipsoid, but I know you can show rotated ellipsoids in rviz.

link

Comments

You just need eigenvectors and eigenvalues from the covariance matrix. dornhege (Sep 13 '11)
3
Pablo Iñigo Blasco has selected this answer as correct

answered Sep 01 '11

dornhege gravatar image dornhege
6614 6 59 133
http://gki.informatik.uni...

I think this question is relevant here (seem it is not directly supported currently).

link
1
Pablo Iñigo Blasco has selected this answer as correct

answered Sep 15 '11

Pablo Iñigo Blasco gravatar image Pablo Iñigo Blasco
422 2 7 21
http://geus.wordpress.com...

updated Sep 20 '11

The eigenvectors represent the rotation matrix of the ellipsoid while the eigenvalues represent the scale of the sphere through the rotation frame axes. Here http://geus.wordpress.com/2011/09/15/how-to-represent-a-3d-normal-function-with-ros-rviz/ you can see a blog post with a more detailed code and a video with the results.

Here you can see a chunk of python code about how to solve the problem (thanks to hersh and dornhege for the suggestions):

enter code here
(eigValues,eigVectors) = numpy.linalg.eig (covMat)

eigx_n=-PyKDL.Vector(eigVectors[0,0],eigVectors[1,0],eigVectors[2,0])
eigy_n=-PyKDL.Vector(eigVectors[0,1],eigVectors[1,1],eigVectors[2,1])
eigz_n=-PyKDL.Vector(eigVectors[0,2],eigVectors[1,2],eigVectors[2,2])

rot = PyKDL.Rotation (eigx_n,eigy_n,eigz_n)
quat = rot.GetQuaternion ()

#painting the Gaussian Ellipsoid Marker
marker.pose.orientation.x =quat[0]
marker.pose.orientation.y = quat[1]
marker.pose.orientation.z = quat[2]
marker.pose.orientation.w = quat[3]
marker.scale.x = eigValues[0]
marker.scale.y = eigValues[1]
marker.scale.z =eigValues[2]
link

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

Follow

subscribe to rss feed

Stats

Asked: Sep 01 '11

Seen: 194 times

Last updated: Nov 16 '11