tftf2
- tftf2 推荐度:
- 相关推荐
tf/tf2
矩阵换算
#include "ros/ros.h"
#include "geometry_msgs/PointStamped.h"#include "tf2_ros/transform_listener.h"
#include "tf2_ros/message_filter.h"
#include "message_filters/subscriber.h"
#include "tf2_geometry_msgs/tf2_geometry_msgs.h"//tf2 转变坐标系
tf2_ros::Buffer buffer_;
tf2_ros::TransformListener tf2_;geometry_msgs::PointStamped point_out;
buffer_.transform(pose_in, pose_out, target_frame_);// 方式2tf2::doTransform(pose_in, pose_out, geometry_msgs::TransformStamped tf_plan_to_global);//tf
try {listener_.waitForTransform(odom_frame_, "base_link", ros::Time(0), ros::Duration(0.1));listener_.transformPose("base_link", pose_in_odom, pose_in_base);
} catch (tf::TransformException const& ex) {ROS_WARN("BaseController, Couldn't transform dock pose to tracking frame");return false;
}
diff2D, 获得输出速度PoseFollower.cpp
// usage
// diff2D(target_pose, robot_pose);geometry_msgs::Twist diff2D(const tf::Pose& pose1, const tf::Pose& pose2){geometry_msgs::Twist res;tf::Pose diff = pose2.inverse() * pose1;res.linear.x = diff.getOrigin().x();res.linear.y = diff.getOrigin().y();res.angular.z = tf::getYaw(diff.getRotation());if(holonomic_ || (fabs(res.linear.x) <= tolerance_trans_ && fabs(res.linear.y) <= tolerance_trans_))return res;//in the case that we're not rotating to our goal position and we have a non-holonomic robot//we'll need to command a rotational velocity that will help us reach our desired heading//we want to compute a goal based on the heading difference between our pose and the targetdouble yaw_diff = headingDiff(pose1.getOrigin().x(), pose1.getOrigin().y(), pose2.getOrigin().x(), pose2.getOrigin().y(), tf::getYaw(pose2.getRotation()));//compute the desired quateriontf::Quaternion rot_diff = tf::createQuaternionFromYaw(yaw_diff);tf::Quaternion rot = pose2.getRotation() * rot_diff;tf::Pose new_pose = pose1;new_pose.setRotation(rot);diff = pose2.inverse() * new_pose;res.linear.x = diff.getOrigin().x();res.linear.y = diff.getOrigin().y();res.angular.z = tf::getYaw(diff.getRotation());return res;}// 计算yawdiff, PoseFollower.cpp
// x,y 是 target, pt 是current pose; 这些点都是在odom 下讲的double headingDiff(double x, double y, double pt_x, double pt_y, double heading){double v1_x = x - pt_x;double v1_y = y - pt_y;double v2_x = cos(heading);double v2_y = sin(heading);double perp_dot = v1_x * v2_y - v1_y * v2_x; // 叉乘的意思(法线), |a| * |b| * sindouble dot = v1_x * v2_x + v1_y * v2_y; // 点乘的意义(投影), |a| × |b| × cos//get the signed angledouble vector_angle = atan2(perp_dot, dot);return -1.0 * vector_angle;}
点乘叉乘
最新文章
- 同是安卓客户 中国手机三巨头罕见“结义”
- KPM算法思想及实现
- jkd8新特性 StreamAPi流
- 《中国垒球》:跨界联赛·完美落幕
- 安装和配置NFS服务器
- JMS(Java Messaging Service)基础
- hessian矩阵特征值
- python反爬虫原理与绕过实战pdf
- 【目标检测】目标检测中常见的评价指标
- sql语句执行顺序及简单优化
- pta 6
- 分部积分法的一些特殊方法
- 国产手机启用鸿蒙系统,国产机会抛弃安卓系统?华为启用全新自研“鸿蒙”系统,你会买吗...
- tensorflow 19: tflite 概念理解
- Hadoop安装准备
- 将列表(含字典)数据写入Excel
- 超好用的Redis管理及监控工具
- 学好c语言对php的帮助,学好c语言可以干什么?
- JS中call用法理解
- H.265视频流媒体EasyPlayer播放器无法禁用自动播放的问题修复