牧夫天文网

 找回密码
 加入牧夫(请注明天文爱好者,否则无法通过审核)

QQ登录

只需一步,快速开始

尝试给DIY的GOTO加三星校准, 痛苦ing, 盼望有数学老师来指导。

[复制链接]
MegaPirateNG 发表于 2018-9-26 15:31 | 显示全部楼层 |阅读模式 来自: 广东省深圳市 电信

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?加入牧夫(请注明天文爱好者,否则无法通过审核)

x
本帖最后由 MegaPirateNG 于 2018-10-10 21:30 编辑

如题。
DIY 的 GOTO 偏差总是很大,从月亮 GOTO 到火星,可以漂1-2度,可以直接漂出镜子的视野。
希望增加三星校准功能,提升较长距离 GOTO 的精度。


物镜是 70700, 焦距 700mm. 相机是 Canon EOS M2, APS-C 画幅尺寸是 22.3mm * 14.9mm.
水平视角是: 2 * ATAN((22.3 / 2) / 700) / PI * 180 = 1.825(度)
垂直视角是: 2 * ATAN((14.9 / 2) / 700) / PI * 180 = 1.220(度)
所以,如果漂了1度,基本上就漂出视野了。


思路:仅考虑极轴不准的情况,先不考虑光轴与赤纬轴不垂直的情况。
难点是计算绕轴旋转之后的经纬度坐标,尝试用经纬度与四元数的相互转换来解决。


关于四元数的贴子,这个是看上去比较舒服的一篇:
https://www.qiujiawei.com/understanding-quaternions/


因为成功的可能性不大,所以放在水区。




红明 发表于 2018-9-26 16:02 | 显示全部楼层 来自: 上海市 电信
之前尝试做DSC/digital setting circle的时候,看过多星校准的几篇文章,后来买了AZ GTi就没再继续

我说一下当时的方法,你看一下能否参考

3颗校准亮星的真RA/Dec组成一个矩阵A
望远镜指过去之后,系统显示的RA/Dec组成一个矩阵B
两者求出仿射变换矩阵


https://github.com/hongming/Bino ... r/BinocularsHUD.ino
https://en.wikipedia.org/wiki/Affine_transformation
https://zhuanlan.zhihu.com/p/231 ... p;utm_medium=social

点评

很有用的知识,收藏了  详情 回复 发表于 2018-9-26 17:09
6666!!!!!我之前也想过做矩阵变换,但是存在旋转和平移,还有赤经赤纬不严格垂直导致的坐标系耦合误差的问题,想想脑袋就疼。线性代数没学好,一直没有往这一块动手的欲望,楼主要是做出来了麻烦公布一下算法代  详情 回复 发表于 2018-9-26 16:15
太感谢了。  详情 回复 发表于 2018-9-26 16:04
回复 支持 反对

使用道具 举报

 楼主| MegaPirateNG 发表于 2018-9-26 16:04 | 显示全部楼层 来自: 广东省深圳市 电信
红明 发表于 2018-9-26 16:02
之前尝试做DSC/digital setting circle的时候,看过多星校准的几篇文章,后来买了AZ GTi就没再继续

我说一 ...

太感谢了。

回复 支持 反对

使用道具 举报

野草 发表于 2018-9-26 16:15 | 显示全部楼层 来自: 湖北省武汉市 电信
红明 发表于 2018-9-26 16:02
之前尝试做DSC/digital setting circle的时候,看过多星校准的几篇文章,后来买了AZ GTi就没再继续

我说一 ...

6666!!!!!我之前也想过做矩阵变换,但是存在旋转和平移,还有赤经赤纬不严格垂直导致的坐标系耦合误差的问题,想想脑袋就疼。线性代数没学好,一直没有往这一块动手的欲望,楼主要是做出来了麻烦公布一下算法代码,方便我这样的伸手党啊!  
回复 支持 反对

使用道具 举报

弼马温1984 发表于 2018-9-26 17:09 | 显示全部楼层 来自: 广东省肇庆市 电信
红明 发表于 2018-9-26 16:02
之前尝试做DSC/digital setting circle的时候,看过多星校准的几篇文章,后来买了AZ GTi就没再继续

我说一 ...

很有用的知识,收藏了
回复 支持 反对

使用道具 举报

小六哥 发表于 2018-9-26 18:42 | 显示全部楼层 来自: 广东省韶关市 移动
很高深 收藏一下先
回复 支持 反对

使用道具 举报

 楼主| MegaPirateNG 发表于 2018-9-27 08:26 | 显示全部楼层 来自: 广东省深圳市 电信
本帖最后由 MegaPirateNG 于 2018-9-27 18:00 编辑

骨头只能一口一口的啃了。

绕不过去的欧拉公式
计算旋转如果使用四元数,则绕不过复数,学习复数则绕不过欧拉公式:

欧拉公式.jpg

还有它惊艳世人的特例:

欧拉公式特例.jpg

=========================================================

以上欧拉公式的证明:
先把 e 的幂给拆了:

1.jpg

然后拆 cos:
2.jpg

再拆 sin:
3.jpg

以上三个公式叫“麦克劳林公式”,过会儿再推导。

把 x 换成 ±i*x
4.jpg

把实数部分与虚数部分拆开:
5.jpg

于是就相等了:
6.jpg

令 x = π,就得到特例:e^(π*i) + 1 = 0

=========================================================

麦克劳林公式它是泰勒公式的特例。

11.jpg

12.jpg

13.jpg


=========================================================

拉格朗日中值定理

(建议先了解“费马引理”,然后是“罗尔中值定理”。)

为了减小阅读量,这里不加证明,直接想当然的给出结论:
如果函数f(x)满足:
(1)在闭区间[a,b]上连续;
(2)在开区间(a,b)内可导;
那么在开区间(a,b)内至少有一点 21.jpg 使等式 22.jpg 成立。

相关的有《抛物线弓形面积的阿基米德算法》,以后有空再慢慢欣赏。

=========================================================


泰勒公式

根据拉格朗日中值定理, 可以写出下式:
31.jpg

关于泰勒公式的证明,就不粘过来了。


四元数与三维旋转.pdf (398.37 KB, 下载次数: 20)


回复 支持 反对

使用道具 举报

 楼主| MegaPirateNG 发表于 2018-9-28 11:16 | 显示全部楼层 来自: 广东省深圳市 电信
本帖最后由 MegaPirateNG 于 2018-9-28 16:43 编辑

经过了近2天的学习与思考,感觉我的基本功太差了,打算先放一放这个问题。

前天晚上使用水平泡和指南针,仔细对了一下极轴,尝试从火星 GOTO 到土星,再从土星 GOTO 回火星。赤经轴感觉很准,基本上在屏幕正中;赤纬轴有一点偏差,但是并没有偏出屏幕。
从土星 GOTO 到附近裸眼不可见的 M25 和 M8,都拍到了。只是光害太严重,只拍星点。
对于玩具级别的使用,这个精度足够了。

打算改为研究“天文哲学史”。

上世纪的《球面天文学》教材:
https://pan.baidu.com/s/1DcGNutx3dL71hiKV85VI6A
回复 支持 反对

使用道具 举报

 楼主| MegaPirateNG 发表于 2018-10-10 15:20 | 显示全部楼层 来自: 广东省深圳市 电信
本帖最后由 MegaPirateNG 于 2018-10-10 21:27 编辑

根据书上写的: ls.jpg
天文学中使用的单位:小时。定义:1小时=15度。(而不是 360 度约等于 23小时56分,在计算 GOTO 的赤经轴移动步数时,会有区别。误差达到 0.28%,长一点儿的 GOTO 就可以误差1步以上。)

=====================================================

赤经/赤纬与方位角/高度角的转换算法。
出处:
http://www.stargazing.net/kepler/altaz.html#twig09

Foxpro 版的代码,这个语言对中文支持比较好,容易看懂一些吧。
*--        时角计算, 赤道系赤经/赤纬坐标转地平系方位角/高度角
Clear

Public n赤经, n赤纬, n当地经度, n当地纬度
Local n时角, n高度角, n方位角

n当地经度 = 113.9312
n当地纬度 = 22.56
*--        n赤经 = (34 / 60.000000 + 37) / 60.000000 + 18 && 织女星
*--        n赤纬 = 38 + (48 + 08 / 60.000000) / 60.000000 && 织女星
n赤经 = (42 / 60.000000 + 51) / 60.000000 + 19 && 牛朗星
n赤纬 = 8 + (55 + 08 / 60.000000) / 60.000000 && 牛朗星

n时角 = 计算时角(n赤经, n当地经度, 8)

Local n时角度, n时角分, n时角秒
n时角时 = Floor(n时角)
n时角分 = Floor((n时角 - n时角时) * 60)
n时角秒 = ((n时角 - n时角时) * 60 - n时角分) * 60
? Textmerge("时角: <<n时角时>>h<<n时角分>>m<<n时角秒>>s")

n高度角 = 计算高度角(n当地纬度, n赤纬, n时角)
n方位角 = 计算方位角(n赤纬, n高度角, n当地纬度, n时角)

Local n高度角度, n高度角分, n高度角秒, n方位角度, n方位角分, n方位角秒
n高度角度 = Floor(n高度角)
n高度角分 = Floor((n高度角 - n高度角度) * 60)
n高度角秒 = ((n高度角 - n高度角度) * 60 - n高度角分) * 60
n方位角度 = Floor(n方位角)
n方位角分 = Floor((n方位角 - n方位角度) * 60)
n方位角秒 = ((n方位角 - n方位角度) * 60 - n方位角分) * 60

? Textmerge("方位角/高度角: <<n方位角度>>°<<n方位角分>>'<<n方位角秒>>''/<<n高度角度>>°<<n高度角分>>'<<n高度角秒>>''")

Return

Procedure 计算方位角
    Lparameters tn赤纬, tn高度角, tn当地纬度, tn时角

    Local nDEC, nALT, nLAT, nHA, n方位角
    nDEC = tn赤纬 * 3.1415926535897932 / 180
    nALT = tn高度角 * 3.1415926535897932 / 180
    nLAT = tn当地纬度 * 3.1415926535897932 / 180
    nHA = tn时角 * 15 * 3.1415926535897932 / 180

    n方位角 = Acos((Sin(nDEC) - Sin(nALT) * Sin(nLAT)) / (Cos(nALT) * Cos(nLAT))) * 180 / 3.1415926535897932

    If Sin(nHA) < 0 Then
        n方位角 = n方位角
    Else
        n方位角 = 360 - n方位角
    Endif

    Return n方位角

Endproc

Procedure 计算高度角
    Lparameters tn当地纬度, tn赤纬, tn时角

    Local n高度角, nDEC, nLAT, nHA
    nDEC = tn赤纬 * 3.1415926535897932 / 180
    nLAT = tn当地纬度 * 3.1415926535897932 / 180
    nHA = tn时角 * 15 * 3.1415926535897932 / 180

    n高度角 = Asin(Sin(nDEC) * Sin(nLAT) + Cos(nDEC) * Cos(nLAT) * Cos(nHA)) * 180 / 3.1415926535897932

    Return n高度角
Endproc

Procedure 计算时角
    Lparameters tn赤经, tn经度, tn时区, tn年, tn月, tn日, tn时, tn分, tn秒

    Local n时角

    n时角 = 计算恒星时(tn经度, tn时区, tn年, tn月, tn日, tn时, tn分, tn秒) / 15.000000 - tn赤经
    n时角 = n时角 - 24 * Floor(n时角 / 24)

    Return n时角
Endproc

Procedure 计算恒星时
    Lparameters tn经度, tn时区, tn年, tn月, tn日, tn时, tn分, tn秒

    Local n恒星时

    n恒星时 = 100.46 + 0.985647 * 计算日期差(tn年, tn月, tn日, tn时, tn分, tn秒) + tn经度 + 15 * 计算标准时间(tn时区, tn时, tn分, tn秒)
    n恒星时 = n恒星时 - 360 * Floor(n恒星时 / 360)
    *--            ? TEXTMERGE("恒星时: <<n恒星时>>")

    Return n恒星时
Endproc

Procedure 计算标准时间
    Lparameters tn时区, tn时, tn分, tn秒

    Local n标准时间

    If Empty(tn时) Then
        Local n当前日期时间
        n当前日期时间 = Datetime()
        tn时 = Hour(n当前日期时间)
        tn分 = Minute(n当前日期时间)
        tn秒 = Sec(n当前日期时间)
    Endif
    n标准时间 = (tn秒 / 60.000000 + tn分) / 60.000000 + tn时 - tn时区
    *--            ? TEXTMERGE("标准时间: <<n标准时间>>")

    Return n标准时间
Endproc

Procedure 计算日期差
    Lparameters tn年, tn月, tn日, tn时, tn分, tn秒

    Local n日期差

    If Empty(tn年) Then
        Local n当前日期时间
        n当前日期时间 = Datetime()
        tn年 = Year(n当前日期时间)
        tn月 = Month(n当前日期时间)
        tn日 = Day(n当前日期时间)
        tn时 = Hour(n当前日期时间)
        tn分 = Minute(n当前日期时间)
        tn秒 = Sec(n当前日期时间)
    Endif
    *--            ? Textmerge("计算日期差: <<tn年>>年<<tn月>>月<<tn日>>日 <<tn时>>:<<tn分>>:<<tn秒>>")

    n日期差 = Date(tn年, tn月, tn日) - Date(2000, 1, 1)
    n日期差 = n日期差 + ((tn秒 / 60.000000 + tn分) / 60.000000 + tn时) / 24.000000 - 0.5

    *--            ? Textmerge("日期差: <<n日期差>>")

    Return n日期差
Endproc

回复 支持 反对

使用道具 举报

 楼主| MegaPirateNG 发表于 2018-10-11 13:27 | 显示全部楼层 来自: 广东省 移动数据上网公共出口
IMG_20181011_132239.png
中学学过的三角函数的万能公式。
貌似可以用来解,形如:
a•Sinx + b•Cosx = c
的方程。

回复 支持 反对

使用道具 举报

本版积分规则

快速回复 返回顶部 返回列表