Загрузка Dronekit в Pixhawk 4 - вопрос округления - PullRequest
1 голос
/ 13 февраля 2020

Когда я загружаюсь в 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 (что я сомневаюсь, потому что загрузка и загрузка через планировщик миссий не вызывает эту проблему), я не думаю, что это проблема.

У кого-то есть есть идеи?

1 Ответ

0 голосов
/ 02 апреля 2020

Я сделал сообщение на dronekit github, объясняющее, как решить эту проблему. Приведенная ниже проблема связана с тем же вопросом, что и выше, и я ответил на него решением этой проблемы.

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

...