[ros-users] Moving frames in 3D (6dof)

Tully Foote tfoote at willowgarage.com
Wed May 11 06:37:16 UTC 2011


Hi Augusto,

Could you please ask this on answers.ros.org..  This is a nice specific
question with one or more answers which another person could learn from.

Thanks,
Tully

On Tue, May 10, 2011 at 9:51 PM, Augusto Luis Ballardini <
aballardini at tiscali.it> wrote:

> Hi everybody, I have a question about frames , transforms and TF. I would
> like to extend the simples Turtle tf tutorials (
> http://www.ros.org/wiki/tf/Tutorials) based on a 2D space but I'm having a
> lot of troubles doing it. Unfortunately I didn't find (yet) something on the
> mailing list or on ros-answers...
> I have this 3 frames:
>
>    - world_frame
>    - odom_frame (with a fixed transform respect to world)
>    - cart_frame (I move this frame with the odometry data
>
> Here is the code:
>
> static tf::TransformBroadcaster br;
>> static tf::TransformListener tf_;
>>
>
> and this
>
> while (ros::ok()){
>
>
>> transform.setOrigin(tf::Vector3(3,3,0));
>> transform.setRotation(tf::createQuaternionFromRPY(0.0,0.0,0.0));
>> br.sendTransform(tf::StampedTransform(transform, ros::Time::now(),
>> "/world", "/odom"));
>>
>
> here, with updateOdom I calculate the x,y,theta position from the odometry
> (like the tutorial<https://code.ros.org/svn/ros-pkg/branches/trunk_cturtle/stacks/ros_pkg_tutorials/turtle_tf/src/turtle_tf_broadcaster.cpp>
> )
>
>
>> updateOdom(1);
>
> try
>
> {
>
>  transform.setOrigin(tf::Vector3(x,y,0));
>
>  transform.setRotation(tf::createQuaternionFromRPY(0.0,0.0,th));
>
>  br.sendTransform(tf::StampedTransform(transform, ros::Time::now(),
>> "/odom", "/cart_frame"));
>
> }  catch(tf::TransformException e)
>
> { ROS_WARN("errore transformpose (%s)", e.what()); }
>
>
>
>
> Now what I'm trying to do is move the cart_frame not only with the x+y+th
> params but with a full 6-dof transform, as if the the cart_frame was moving
> on a circular garage car ramp, and here starts my question: the simplest way
> is to add the information to the odometry, so I can call the sendtransform()
> directly, but what if I had a situation where the odometer always sends only
> 2D transforms?
> In the example I tried to send a transform with a small pitch at the
> beginning of the while (ros ok())
>
> transform.setOrigin(tf::Vector3(3,3,0));
>> transform.setRotation(tf::createQuaternionFromRPY(0.0,0.4,0.0));
>> br.sendTransform(tf::StampedTransform(transform, ros::Time::now(),
>> "/world", "/odom"));
>
>
> and this is the outcome http://www.youtube.com/watch?v=d4ktwwukCV0, not
> properly what I want...
>
> Ok, probably  I am very tired and confused today but if someone can tell me
> where I'm wrong I'll be infinitely grateful =)
> Thank you
>
> Augusto
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
>


-- 
Tully Foote
Systems Engineer
Willow Garage, Inc.
tfoote at willowgarage.com
(650) 475-2827
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20110510/1a3b6e98/attachment-0002.html>


More information about the ros-users mailing list