当前位置: 首页 > news >正文

在Isaac-sim中弧度转四元数以及四元数转弧度的问题

问题:

在Isaac-sim中如果采用set_world_pose()和get_world_pose()得到的都是四元数,如何将弧度转四元数,或者将四元数转为弧度是需要解决的一个问题,
这里的弧度是以x轴为0度,y轴为90度,逆时针方向逐渐增大;

解决方案:

采用scipy.spatial.transform中的Rotation库,进行转换;
在转换的时候涉及到角度的变换,
即如果直接采用Rotation.from_euler(‘x’, angle_rad2, degrees=False)进行转换,得到的是以x轴负方向为0度,y轴为90度,顺时针方向逐渐增大;
因此需要在rad_to_quaternion函数中通过angle_rad2 = -angle_rad + math.pi方法进行转换,同样的在quaternion_to_angle函数中通过angle_rad = -angle_rad + math.pi将转换回来。

import math
from scipy.spatial.transform import Rotation
import torchdef rad_to_quaternion(angle_rad):if angle_rad > math.pi:angle_rad -= 2 * math.pielif angle_rad < -math.pi:angle_rad += 2 * math.piangle_rad2 = -angle_rad + math.pirotation = Rotation.from_euler('x', angle_rad2, degrees=False)# print("rotation.as_quat()=%s" % (str(rotation.as_quat())))quaternion = rotation.as_quat()[:]  # 将旋转矩阵转换为四元数return quaternion, angle_rad, angle_rad2def quaternion_to_angle(quaternion):rotation = Rotation.from_quat(quaternion)euler_angles = rotation.as_euler('xyz')angle_rad = euler_angles[0]angle_rad = -angle_rad + math.piif angle_rad > math.pi:angle_rad -= 2 * math.pielif angle_rad < -math.pi:angle_rad += 2 * math.pireturn angle_radfor i in range(361):rad = math.radians(i)quaternion, rad_ori, rad_new = rad_to_quaternion(rad)rad_bak = quaternion_to_angle(quaternion)theta0 = math.degrees(rad_ori)theta1 = math.degrees(rad_new)theta2 = math.degrees(rad_bak)print("原始角度为%s,经过变换后角度为%s,转换后的角度为%s"%(str(round(theta0)), str(round(theta1)), str(round(theta2))))# rad_new = math.floor(rad_new * 10000) / 10000# rad_bak = math.floor(rad_bak * 10000) / 10000# if rad_new != rad_bak:#     print("出错了rad_new=%s, rad_bak=%s"%(str(rad_new), str(rad_bak)))# print("rad=%.4f, rad_bak=%.4f"%(rad, rad_bak))
http://www.lryc.cn/news/327691.html

相关文章:

  • 【计算机网络】高级IO模型
  • LabVIEW电动汽车直流充电桩监控系统
  • 前端学习<二>CSS基础——08-CSS属性:定位属性
  • 88. 合并两个有序数组(javascript)
  • 机器学习_集成学习_梯度提升_回归_决策树_XGBoost相关概念
  • ABAP 字段类型不一样导致相加之后金额错误
  • 【L1距离和L2距离】Manhattan Distance Euclidean Distance 解释和计算公式
  • 自动发卡平台源码优化版,支持个人免签支付
  • 如何使用固定公网地址远程连接Python编译器并将运行结果返回到Pycharm
  • Java设计模式—备忘录模式(快照模式)
  • 没学数模电可以玩单片机吗?
  • FlinkSQL之Flink SQL Join二三事
  • 某某消消乐增加步数漏洞分析
  • SpringBoot动态数据源实现
  • 计算机网络常见题(持续更新中~)
  • 富格林:可信招数揭发防备暗箱陷阱
  • 获取高德安全码SHA1
  • 关于RPC
  • pulsar: kafka on pulsar之把pulsar当kafka用
  • 七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b
  • 基于 YOLO V8 Fine-Tuning 训练自定义的目标检测模型
  • 快手,得物,蓝月亮,蓝禾,奇安信,三七互娱,顺丰,康冠科技,金证科技24春招内推
  • 全局UI方法-弹窗二-列表选择弹窗(ActionSheet)
  • Memcached分布式内存对象数据库
  • 华为广告打包报错,问题思考
  • docker-compose mysql
  • PGAdmin 4:用于管理和维护PostgreSQL数据库的强大工具
  • 成都市酷客焕学新媒体科技有限公司:实现品牌的更大价值!
  • 探索数据库--------------mysql主从复制和读写分离
  • 【Hello,PyQt】控件拖拽