ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

openni_tracker rviz transform

asked 2011-05-07 12:51:34 -0500

ngidgas gravatar image

updated 2016-10-24 09:01:54 -0500

ngrennan gravatar image

I have a question about coordinate transforms related to openni_camera and oppennI_tracker

When I visualize both and set the fixed frame to openni_camera, it appears that the skeleton points are not in the same location as the corresponding body points are in the image. (see picture) image description

Does anybody know why this is happening and how to fix it?

Additionally here is the output from view_frames

image description

Any help would be greatly apreciated

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2011-05-12 03:32:15 -0500

Miguel Prada gravatar image

updated 2011-05-14 23:45:53 -0500

It seems there's an inconsistency between the frame conventions used by openni_camera and openni_tracker nodes. You should probably open a ticket with this issue.

In the meantime, you can take advantage of the fact that the pointcloud is published with reference frame openni_rgb_optical_frame and the skeleton with frame openni_depth_frame. The relation between those two frames is established in openni_camera/launch/kinect_frames.launch file, so you can change the static transforms declared in that file (or a copy of it, then you should also copy openni_node.launch and make it reference your copy of kinect_frames.launch) so that the skeleton and the depth data coincide.

Also, you should consider that the openni_tracker loades a configuration file (openni_tracker/openni_tracker.xml) for the OpenNI generators that set the mirror parameter to true. You should check if this is the behaviour you want.

If I can find the time to do it I'll try to prepare a patch that fixes these issues. Please tell me if you'd be interested.

Update: Using the frame David Lu suggests in his comment, plus a couple of changes in openni_tracker.xml and openni_tracker.cpp I've prepared a patch that should fix these issues. You need to run the openni_tracker node by using the new openni_tracker.launch file that should by added by the patch.

I must admit I'm not used to create patch files, so if there's something wrong you can easily make the changes manually by inspecting the file.

You can find the file here:

edit flag offensive delete link more


Hi Miguel--I would certainly be interested and perhaps more than a few others would be too. Thanks!
Pi Robot gravatar image Pi Robot  ( 2011-05-12 03:47:01 -0500 )edit
Ok, I no longer have the Kinect with me. I'll see if I can do it tomorrow after work or during the weekend.
Miguel Prada gravatar image Miguel Prada  ( 2011-05-12 04:50:24 -0500 )edit
Thanks David and Miguel--this is great. One question for Miguel: what sources did you start with for your patch? The openni_ros trunk or the Diamondback openni_kinect debian package?
Pi Robot gravatar image Pi Robot  ( 2011-05-15 04:01:39 -0500 )edit
That's a good point. I used the openni_ros trunk. However, I think the changes should work as well with the openni_tracker source inside the Diamondback debian package.
Miguel Prada gravatar image Miguel Prada  ( 2011-05-15 05:19:54 -0500 )edit
Hi Miguel--while I couldn't get your patch to work with the "patch" command (kept getting "Hunk FAILED" messages), I made your modifications manually to the various files and it works beautifully. This tf and mirroring problem has been bugging me for months so many thanks for posting a solution!
Pi Robot gravatar image Pi Robot  ( 2011-05-15 07:37:38 -0500 )edit
P.S. Note to David--Miguel's modified openni_tracker.cpp file was the key to getting mirroring to work properly for me.
Pi Robot gravatar image Pi Robot  ( 2011-05-15 07:39:08 -0500 )edit
Great! Also, in terms of other useful patches, I also submitted this one: for tracking multiple users at once, fixing something that always bugged me about this package.
David Lu gravatar image David Lu  ( 2011-05-15 07:41:46 -0500 )edit
That's also a good point, David. In fact, I think I saw that functionality in some previous version and that it later got removed. Is that possible or am I making things up?
Miguel Prada gravatar image Miguel Prada  ( 2011-05-15 20:10:34 -0500 )edit

answered 2011-05-12 07:32:06 -0500

David Lu gravatar image

I just tinkered around with it for awhile, using Miguel's suggestions. I've gotten some of it working.

<node pkg="tf" type="static_transform_publisher" name="tracker_link" args="0 0 0 1.57 0 1.57 /openni_depth_frame /openni_tracker_frame 100" />

rosparam set /openni_tracker/camera_frame_id openni_tracker_frame

However, this still flips everything right to left. Depending on whether you use the mirror parameter, it marks your left hand as your right, or flips the whole axis for the transforms.

Hopefully this is helpful enough to get someone else to tweak it so that it actually works.

edit flag offensive delete link more


Thanks. I'll try this out sometime tomorrow afternoon. (In the middle of finals)
ngidgas gravatar image ngidgas  ( 2011-05-12 19:22:09 -0500 )edit

In Groovy this still seems to be an issue. When I'm using the default options, the tf_skeleton aligns with the pointcloud, however the sides are flipped (right hand is left). Setting both image and depth mirror parameter to true, corrects that. Any tip how to fix this without mirroring?

bit-pirate gravatar image bit-pirate  ( 2013-04-09 23:31:27 -0500 )edit

Question Tools

1 follower


Asked: 2011-05-07 12:51:34 -0500

Seen: 1,316 times

Last updated: May 14 '11