ardupilot开发 --- 旋转关系 篇

两个FRU坐标系的旋转关系、矩阵

-- 两个FRU坐标系的z轴旋转关系,绕正z轴旋转angle
function rotateZ(x,y,z,angle_deg)
    local rot_x,rot_y,rot_z
    local angle_rad = math.rad(angle_deg)
    rot_x = x * math.cos(angle_rad) - y * math.sin(angle_rad)
    rot_y = x * math.sin(angle_rad) + y * math.cos(angle_rad)
    rot_z = z
    return rot_x,rot_y,rot_z
end
-- 两个FRU坐标系的y轴旋转关系 
function rotateY(x,y,z,angle_deg)
    local rot_x,rot_y,rot_z
    local angle_rad = math.rad(angle_deg)
    rot_x = x * math.cos(angle_rad) + z * math.sin(angle_rad)
    rot_y = y
    rot_z = -x * math.sin(angle_rad) + z * math.cos(angle_rad)
    return rot_x,rot_y,rot_z
end
-- 两个FRU坐标系的x轴旋转关系 
function rotateX(x,y,z,angle_deg)
    local rot_x,rot_y,rot_z
    local angle_rad = math.rad(angle_deg)
    rot_x = x
    rot_y = -z * math.sin(angle_rad) + y * math.cos(angle_rad)
    rot_z = z * math.cos(angle_rad) + y * math.sin(angle_rad)
    return rot_x,rot_y,rot_z
end
-- frame A to Frame B,A and B are all FRU Frame
-- input para
-- xa0_b,ya0_b,za0_b:A坐标系原点在坐标系B中的坐标值
-- angleX,angleY,angleZ 是绕xyz轴旋转的角度,旋转顺序z->y->x,单位deg
function frameAToframeB(xa,ya,za,xa0_b,ya0_b,za0_b,angleX_deg,angleY_deg,angleZ_deg)
    local Xb,Yb,Zb
    Xb,Yb,Zb=rotateZ(xa,ya,za,angleZ_deg)
    Xb,Yb,Zb=rotateY(Xb,Yb,Zb,angleY_deg)
    Xb,Yb,Zb=rotateX(Xb,Yb,Zb,angleX_deg)
    return Xb+xa0_b,Yb+ya0_b,Zb+za0_b
end
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值