clover/assemble_3.md at master · CopterExpress/clover · GitHub

Содержание
  1. Overview – klever – open-source projects
  2. Sq_game_winners
  3. Sq_question
  4. Sq_question_answers_right
  5. Video_comment_new
  6. Действия
  7. Залудить три контактные площадки регулятора
  8. Использование
  9. Монтаж arduino и радиоприемника flysky
  10. Монтаж raspberry
  11. Монтаж usb соединителей
  12. Монтаж и подключение полетного контроллера pixracer
  13. Монтаж камеры rpi
  14. Монтаж каркасных элементов
  15. Монтаж остальных конструктивных элементов
  16. Монтаж платы регуляторов 4в1 и платы питания pdb
  17. Монтаж преобразователя напряжения bec (припаять и проверить)
  18. Настройка роутера
  19. Обработчики
  20. Отправка ответа
  21. Подготовка и запуск анимации
  22. Подготовка коптера
  23. Подготовка по
  24. Покупка в магазине за клеверсы
  25. Получение токена
  26. Примеры
  27. Припаять провода моторов к регуляторам
  28. Проверка направления вращения моторов
  29. Проверка позиционирования
  30. Проверка работы светодиодной ленты
  31. Синхронизация времени
  32. События
  33. Сопряжение приемника и пульта
  34. Список оборудования
  35. Установка
  36. Установка и запуск клиента
  37. Установка и запуск сервера
  38. Установка моторов
  39. Sq_friend_answer

Overview – klever – open-source projects

Klever is a software verification framework that aims at automated checking of programs developed in the GNU C programming language against a variety of requirements using software model checkers (automatic software verification tools) implementing such methods of thorough static analysis as Bounded Model Checking and Counterexample-Guided Abstraction Refinement. Software model checking allows finding faults that can be hardly detected by other software quality assurance techniques like code review, testing and static analysis. In addition, it is capable to prove formal correctness of programs checked against particular requirements under certain assumptions.

Currently Klever supports verification of Linux kernel loadable modules, Linux kernel subsystems and BusyBox applets. One can extend this list further by developing corresponding configurations, specifications and, perhaps, appropriate Klever components that will adapt the framework for specifics of target software.

Смотрите про коптеры:  Упрощенный расчет кинематики движения мобильного робота с тремя омниколесами – тема научной статьи по механике и машиностроению читайте бесплатно текст научно-исследовательской работы в электронной библиотеке КиберЛенинка

For the Linux kernel Klever includes requirement specifications for detecting memory safety issues, e.g. buffer over-reads/writes and null pointer dereferences, data races and incorrect usages of the most popular Linux kernel API. On the base of specifications Klever generate environment models for invoking interrupts, timers, callbacks of different device types (USB, PCI, SCSI, NET, etc.), file system operations and some other most widely used interfaces. These environment models allow reaching more than 50% code coverage for Linux device drivers and subsystems. At the moment a false alarm rate ranges from 0% to 80% depending on checked requirements. One can incrementally improve verification results primarily by fixing existing specifications and developing new ones.

As software model checkers Klever supports various flavors of CPAchecker. Moreover, one can integrate other tools participated in the Competition on Software Verification.

For managing verification processes and for expert assessment of verification results Klever provides a multi-user web interface. It shows both details, e.g. code coverage and error traces that contain possible values of variables and function arguments as well as all statements from program entry points to found errors, and statistics like the total number of bugs and false alarms. Experts can create marks associating automatically with all similar error traces and compare verification results obtained at different times.

Bugs found by Klever in the Linux kernel and acknowledged by the developers: http://linuxtesting.org/results/ldv (commits).

You can find more information about Klever in the following papers and presentations:

  1. Towards automated static verification of GNU C programs.
  2. Verification of Operating System Monolithic Kernels Without Extensions.
  3. Klever: Enabling Model Checking for the Linux Kernel.
Смотрите про коптеры:  Подключение джойстика к аппаратуре через тренерский разъем — Паркфлаер

Klever documentation: https://klever.readthedocs.io/en/v3.5.

Klever read-only mirror: https://radiocopter.ru/ldv-klever/klever.

If you have any questions, feel free to send an email to [email protected].

Sq_game_winners

{  
   "type":"sq_game_winners",
   "owner_id":-162894513,
   "video_id":456230000,
   "users":[  
      {  
         "name":"Самира В.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Владислав П.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Варвара Д.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Анастасия Ф.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Тёма Б.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Евгений В.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Вячеслав З.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Дарья М.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      },
      {  
         "name":"Светлана С.",
         "photo_url":"https://vk.com/images/camera_200.png?ava=1"
      }
   ],
   "prize":0,
   "winners_num":9,
   "version":2
}

Sq_question

{  
   "type":"sq_question",
   "owner_id":-162894513,
   "video_id":456239000,
   "question":{  
      "id":11,
      "text":"Кто основал социальную сеть ВКонтакте?",
      "answers":[  
         {  
            "id":0,
            "text":"Николай Дуров"
         },
         {  
            "id":1,
            "text":"Павел Дуров"
         },
         {  
            "id":2,
            "text":"Илон Маск"
         }
      ],
      "time":null,
      "number":1
   },
   "version":2
}

Sq_question_answers_right

{  
   "type":"sq_question_answers_right",
   "owner_id":-162894513,
   "video_id":456230000,
   "question":{  
      "text":"Кто основал социальную сеть ВКонтакте?",
      "answers":[  
         {  
            "id":0,
            "text":"Николай Дуров",
            "users_answered":1584
         },
         {  
            "id":1,
            "text":"Павел Дуров",
            "users_answered":389217
         },
         {  
            "id":2,
            "text":"Илон Маск",
            "users_answered":389
         }
      ],
      "right_answer_id":1,
      "id":11,
      "is_first":true,
      "is_last":false,
      "number":1,
      "sent_time":1529600002,
      "answer_set":true
   },
   "question_time":1529600000,
   "version":2
}

Video_comment_new

{  
   "type":"video_comment_new",
   "owner_id":-162894513,
   "video_id":456230000,
   "comment":{  
      "id":0,
      "from_id":100,
      "date":152960000,
      "text":"мыши"
   },
   "user":{  
      "id":100,
      "photo_50":"https://vk.com/images/camera_200.png?ava=1",
      "photo_100":"https://vk.com/images/camera_200.png?ava=1",
      "first_name":"Павел",
      "last_name":"Анисимов",
      "sex":2
   },
   "version":2
}

Действия

В игре существуют некоторые действия, за которые вам начисляют клеверсы. Для начисления виртуальных монеты необходимо самостоятельно вызывать метод send_action*.

В параметрах необходимо передать тип действия (cleverapi.Action) и идентификатор пользователя.

Например, если вы правильно ответили на вопрос, то не забудьте оповестить об этом сервер:

Список возможных действий:

Залудить три контактные площадки регулятора

  • Нанести флюс
  • Нанести припой

Чтобы припой аккуратно заполнил всю площадку, необходимо прогреть площадку регулятора. Для этого нужно удерживать жало паяльника на контактной площадке в течение 2 сек (или больше, если потребуется)

  • Повторить данную операцию для оставшихся трех регуляторов

Использование

Вывод текста вопроса из онлайн викторины:

Главной точкой взаимодействия библиотеки с Клевером, является CleverLongPoll реализуемый библиотекой. С помощью него становится возможным в реальном времени получать игровые события, будь то ответ вашего друга или новый вопрос.

Монтаж arduino и радиоприемника flysky

  1. Произвести монтаж пинов микроконтроллера Arduino Nano, используя пайку.

  2. Установить микроконтроллер в специальной маунт и прикрепите к нижней деке, используя винты М3х16 (4 шт.).

  3. Используя двухсторонний скотч, прикрепить приемник, как показано на рисунке.

  4. Подключить шлейф радиоприемника от Pixracer как на рисунке.

Монтаж raspberry

  1. Перевернуть коптер.

    Установить Raspberry на стойки, используя монтажные отверстия Raspberry.

    USB-разъемы направлены к хвостовой части коптера.

  2. Установка шлейфа для камеры:

    • поднять защелку;
    • подключить шлейф;
    • закрыть защелку.
  3. Подключение питания Raspberry:

  4. Сборка маунта для камеры RPi.

    Используйте винт М3х16 и гайку М3

Монтаж usb соединителей

  1. Соедините Pixracer и Raspberry, используя micro USB – USB кабель.
  2. Соедините Arduino и Raspberry, используя micro USB – USB кабель.

Подробнее про подключение см. статью.

Монтаж и подключение полетного контроллера pixracer

  1. Установить Полетный контроллер Pixracer на двухсторонний скотч 3М (2-3 слоя).
    Также полетный контроллер можно извлечь из корпуса и жестко установить на стойке М3х6.

  2. Установить стойки 40 мм, используя винты М3х8.

    Подключить разъем POWER.

  3. Подключить регуляторы, как на картинке.

    Подробно про подключение регуляторов 4в1.

  4. Подключить шлейф радиоприемника в разъем RCIN в Pixracer.

Монтаж камеры rpi

  1. Установить маунт для камеры RPi в сборе на нижнюю деку винтами М3х12 (2 шт.).

  2. Подключить шлейф к камере RPi.

  3. Установить камеру в маунт, закрепить саморезами М2.

  4. Закрепить Raspberry стойками 30 мм (4 шт.).

    Установить нижнюю деку в сборе на стойки винтами М3х8 (4шт.)

  5. Установить ножки в маунты (4 шт.).

Монтаж каркасных элементов

  1. Установить пластиковые гайки М3 (4 шт) для крепления PDB на раму винтами М3х8.
  2. Установить стойки 6 мм (4 шт) для крепления Raspberry Pi на раму винтами М3х8.
  3. Установить на раму собранную конструкцию, соблюдая схему, винтами М3х16.
  4. Установить каркас для светодиодной ленты, используя прорези в держателях для ножек.

Монтаж остальных конструктивных элементов

  1. Установить нижней защиты, используя винты М3х12 (8 шт.) и стойки 30 мм (8 шт.).

  2. Установить верхней защиты, используя винты М3х12 (8 шт.).

  3. Установить ремешок в верхнюю деку для фиксации АКБ.

    Закрепить верхнюю деку винтами М3х8 (4 шт.)

Монтаж платы регуляторов 4в1 и платы питания pdb

  1. Установить плату регуляторов 4в1, как показано на картинке.

    Соединить фазные провода моторов с проводами регуляторов.

  2. Закрепить плату регуляторов стойками 6 мм (4 шт.).

    На стойки накрутить пластиковые гайки М3 (4 шт.).

  3. Установить плату распределения питания PDB, как показано на картинке (разъем XT60 направлен к хвосту коптера).

  4. Соединить разъемы питания платы питания и платы регуляторов XT30.

Монтаж преобразователя напряжения bec (припаять и проверить)

  1. Распаковать плату питания и установить шлейф питания.

  2. Включить мультиметр в режим измерения постоянного напряжения (диапазон 20В или 200В).

  3. Проверить работоспособность платы питания, подключив АКБ

    • Выходное напряжение на разъеме XT30 должно равняться напряжению на АКБ (от 10В до 12.6В).
    • Выходное напряжение на шлейфе питания должно быть в пределах 4.9В до 5.3В.
    • Измеряем между черным и красным проводами.
  4. Распаковывать преобразователь напряжения и снимаем прозрачную изоляцию.

  5. Припаять два дополнительных провода на BEC

  6. Проверить работу BEC.

  7. Монтаж светодиодной ленты.

Настройка роутера

Для управления одним или несколькими коптерами требуется подключение коптеров и сервера к одной сети. Для этого требуется отдельный wifi роутер с известным SSID и паролем. SSID и пароль сети не должны содержать пробелов!

Обработчики

Поступающие игровые события нужно как-то обрабатывать, для этого нужно использовать специальные обработчики.

Обработчиком становится функция перед которой установлен определенный декоратор. К примеру, если вы захотите получать список победителей игры в вашей функции, то можно воспользоваться следующей конструкцией:

У функции после декоратора должен быть единственный параметр, отвечающий за информацию о событии.

Список доступных декораторов:

ДекораторТип событияОписание
comment_handlervideo_comment_newСобытие комментария к игровой трансляции
question_handlersq_questionСобытие нового вопроса
friend_answer_handlersq_friend_answerСобытие ответа друга пользователя
right_answer_handlersq_question_answers_rightСобытие результата ответа на вопрос
end_game_handlersq_ed_gameСобытие окончания викторины
game_winners_handlersq_game_winnersСобытие списка победивших игроков
start_game_handlerДополнительный декоратор, сигнализирует о начале игры
all_events_handlerДополнительный декоратор, служит для получения всех событий пришедших с LongPoll
last_time_answersq_questionДополнительный декоратор, вызываемый в последнее возможное время ответа на вопрос (может быть полезно, когда нужно ответить не сразу после получения вопроса)

Отправка ответа

Для отправки ответа используется метод. send_answer:

Параметры метода:

  • coins_answer (bool) – Передавайте True если играете на клеверсы, передавайте значение False, если вы продолжаете играть на деньги. Осторожно, если вы передадите значение False когда уже выбыли из игры ваш ответ не будет засчитан
  • game_id (int) – идентификатор текущей игры, его можно получить из атрибута game_id класса CleverLongPoll

Подготовка и запуск анимации

По умолчанию в клиент уже загружена анимация basic:

Красная линия – ось x, зелёная – ось y. Куб в анимации двигается в положительном направлении по оси x. Модуль воспроизведения анимации проведёт коптер по точкам, указанным в файле анимации, относительно системы координат, заданной в настройке frame_id раздела FLIGHT конфигурации клиента (по умолчанию map).

Информация о текущем положении коптера указана в столбце current x y z yaw frame_id таблицы сервера. Информация о стартовой точке анимации и времени, через которое коптер включит моторы, указана в столбце start x y z yaw action delay.

Проверьте воспроизведение анимации, нажав кнопку Start animation: первые две секунды коптер будет изменять цвет ленты, затем запустит моторы, взлетит на 1 метр вверх, затем пролетит 1 метр вправо и начнёт опускаться вниз. После касания земли в анимации коптер перейдёт в режим посадки, заглушит двигатели, и продолжит менять цвет светодиодной ленты до окончания анимации.

Результат выполнения анимации должен выглядеть так (с точностью до настройки PID коэффициентов):

Подробная информация по работе модуля анимации находится здесь.

Подготовка коптера

Дальнейшие инструкции написаны для коптеров, элементы которых расположены согласно инструкции по сборке. Полётный контроллер коптера должен быть предварительно настроен и откалиброван согласно статьям по настройке:

  • Первоначальная настройка
  • Калибровка датчиков
  • Настройка пульта
  • Полётные режимы

Перед тем как приступать к настройке программного обеспечения, проверьте, что коптер управляется с пульта в режиме Stabilized.

Включите коптер и запустите серверное приложение на компьютере. Дождитесь подключения коптера к серверу и отображения данных его телеметрии в таблице.

Подготовка по

ПО для организации шоу коптеров состоит из 2х основных частей – серверного приложения и клиентской части, которая предоставляется в виде образа для Raspberry Pi.

Актуальная версия образа на текущий момент: v0.4-alpha.6. Образ основан на образе clover v0.20. Внимание! Для работы на Raspberry Pi 4 светодиодной ленты необходимо обновить пакет rpi_ws281x. В некоторых ревизиях Raspberry Pi 4 может наблюдаться нестабильная работа

Инструкция для установки клиентского ПО clever-show на образ clover v0.21.* (с полной поддержкой Raspberry Pi 4) находится здесь.

Покупка в магазине за клеверсы

Для получения списка товаров с магазина используется метод. getGifts.

Покупка товара: purchaseGift

Где цифра 1 это ID товара. В нашем случае это жизнь.

Получение токена

Для работы библиотеки необходимо получить access_token приложения Клевер, сделать это можно воспользовавшись ссылкой (access_token будет в адресной строке после подтверждения прав доступа):

Примеры

like_friends.py – использование библиотеки для создания бота, который выбирает наиболее популярный ответ у друзей
bump.py – использование библиотеки для бампа, который происходит в выбранных координатах

Припаять провода моторов к регуляторам

Припаять ранее приготовленные провода моторов к контактным площадкам регуляторов.

  • Повторить данную операцию для оставшихся трех регуляторов

Проверка направления вращения моторов

  1. Включить пульт.

    Убедиться, что PPM в меню RX Setup отключен (раздел “Нет связи с полетным контроллером”)

    В пункте 3 выберите “RX setup” > “PPM OUTPUT” > “Off”.

    Сохраните изменения (удерживаем нажатой кнопку “CANCEL”).

  2. Подключить оранжевый провод S1 от платы регуляторов в CH3 на приемнике. Подключить внешнее питание.

  3. Подать левым стиком газ (throttle) на 10%.

  4. Проверить направления вращения мотора по схеме.Повторить для каждого мотора. Таким образом, будет понятно каким именно мотором мы управляем.

  5. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно переподключить).

Проверка позиционирования

Для автономного воспроизведения анимации все коптеры должны иметь настроенную систему позиционирования. Образ clever-show для коптера настроен по умолчанию на полёт с использованием optical flow: на коптере должен быть установлен лазерный дальномер, а камера должна быть наклонена вниз шлейфом назад.

Перед проверкой автономного взлёта проведите автоматическую проверку корректности настроек коптера согласно статье.

Проверьте, что коптер удерживает позицию автономно: отметьте чекбокс около названия коптера и нажмите кнопку Takeoff в правой панели интерфейса сервера. Коптер должен взлететь на высоту, указанную в параметре takeoff_height раздела FLIGHT конфигурации клиента.

По умолчанию эта высота равна 1 метр. Если коптер взлетел и удерживает позицию на высоте 1 метр, проверка пройдена. Посадите коптер на землю, нажав на кнопку Land или Land All. Внимание! Для вашей безопасности рекомендуется проводить проверку автономного взлёта с включенным пультом и возможностью перехвата коптера в режим ручного управления.

Вы можете настроить коптер на другую систему позиционирования. Официально поддерживаются следующие системы позиционирования:

Подробная информация про работу с системами позиционирования и их настройку находится здесь.

Проверка работы светодиодной ленты

Светодиодная лента должна быть подключена к порту GPIO 21 Raspberry Pi и иметь не более 60 светодиодов для работы с настроенным по умолчанию образом clever-show. Проверьте работу ленты, выделив нужный коптер в таблице и нажав кнопку Test leds – лента на коптере должна 2 раза мигнуть белым цветом.

Описание настройки и работы со светодиодной ленты находится в документацииclover.

Синхронизация времени

Для корректного воспроизведения анимации очень важна синхронизация времени между всеми коптерами, участвующими в анимации, и сервером. Чем точнее будет синхронизировано время, тем более согласованным будет полёт группы коптеров. В качестве инструмента синхронизации времени рекомендуется успользовать сервис chrony.

После первого подключения коптера к серверу, сервис chrony в коптере автоматически настраивается на подключение по ip адресу сервера и перезагружается. Однако на сервере сервис chrony может перестать посылать пакеты синхронизации времени при смене wifi сети и время между коптерами и сервером перестанет синхронизироваться.

Разница между временем, пришедшим с коптера, и временем сервера отображается в столбце dt в таблице сервера. Нормальный уровень разницы по времени должен быть не больше 0.1 секунды (порядка 0.01 секунды), однако может быть и больше вследствие сетевых задержек при передаче телеметрии с коптера.

Если разница по времени больше 0.1 секунды, рекомендуется перезапустить сервис chrony с помощью команды из верхнего меню сервера Selected drones -> Restart service -> chrony. Данная команда перезагружает сервис синхронизации времени на сервере (потребуется ввести пароль пользователя) и на коптерах.

События

Игровые события в формате JSON.

Сопряжение приемника и пульта

  1. Подключить провод 5В от BEC в разъем приемника.

    Установить BIND разъем в крайний правый порт B/VCC.

  2. Подключить АКБ. Индикатор на приемники должен быстро мигать (режим сброса).

  3. Зажать и удерживать кнопку BIND на пульте и включаем пульт.

    На пульте отображается процесс сопряжения RXBinding

  4. После установки сопряжения (появление допю строк на дисплее пульта):

    • Убрать BIND разъем из приемника.
    • Отключить АКБ.

Hint Если пульт не включается или заблокирован, см.
статью неисправности пульта.

Список оборудования

clever-show – это набор ПО для управления несколькими квадрокоптерами по сети. Для полноценной работы необходимо следующее оборудование:

Установка

Протестирована работа с Python 3.6.

  • Установка с помощью pip (пакетный менеджер Python):
  • Установка из исходного кода (требуется git)

Установка и запуск клиента

  • После подключения выполните скрипт настройки клиента client-setup с указанными параметрами – название точки доступа (SSID), пароль точки доступа (password), имя коптера (copter name). Коптер переключится в режим клиента указанной точки доступа и настроит автозапуск клиента clever-show на Raspberry Pi. Все три параметра не должны содержать пробелов и кавычек в названии!
  • Теперь при запуске серверного приложения настроенные коптеры будут отображаться в виде строк в таблице. Также можно подключаться к Raspberry Pi на коптере по его имени с добавкой .local через ssh в указанной при настройке wifi сети, например ssh [email protected], пароль raspberry.

Подробная документация по настройке клиентской части находится здесь.

Установка и запуск сервера

  • Установите необходимые python-пакеты с помощью команды (запущенной из директории с исходным кодом)
pip3 install -r requirements.txt
sudo systemctl restart chrony
  • Перейдите в директорию сервера из директории с исходным кодом и запустите сервер
  • Через некоторое время коптеры с настроенным образом подключатся к серверу и отобразятся в виде строк в таблице.

Подробная документация по настройке серверной части находится здесь.

Установка моторов

  1. Распаковать моторы.

  2. Закрепить мотор на луче шестигранными винтами М3х6 (самые короткие винты в комплекте с моторами).

    Шестигранный ключ в комплекте.

  3. Вставить гайки М3 (4 шт) в пластиковый держатель.

    Для удобства можно использовать длинный винт, либо плоскогубцы

  4. Закрепить луч, нижнюю защиту луча и держатель винтами М3х12, используя крестовую отвертку.

  5. Скрепить хомутом луч и нижнюю защиту луча.

    Хвост от хомута (стяжки) отрезать ножницами.

    Подготовка моторов

Sq_friend_answer

https://www.youtube.com/channel/UCqrILQNl5Ed9Dz6CGMyvMTQ

Необходимо купить их отображение за 299 клеверсов (id подарка 50)

Оцените статью
Радиокоптер.ру
Добавить комментарий