四元素以及欧拉角
c++
头文件
#include "tf/LinearMath/Matrix3x3.h"
#include "geometry_msgs/Quaternion.h"
#include "tf/transform_datatypes.h"
欧拉角到四元素
sensor_msgs::Imu imu_msg
tf::Matrix3x3 rotation_matrix;
rotation_matrix.setEulerYPR( nodes[i].gAngle * 3.1415926 / 180.0 * -1.0, 0., 0. );
tf::Quaternion quat;
rotation_matrix.getRotation( quat );
imu_msg.orientation.x = quat.getX();
imu_msg.orientation.y = quat.getY();
imu_msg.orientation.z = quat.getZ();
imu_msg.orientation.w = quat.getW();
四元素到欧拉角
geometry_msgs::Quaternion orientation = imu_msg.orientation;
tf::Matrix3x3 mat(tf::Quaternion(orientation.x, orientation.y, orientation.z, orientation.w));
double yaw, pitch, roll;
mat.getEulerYPR(yaw, pitch, roll);
ROS_INFO("The combined_odom yaw is %f ",yaw * 180 / 3.1415926);
/*tf::Quaternion quat1;
tf::quaternionMsgToTF(imu_msg.orientation, quat1);
double roll, pitch, yaw;
tf::Matrix3x3(quat1).getRPY(roll, pitch, yaw);
ROS_INFO_STREAM("The yaw is " << yaw * 180.0 / 3.1415926 << " " << roll << " " << pitch);
python
from tf.transformations import euler_from_quaternion
from geometry_msgs.msg import Quaternion, Twist, Pose, QuaternionStamped
from nav_msgs.msg import Odometry
quaternion = Quaternion()
quaternion.x = 0.0
quaternion.y = 0.0
quaternion.z = sin(self.th / 2.0)
quaternion.w = cos(self.th / 2.0)
odom = Odometry()
odom.header.frame_id = "odom"
odom.child_frame_id = self.base_frame
#odom.child_frame_id = "baselink"
odom.header.stamp = now
odom.pose.pose.position.x = self.x
odom.pose.pose.position.y = self.y
odom.pose.pose.position.z = 0
odom.pose.pose.orientation = quaternion
odom.twist.twist.linear.x = vxy
odom.twist.twist.linear.y = 0
odom.twist.twist.angular.z = vth
quaternion_1 =
[odom.pose.pose.orientation.x, odom.pose.pose.orientation.y,
odom.pose.pose.orientation.z, odom.pose.pose.orientation.w]
(roll, pitch, yaw) = euler_from_quaternion(quaternion_1)
rospy.loginfo("The wheel odom is " + str(yaw * 180 / 3.1415926))
self.odomPub.publish(odom)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2016-12-19 1.SJ-SLAM-14
2016-12-19 PPJQR-GKK-2深度学习及应用