Dronekit 上传到 Pixhawk 4 - 舍入问题

Dronekit upload to Pixhawk 4 - rounding issue

当我通过Mission Planner上传到Pixhawk,然后再次下载时,似乎没有任何问题。但是当我用Dronekit上传任务文件的时候,回来的时候看起来很奇怪。

这是我用来上传的(简化的)代码:

upload_mission_file("D:\TestMission.txt")
# Upload mission file
def upload_mission_file(file_name):
    mission_list = load_mission(file_name)

    # Clear existing mission from vehicle
    print(' Clear mission')
    cmds = communications_global.vehicle.commands
    cmds.clear()

    # Add new mission to vehicle
    for command in mission_list:
        cmds.add(command)

    #for command in cmds:
    #    print(str(command))

    print('Upload mission')
    communications_global.vehicle.commands.upload()
    print("Uploaded mission")

# Load mission from file
def load_mission(file_name):
    # Load a mission from a file into a list. The mission definition is in the Waypoint file
    # format (http://qgroundcontrol.org/mavlink/waypoint_protocol#waypoint_file_format).
    # This function is used by upload_mission().

    print("\nReading mission from file: %s" % file_name)
    cmds = communications_global.vehicle.commands
    missionlist = []
    with open(file_name) as f:
        for i, line in enumerate(f):
            if i == 0:
                if not line.startswith('QGC WPL 110'):
                    raise Exception('File is not supported WP version')
            else:
                linearray = line.split('\t')
                ln_index = int(linearray[0])
                ln_currentwp = int(linearray[1])
                ln_frame = int(linearray[2])
                ln_command = int(linearray[3])
                ln_param1 = float(linearray[4])
                ln_param2 = float(linearray[5])
                ln_param3 = float(linearray[6])
                ln_param4 = float(linearray[7])
                ln_param5 = float(linearray[8])
                ln_param6 = float(linearray[9])
                ln_param7 = float(linearray[10])
                ln_autocontinue = int(linearray[11].strip())
                cmd = Command(0, 0, 0, ln_frame, ln_command, ln_currentwp, ln_autocontinue, ln_param1, ln_param2,
                              ln_param3, ln_param4, ln_param5, ln_param6, ln_param7)
                missionlist.append(cmd)
    return missionlist

--

这是我上传的内容:

QGC WPL 110
0   1   0   16  0   0   0   0   -41.5066668 173.7577779 100 1
1   0   0   178 0.00000000  0.50000000  50.00000000 0.00000000  0.00000000  0.00000000  0.000000    1
2   0   3   16  0   0   0   0   -41.5066668 173.7577779 100 0
3   0   3   16  0   0   0   0   -41.5066667 173.7577778 100 0
4   0   3   16  0   0   0   0   -41.5066666 173.7577777 100 0
5   0   3   16  0   0   0   0   -41.5066665 173.7577776 100 0
6   0   3   16  0   0   0   0   -41.5066664 173.7577775 100 0
7   0   3   16  0   0   0   0   -41.5066663 173.7577774 100 0
8   0   3   16  0   0   0   0   -41.5066662 173.7577773 100 0
9   0   3   16  0   0   0   0   -41.5066661 173.7577772 100 0
10  0   3   16  0   0   0   0   -41.5066660 173.7577771 100 0

这是我通过任务规划器下载后返回的内容:

QGC WPL 110
0   1   0   16  0   0   0   0   -35.363262  149.165237  1168.000000 1
1   0   0   178 0.00000000  0.50000000  50.00000000 0.00000000  0.00000000  0.00000000  0.000000    1
2   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
3   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
4   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
5   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
6   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
7   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
8   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666880    173.75778560    100.000000  1
9   0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666560    173.75778560    100.000000  1
10  0   3   16  0.00000000  0.00000000  0.00000000  0.00000000  -41.50666560    173.75778560    100.000000  1

我在官方 dronekit 文档中读到了舍入问题: https://dronekit-python.readthedocs.io/en/latest/examples/mission_import_export.html

不过,我一直检查到最后上传,似乎没有任何舍入问题。因此,除非它存在于 pymavlink 库或 pixhawk 本身的深处(我对此表示怀疑,因为通过任务规划器上传和下载不会导致此问题),我认为这不是问题所在。

有人有什么想法吗?

我在 dronekit github 上做了一个 post 解释如何解决这个问题。下面链接的问题是我用与上面相同的问题创建的,我已经用这个问题的解决方案回答了它。

https://github.com/dronekit/dronekit-python/issues/1005