【ROS tf2】获取两只小海龟之间的位姿变换

发布于:2022-07-24 ⋅ 阅读:(275) ⋅ 点赞:(0)

code

roscd learning_tf2
gedit src/turtle_tf2_listener.cpp
#include <ros/ros.h>
#include <tf2_ros/transform_listener.h>
#include <geometry_msgs/TransformStamped.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char** argv){
  ros::init(argc, argv, "my_tf2_listener");

  ros::NodeHandle node;

  tf2_ros::Buffer tfBuffer;
  tf2_ros::TransformListener tfListener(tfBuffer);

  ros::Rate rate(10.0);
  while (node.ok()){
    geometry_msgs::TransformStamped transformStamped;
    try{  
      transformStamped = tfBuffer.lookupTransform("turtle2", "turtle1", ros::Time(0));
    }
    catch (tf2::TransformException &ex) {
      ROS_WARN("%s",ex.what());
      ros::Duration(1.0).sleep();
      continue;
    }

    geometry_msgs::Twist vel_msg;
    vel_msg.angular.z = 4.0 * atan2(transformStamped.transform.translation.y, transformStamped.transform.translation.x);
    vel_msg.linear.x = 0.5 * sqrt(pow(transformStamped.transform.translation.x, 2) + pow(transformStamped.transform.translation.y, 2));
    ros::Publisher turtle_vel = node.advertise<geometry_msgs::Twist>("turtle2/cmd_vel", 10);
    turtle_vel.publish(vel_msg);
    rate.sleep();
  }
  return 0;
};

run

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun learning_tf2 turtle_tf2_broadcaster turtle1 __name:=turtle1_tf2_broadcaster
rosrun learning_tf turtle_spawn
rosrun learning_tf2 turtle_tf2_broadcaster turtle2 __name:=turtle2_tf2_broadcaster
rosrun learning_tf2 turtle_tf2_listener

check

transformStamped = tfBuffer.lookupTransform("turtle2", "turtle1", ros::Time(0));

在这里插入图片描述

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看