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 后查看