From 1f2ba656696ec7196fc80bbe24f5c6a04a6c5e59 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 19 May 2021 21:56:02 +0300 Subject: [PATCH 01/24] Minor fix --- clover/www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clover/www/index.html b/clover/www/index.html index 48715d25..f5f9214f 100644 --- a/clover/www/index.html +++ b/clover/www/index.html @@ -9,7 +9,7 @@
  • View 3D visualization (ros3djs)
  • 3D visualization for markers map (ros3djs)
  • Blocks programming (Blockly)
  • -
  • Clover console (tmp/clover.err)
  • +
  • Clover console (/tmp/clover.err)
  • From df5e83e41620a86dae2b338cf938855fcd0c9ac9 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 May 2021 18:30:47 +0300 Subject: [PATCH 02/24] led: add error/ignore parameter to ignore some errors --- clover/launch/led.launch | 2 +- clover/src/led.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clover/launch/led.launch b/clover/launch/led.launch index c7516b37..3e923897 100644 --- a/clover/launch/led.launch +++ b/clover/launch/led.launch @@ -36,7 +36,7 @@ posctl: { r: 50, g: 100, b: 220 } offboard: { r: 220, g: 20, b: 250 } low_battery: { threshold: 3.6, effect: blink_fast, r: 255, g: 0, b: 0 } - error: { effect: flash, r: 255, g: 0, b: 0 } + error: { effect: flash, r: 255, g: 0, b: 0, ignore: [ "[lpe] vision position timeout" ]} diff --git a/clover/src/led.cpp b/clover/src/led.cpp index 73ca6059..7e43f29c 100644 --- a/clover/src/led.cpp +++ b/clover/src/led.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -29,6 +30,7 @@ ros::Timer timer; ros::Time start_time; double blink_rate, blink_fast_rate, flash_delay, fade_period, wipe_period, rainbow_period; double low_battery_threshold; +std::vector error_ignore; bool blink_state; led_msgs::SetLEDs set_leds; led_msgs::LEDStateArray state, start_state; @@ -274,6 +276,10 @@ void handleMavrosState(const mavros_msgs::State& msg) void handleLog(const rosgraph_msgs::Log& log) { if (log.level >= rosgraph_msgs::Log::ERROR) { + // check if ignored + for (auto const& str : error_ignore) { + if (log.msg.find(str) != std::string::npos) return; + } notify("error"); } } @@ -302,6 +308,7 @@ int main(int argc, char **argv) nh_priv.param("rainbow_period", rainbow_period, 5.0); nh_priv.param("notify/low_battery/threshold", low_battery_threshold, 3.7); + nh_priv.param("notify/error/ignore", error_ignore, {}); ros::service::waitForService("set_leds"); // cannot work without set_leds service set_leds_srv = nh.serviceClient("set_leds", true); From 150ecbe29ddd8b3ea2c363998459b31b65735079 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 19 May 2021 23:18:14 +0300 Subject: [PATCH 03/24] =?UTF-8?q?Remove=20all=20unneeded=20static=E2=80=99?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clover/src/optical_flow.cpp | 8 ++++---- clover/src/simple_offboard.cpp | 2 +- clover/src/vpe_publisher.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/clover/src/optical_flow.cpp b/clover/src/optical_flow.cpp index b7182cd8..b1ecf418 100644 --- a/clover/src/optical_flow.cpp +++ b/clover/src/optical_flow.cpp @@ -152,7 +152,7 @@ private: cv::Point2d shift = cv::phaseCorrelate(prev_, curr_, hann_, &response); // Publish raw shift in pixels - static geometry_msgs::Vector3Stamped shift_vec; + geometry_msgs::Vector3Stamped shift_vec; shift_vec.header.stamp = msg->header.stamp; shift_vec.header.frame_id = msg->header.frame_id; shift_vec.vector.x = shift.x; @@ -179,7 +179,7 @@ private: double flow_y = atan2(points_undist[0].y, focal_length_y); // // Convert to FCU frame - static geometry_msgs::Vector3Stamped flow_camera, flow_fcu; + geometry_msgs::Vector3Stamped flow_camera, flow_fcu; flow_camera.header.frame_id = msg->header.frame_id; flow_camera.header.stamp = msg->header.stamp; flow_camera.vector.x = flow_y; // +y means counter-clockwise rotation around Y axis @@ -198,7 +198,7 @@ private: if (calc_flow_gyro_) { try { auto flow_gyro_camera = calcFlowGyro(msg->header.frame_id, prev_stamp_, msg->header.stamp); - static geometry_msgs::Vector3Stamped flow_gyro_fcu; + geometry_msgs::Vector3Stamped flow_gyro_fcu; tf_buffer_->transform(flow_gyro_camera, flow_gyro_fcu, fcu_frame_id_); flow_.integrated_xgyro = flow_gyro_fcu.vector.x; flow_.integrated_ygyro = flow_gyro_fcu.vector.y; @@ -235,7 +235,7 @@ publish_debug: } // Publish estimated angular velocity - static geometry_msgs::TwistStamped velo; + geometry_msgs::TwistStamped velo; velo.header.stamp = msg->header.stamp; velo.header.frame_id = fcu_frame_id_; velo.twist.angular.x = flow_fcu.vector.x / integration_time.toSec(); diff --git a/clover/src/simple_offboard.cpp b/clover/src/simple_offboard.cpp index bc66d511..2db0a1aa 100644 --- a/clover/src/simple_offboard.cpp +++ b/clover/src/simple_offboard.cpp @@ -712,7 +712,7 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl } if (sp_type == VELOCITY) { - static Vector3Stamped vel; + Vector3Stamped vel; vel.header.frame_id = frame_id; vel.header.stamp = stamp; vel.vector.x = vx; diff --git a/clover/src/vpe_publisher.cpp b/clover/src/vpe_publisher.cpp index 580a5f4e..0c032dcd 100644 --- a/clover/src/vpe_publisher.cpp +++ b/clover/src/vpe_publisher.cpp @@ -53,7 +53,7 @@ void publishZero(const ros::TimerEvent& e) } ROS_INFO_THROTTLE(10, "publish zero"); - static geometry_msgs::PoseStamped zero; + geometry_msgs::PoseStamped zero; zero.header.frame_id = local_frame_id; zero.header.stamp = e.current_real; zero.pose.orientation.w = 1; From faa702cab003cd2021b3bba99c7f991f1fc76c7e Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 May 2021 20:27:46 +0300 Subject: [PATCH 04/24] docs: typos --- docs/en/arduino.md | 2 +- docs/en/aruco_map.md | 2 +- docs/en/events.md | 2 +- docs/en/fpv_clover_4_2.md | 2 +- docs/en/leds_old.md | 2 +- docs/en/ssh.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/arduino.md b/docs/en/arduino.md index 4ad88994..3fde0eeb 100644 --- a/docs/en/arduino.md +++ b/docs/en/arduino.md @@ -66,7 +66,7 @@ The set of services and topics is similar to the regular set in [simple_offboard An example of a program that controls the copter by position using the `navigate` and `set_mode` services: ```cpp -// Connecting libraries for working with rosseral +// Connecting libraries for working with rosserial #include // Connecting Clover and MAVROS package message header files diff --git a/docs/en/aruco_map.md b/docs/en/aruco_map.md index a873b27e..bbd486ba 100644 --- a/docs/en/aruco_map.md +++ b/docs/en/aruco_map.md @@ -134,7 +134,7 @@ navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map') Starting with the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it is not currently visible. Like with [single-marker navigation](aruco_marker.md#working-with-detected-markers), this works by setting the frame_id parameter to aruco_ID, where ID is the desired marker number. -The folloding code will move the drone to the point 1 meter above the center of marker 5: +The following code will move the drone to the point 1 meter above the center of marker 5: ```python navigate(frame_id='aruco_5', x=0, y=0, z=1) diff --git a/docs/en/events.md b/docs/en/events.md index 220f6daa..ca42844a 100644 --- a/docs/en/events.md +++ b/docs/en/events.md @@ -1,5 +1,5 @@ # Events -Clover is being used in a lot of educational events and competitions, such as WorldSkills, NTI Olypics, Copter Hack, Innopolis Open Robotics, etc. +Clover is being used in a lot of educational events and competitions, such as WorldSkills, NTI Olympics, Copter Hack, Innopolis Open Robotics, etc. This section contains articles written specifically for a particular event. diff --git a/docs/en/fpv_clover_4_2.md b/docs/en/fpv_clover_4_2.md index 339397e9..df9ad867 100644 --- a/docs/en/fpv_clover_4_2.md +++ b/docs/en/fpv_clover_4_2.md @@ -34,7 +34,7 @@ - > **Hint** Сheck what you are wearing shrink tubes before soldering the wires. + > **Hint** Check what you are wearing shrink tubes before soldering the wires. 6. Solder the JST male connector to the transmitter. diff --git a/docs/en/leds_old.md b/docs/en/leds_old.md index b163cc74..0564b7c8 100644 --- a/docs/en/leds_old.md +++ b/docs/en/leds_old.md @@ -98,7 +98,7 @@ Main strip control methods: + `numPixels()` returns the number of pixels in the strip. Convenient for whole strip operations. + `setPixelColor(pos, color)` sets the pixel color at `pos` to `color`. Color should be a 24-bit value, where the first 8 bits are for the red channel, the next 8 bits are for the green channel, and the last 8 bits are for the blue channel. You may use the `Color(red, green, blue)` convenience function to convert colors to this format. Each color value should be an integer in the \[0..255\] range, where 0 means zero brightness and 255 means full brightness. -+ `SetPixelColorRGB(pos, red, green, blue)` sets the pixel at `pos` to the color value with components `red`, `green` and `blue`. Each component value shoule be an integer in the \[0..255\] range, where 0 means zero brighness and 255 means full brightness. ++ `SetPixelColorRGB(pos, red, green, blue)` sets the pixel at `pos` to the color value with components `red`, `green` and `blue`. Each component value should be an integer in the \[0..255\] range, where 0 means zero brightness and 255 means full brightness. + `show()` updates the strip state. Any changes to the strip state are only pushed to the actual strip after calling this method. ## Does it have to be this way? diff --git a/docs/en/ssh.md b/docs/en/ssh.md index dcbd8ba9..2e4dd5ec 100644 --- a/docs/en/ssh.md +++ b/docs/en/ssh.md @@ -15,7 +15,7 @@ Password: `raspberry`. For SSH access from Windows, you may use [PuTTY] (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html). -You can also gain SSH access from your smart-phone using the [Termius] app (https://www.termius.com). +You can also gain SSH access from your smart-phone using the [Termius](https://www.termius.com) app. Read more: https://www.raspberrypi.org/documentation/remote-access/ssh/README.md From 2693fd4aced4c6c040a43704e46a656834ea4517 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 May 2021 20:46:48 +0300 Subject: [PATCH 05/24] docs: typos --- docs/ru/4in1.md | 6 +++--- docs/ru/arduino.md | 2 +- docs/ru/arucogenmap.md | 2 +- docs/ru/assemble_2.md | 2 +- docs/ru/assemble_4.md | 4 ++-- docs/ru/bigchallenges.md | 6 +++--- docs/ru/blocks.md | 2 +- docs/ru/camera_calib.md | 4 ++-- docs/ru/clever-show.md | 2 +- docs/ru/coex_pix.md | 2 +- docs/ru/flight.md | 2 +- docs/ru/flight_exercises.md | 10 +++++----- docs/ru/glossary.md | 6 +++--- docs/ru/ir_sensors.md | 2 +- docs/ru/mavlink.md | 6 +++--- docs/ru/mavros.md | 4 ++-- docs/ru/models.md | 2 +- docs/ru/pid_tuning.md | 12 ++++++------ docs/ru/px4_parameters.md | 2 +- docs/ru/simple_offboard.md | 2 +- docs/ru/uart.md | 2 +- 21 files changed, 41 insertions(+), 41 deletions(-) diff --git a/docs/ru/4in1.md b/docs/ru/4in1.md index a0cb89ab..8d52fa20 100644 --- a/docs/ru/4in1.md +++ b/docs/ru/4in1.md @@ -1,6 +1,6 @@ # Подключение регуляторов 4in1 -## Распиновка платы реуляторов 4in1 +## Распиновка платы регуляторов 4in1 Одним цветом выделены соответствующие фазные провода (рис. 1a) и управляющий ими сигнал (рис. 1b). @@ -10,7 +10,7 @@ На рис. 2a указана распиновка гребенки: -* **SIGNAL** – подключение регуляторов. Каждый пин имет свой собственный сигнал. На 5 и 6 сигнал можно получать ШИМ сигнал (Например, можно подключить сервопривод). +* **SIGNAL** – подключение регуляторов. Каждый пин имеет свой собственный сигнал. На 5 и 6 сигнал можно получать ШИМ сигнал (Например, можно подключить сервопривод). * **GND** – земля полетного контроллера. Единая шина на всех пинах GND (отмечены черным). * 1, 2, 3, 4 – порты для подключения ESC. * 1, 2 - порты расширения выходного ШИМ сигнала (настраиваются в QGroundControl, также могут использоваться для управления гексакоптером). @@ -23,7 +23,7 @@ ## Иллюстрация подключения, исходя из текущей ориентации платы регуляторов 4in1 -Используя рис. 1a, 1b, 2a, 2b необходимо сопоставить каждому мотору свой сигнал управления и подключить в соотвествии с порядком нумерации моторов Pixracer. +Используя рис. 1a, 1b, 2a, 2b необходимо сопоставить каждому мотору свой сигнал управления и подключить в соответствии с порядком нумерации моторов Pixracer. Например, мотор М3, вращающийся против часовой стрелки (верхний левый угол) управляется сигналом S4 (зеленый провод). Подключается в порт 3. diff --git a/docs/ru/arduino.md b/docs/ru/arduino.md index f32d9de8..db77f980 100644 --- a/docs/ru/arduino.md +++ b/docs/ru/arduino.md @@ -76,7 +76,7 @@ for(int i=0; i<8; i++) { Пример программы, контролирующей коптер по позиции, с использованием сервисов `navigate` и `set_mode`: ```cpp -// Подключение библиотек для работы с rosseral +// Подключение библиотек для работы с rosserial #include // Подключение заголовочных файлов сообщений пакета clover и MAVROS diff --git a/docs/ru/arucogenmap.md b/docs/ru/arucogenmap.md index 27815142..2510e150 100644 --- a/docs/ru/arucogenmap.md +++ b/docs/ru/arucogenmap.md @@ -6,7 +6,7 @@ ## Создание поля -
    Перед началом работы надо задать размеры поля. Оно нужно только для удобства. Для перемения по "полотну" испольнуйте тачпад или колёсико мыши для перемещения по карте. При использовании мыши зажмите Shift для перемещения в горизонтальном направлении и Ctrl для увеличения/уменьшения поля.
    +
    Перед началом работы надо задать размеры поля. Оно нужно только для удобства. Для перемещения по "полотну" используйте тачпад или колёсико мыши для перемещения по карте. При использовании мыши зажмите Shift для перемещения в горизонтальном направлении и Ctrl для увеличения/уменьшения поля.
    ## Инструмент творения diff --git a/docs/ru/assemble_2.md b/docs/ru/assemble_2.md index 5fde2536..cec14e01 100644 --- a/docs/ru/assemble_2.md +++ b/docs/ru/assemble_2.md @@ -204,7 +204,7 @@ ![Постпаячная проверка](../assets/zapPDBtest.jpg) -Чтобы припой аккуратно заполнил всю площадку, необходимо её прогреть. Для этого нужно удерживать жало паяльника на контактной плащадке в течение 2 сек (или больше, если потребуется) +Чтобы припой аккуратно заполнил всю площадку, необходимо её прогреть. Для этого нужно удерживать жало паяльника на контактной площадке в течение 2 сек (или больше, если потребуется) #### Пайка силового разъема питания XT60 diff --git a/docs/ru/assemble_4.md b/docs/ru/assemble_4.md index 4e099d76..8025f56d 100644 --- a/docs/ru/assemble_4.md +++ b/docs/ru/assemble_4.md @@ -393,7 +393,7 @@ Установите 4 пропеллера, согласно [схеме вращения](#проверка-направления-вращения-моторов). При установке пропеллеров АКБ должна быть отключена. -При установке будте внимательны, чтобы пропеллер не был перевернут. На лицевой стороне пропеллера имеется маркировка его характеристик, а также направление вращения, которое должно совпадать с направлением вращения моторов. +При установке будьте внимательны, чтобы пропеллер не был перевернут. На лицевой стороне пропеллера имеется маркировка его характеристик, а также направление вращения, которое должно совпадать с направлением вращения моторов.
    @@ -413,7 +413,7 @@ -Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте конпку расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](glossary.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. +Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте кнопку расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](glossary.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. > **Info** Звуковая индикация означает, что ваш аккумулятор разряжен и его нужно зарядить. diff --git a/docs/ru/bigchallenges.md b/docs/ru/bigchallenges.md index edcfecdc..207bad7a 100644 --- a/docs/ru/bigchallenges.md +++ b/docs/ru/bigchallenges.md @@ -47,7 +47,7 @@ git clone https://github.com/Tennessium/HUEX Перед началом работы с системой необходимо перевести коптеры в режим клиента и подключить к сети WiFi. Вы можете воспользоваться [этим мануалом](network.md#переключение-адаптера-в-режим-клиента) -Однако, для упрощения развертывания системы на нескольких коптреах, рекомендуется использование нашего скрипта, лежащего в папке *copter/setup/* +Однако, для упрощения развертывания системы на нескольких коптерах, рекомендуется использование нашего скрипта, лежащего в папке *copter/setup/* - Перейдите в папку @@ -91,7 +91,7 @@ pip install -r requirements.txt В файле *copter/consts.py* укажите IP-адрес сервера. -Для запуска основного скрипта воспользуйтсь нашим systemd-сервисом. +Для запуска основного скрипта воспользуйтесь нашим systemd-сервисом. ```bash sudo systemctl enable /home/pi/HUEX/clever/setup/taxi.service @@ -108,7 +108,7 @@ sudo systemctl stop taxi.service ## Веб-интерфейс центра управления полётами -В данном веб интерфейсе можно следить за полётами всех дронов на карте (масштабировать с помощью колёсика, передвигаять с помощью Alt). При нажатии на лебедя в правом верхнем углу все коптеры аварийно садятся, А при нажатии на значок "обновить" все коптеры автоматически удаляются, что приводит к удалению всех комманд и посадке активных на текущий момент коптеров. +В данном веб интерфейсе можно следить за полётами всех дронов на карте (масштабировать с помощью колёсика, передвигать с помощью Alt). При нажатии на лебедя в правом верхнем углу все коптеры аварийно садятся, А при нажатии на значок "обновить" все коптеры автоматически удаляются, что приводит к удалению всех команд и посадке активных на текущий момент коптеров. С помощью инструментов в правом нижнем углу можно строить новые основания и рёбра. ## Веб-интерфейс заказа diff --git a/docs/ru/blocks.md b/docs/ru/blocks.md index ad8ac4b9..1b899365 100644 --- a/docs/ru/blocks.md +++ b/docs/ru/blocks.md @@ -69,7 +69,7 @@ * *body* – координаты относительно коптера: вперед (*forward*), влево (*left*), вверх (*up*). * *markers map* – система координат, связанная с [картой ArUco-маркеров](aruco_map.md). -* *marker* – система координта, связанная с [ArUco-маркером](aruco_marker.md); появляется поле для ввода ID маркеа. +* *marker* – система координат, связанная с [ArUco-маркером](aruco_marker.md); появляется поле для ввода ID маркеа. * *last navigate target* – координаты относительно последней заданной точки для навигации. * *map* – локальная система координат коптера, связана с местом его инициализации. diff --git a/docs/ru/camera_calib.md b/docs/ru/camera_calib.md index c121d30d..b8c61a88 100644 --- a/docs/ru/camera_calib.md +++ b/docs/ru/camera_calib.md @@ -66,7 +66,7 @@ sudo python setup.py install ![asd](../assets/cam_calib3.png) -Если перекрестия были распознаныы правильно, нажмите на клавишу ***Add***, и перейдите к получению новых фотографий. В противном же случае, если перекрестия были распознаны некорректно, пропустите данную фотографию при помощи клавиши ***Skip***. +Если перекрестия были распознаны правильно, нажмите на клавишу ***Add***, и перейдите к получению новых фотографий. В противном же случае, если перекрестия были распознаны некорректно, пропустите данную фотографию при помощи клавиши ***Skip***. >В большинстве случаев найденные углы будут подсвечиваться разными цветами, но иногда подсветка будет становиться красной. это происходит в том случае, если углы распознаны, но неточно. @@ -183,7 +183,7 @@ Path: # Путь до папки с изображениями ![asd](../assets/img2.jpg) -Иcправленные изображения: +Исправленные изображения: ![asd](../assets/calibresult.jpg) diff --git a/docs/ru/clever-show.md b/docs/ru/clever-show.md index cebd00a7..5f235935 100644 --- a/docs/ru/clever-show.md +++ b/docs/ru/clever-show.md @@ -1,6 +1,6 @@ # clever-show -Програмное обеспечение для запуска шоу дронов под управлением Raspberry Pi с пакетом COEX [Clover](https://github.com/CopterExpress/clever) и полётного контроллера с прошивкой PX4. +Программное обеспечение для запуска шоу дронов под управлением Raspberry Pi с пакетом COEX [Clover](https://github.com/CopterExpress/clever) и полётного контроллера с прошивкой PX4. Создайте анимацию в Blender, сконвертируйте её в полётные пути дронов, настройте дроны и запустите своё собственное шоу дронов! diff --git a/docs/ru/coex_pix.md b/docs/ru/coex_pix.md index 4e7d667b..1b2318a7 100644 --- a/docs/ru/coex_pix.md +++ b/docs/ru/coex_pix.md @@ -29,7 +29,7 @@ * *I2C* (JST-GH 4 pin) – разъем для подключения поддерживаемых I2C устройств. * *PWR* (JST-GH 6 pin) – разъем для подключения питания с платы COEX PDB или аналогичной, датчиков напряжения и тока. * *RC IN* (JST-GH 4 pin) – разъем для подключения радиоприемника аппаратуры радиоуправления, канала для * снятия показаний RSSI. Поддерживаемые RC протоколы – PPM и SBUS. -* Разьем Micro USB – для подключения к ПК для настройки и коммуникации по протоколу USB 2.0/1.1 +* Разъем Micro USB – для подключения к ПК для настройки и коммуникации по протоколу USB 2.0/1.1 * Слот для карты памяти MicroSD, до 32 ГБ. * Серворазъемы – для подключения контроллеров моторов и других устройств. diff --git a/docs/ru/flight.md b/docs/ru/flight.md index 5f99bd98..d3ec42d5 100644 --- a/docs/ru/flight.md +++ b/docs/ru/flight.md @@ -82,7 +82,7 @@ Прежде чем начинать полет, необходимо перевести коптер в состояние *Armed*. -* Состояние *Armed* – моторы вращаются в соответсвии с положением стика газа, коптер готов к полету. +* Состояние *Armed* – моторы вращаются в соответствии с положением стика газа, коптер готов к полету. * Состояние *Disarmed* – моторы не вращаются, коптер не реагирует на стик газа. По умолчанию коптер находится в состоянии *Disarmed* и переходит в него в случае если вы долго не взлетаете. diff --git a/docs/ru/flight_exercises.md b/docs/ru/flight_exercises.md index 256b8c21..786a5bd4 100644 --- a/docs/ru/flight_exercises.md +++ b/docs/ru/flight_exercises.md @@ -89,7 +89,7 @@ ## Воздушная подушка и управление в ней -Понятие *воздушной подушки* очень важно во всей летательной технике. Сама по себе воздушная подушка является зоной повышенного давления, возникающая за счет воздуха пропускаемого через пропеллеры. Данная область харрактеризуется турбелентностями и воздушными потоками влияющими на полет коптера. +Понятие *воздушной подушки* очень важно во всей летательной технике. Сама по себе воздушная подушка является зоной повышенного давления, возникающая за счет воздуха пропускаемого через пропеллеры. Данная область характеризуется турбулентностями и воздушными потоками влияющими на полет коптера. Пилоты стараются избегать полетов в воздушной подушке, но на ее границе имеется стабильная область, в которой коптер может зависнуть при минимальном значении газа. В таком случае создается ощущение, что коптер "сел" на воздушную подушку. @@ -103,9 +103,9 @@ Аналогично с предыдущими упражнениями перед взлетом выполните [следующие действия](#предполетные-проверки). -**Упражнение №1**. Поднимайте стик газа, пока коптер не пролетит воздушную подушку и не окажется над ней (высота от пола ~25-30 см, для коптера Клевер 4). Коптер не должен подниматься вверх или проваливаться вниз, высота полета должа стабилизироваться. Как и в предыдущем упражнении корректируйте позицию коптера по осям X, Y с помощью стика крена и тангажа. В результате коптер должен зависнуть в одной точке с небольшими покачиваниями по сторонам. Удерживайте коптер 30-40 секунд. +**Упражнение №1**. Поднимайте стик газа, пока коптер не пролетит воздушную подушку и не окажется над ней (высота от пола ~25-30 см, для коптера Клевер 4). Коптер не должен подниматься вверх или проваливаться вниз, высота полета должна стабилизироваться. Как и в предыдущем упражнении корректируйте позицию коптера по осям X, Y с помощью стика крена и тангажа. В результате коптер должен зависнуть в одной точке с небольшими покачиваниями по сторонам. Удерживайте коптер 30-40 секунд. -**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Далее пролетите по квадрату со стороной 1 м сначала по часовой стрелке, потом против часовой стрели. Повторите траекторию в каждую сторону 2-3 раза. +**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Далее пролетите по квадрату со стороной 1 м сначала по часовой стрелке, потом против часовой стрелки. Повторите траекторию в каждую сторону 2-3 раза. **Упражнение №3**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Попробуйте описать коптером круг с диаметром 1 м, по часовой и против часовой стрелки. Повторите траекторию в каждую сторону 2-3 раза. @@ -126,7 +126,7 @@ **Упражнение №1**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Описывайте коптером круг вокруг себя, на расстоянии 2-3 м, при этом поворачивая его таким образом, чтобы задняя часть коптера всегда была направлен на вас. Выполняйте упражнение по часовой стрелке и против. Повторите упражнение 4-5 раз. -**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Обойдите коптер вокруг, при этом поворачивая его таким образом, чтобы задяя часть была направлена на вас. Обходите коптер по часовой стрелке и против. Повторите упражнение 4-5 раз. +**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Обойдите коптер вокруг, при этом поворачивая его таким образом, чтобы задняя часть была направлена на вас. Обходите коптер по часовой стрелке и против. Повторите упражнение 4-5 раз. > **Caution** Дополнительные упражнения значительно сложнее обычных и не обязательны к выполнению. Приступайте к ним, только если вы уже уверенно управляете коптером. @@ -136,7 +136,7 @@ ## Свободный полет -Если вы можете выполнить каждое из описанных выше упражнений, скорее всего, вы уже умеете свободно взлетать и управлять коптером. Далее будут представленны некоторые упражнения для закрепления полученных навыков. +Если вы можете выполнить каждое из описанных выше упражнений, скорее всего, вы уже умеете свободно взлетать и управлять коптером. Далее будут представлены некоторые упражнения для закрепления полученных навыков. Упражнения: diff --git a/docs/ru/glossary.md b/docs/ru/glossary.md index bf1ba6a8..e266df0f 100644 --- a/docs/ru/glossary.md +++ b/docs/ru/glossary.md @@ -39,7 +39,7 @@ ESC имеет прошивку, которая определяет особе ## Ячейка / "банка" АКБ -Составная часть АКБ, непосредственный источник тока. Обычно АКБ для БПЛА состоят из нескольких (2–6) ячеек, соединенных последовательно. Максимальное напряжение одной Li-po ячейки – 4.2 В; общее напряжение АКБ равно суммарному напряжению ячеек. Количество ячеек обозночается буквой *S*, например: *2S*, *3S*, *4S*. +Составная часть АКБ, непосредственный источник тока. Обычно АКБ для БПЛА состоят из нескольких (2–6) ячеек, соединенных последовательно. Максимальное напряжение одной Li-po ячейки – 4.2 В; общее напряжение АКБ равно суммарному напряжению ячеек. Количество ячеек обозначается буквой *S*, например: *2S*, *3S*, *4S*. В Клевере обычно применяются аккумуляторы *3S*. @@ -55,7 +55,7 @@ ESC имеет прошивку, которая определяет особе **2\.** Совокупность данных о состоянии аппарата, так таковая (высота, ориентация, глобальные координаты и т. д.). -**3\.** Система для передачи данных о состоянии аппарата или команд для него по воздуху. Примеры: радиомодемы (RFD900, 3DR Radio Modem), Wi-Fi модули (ESP-07). Raspberry Pi на Клевере также может быть использован в качестве модуля для телемерии: [использование QGroundControl через Wi-Fi](gcs_bridge.md). +**3\.** Система для передачи данных о состоянии аппарата или команд для него по воздуху. Примеры: радиомодемы (RFD900, 3DR Radio Modem), Wi-Fi модули (ESP-07). Raspberry Pi на Клевере также может быть использован в качестве модуля для телеметрии: [использование QGroundControl через Wi-Fi](gcs_bridge.md). ## Арминг @@ -73,7 +73,7 @@ Armed – состояние коптера готовности к полету ## Образ SD-карты -Полная копия содержимого SD-карты, представленная в виде файла. Такой файл можно зазгрузить на SD-карту, воспользовавшись специальной утилитой, например Etcher. SD-карта, вставленная в Raspberry Pi является единственным его долговременным хранилищем и полностью определяет, что он будет делать. +Полная копия содержимого SD-карты, представленная в виде файла. Такой файл можно загрузить на SD-карту, воспользовавшись специальной утилитой, например Etcher. SD-карта, вставленная в Raspberry Pi является единственным его долговременным хранилищем и полностью определяет, что он будет делать. Конструктор Клевер включает в себя [рекомендованный образ для SD-карты](image.md). diff --git a/docs/ru/ir_sensors.md b/docs/ru/ir_sensors.md index 6b9e02f9..6b0029bc 100644 --- a/docs/ru/ir_sensors.md +++ b/docs/ru/ir_sensors.md @@ -203,7 +203,7 @@ lirc.deinit() IR transmitter scheme -> **Hint** В случае, если вы используете готовую плату ИК-передатчика, подключите ее к нужным пинам Raspberry в соответсвии с маркировкой пинов, точно так же как и с приемником. +> **Hint** В случае, если вы используете готовую плату ИК-передатчика, подключите ее к нужным пинам Raspberry в соответствии с маркировкой пинов, точно так же как и с приемником. Если все правильно подключено, то можно отправлять сигналы заданные на моменте [настройки пульта](#remote_control), используя команду: diff --git a/docs/ru/mavlink.md b/docs/ru/mavlink.md index c536a370..83df2378 100644 --- a/docs/ru/mavlink.md +++ b/docs/ru/mavlink.md @@ -2,7 +2,7 @@ Основная документация: https://mavlink.io/en/. -MAVLink – это протокол для организации связи между автономными летательными и транспортными системами (дронами, самолетами, автомобилями). Проктол MAVLink лежит в основе взаимодействия между Pixhawk и Raspberry Pi. +MAVLink – это протокол для организации связи между автономными летательными и транспортными системами (дронами, самолетами, автомобилями). Протокол MAVLink лежит в основе взаимодействия между Pixhawk и Raspberry Pi. В Клевер включено 2 обертки над этим протоколом: [MAVROS](mavros.md) и [simple_offboard](simple_offboard.md). @@ -33,7 +33,7 @@ MAVLink-сообщение это отдельная "порция" данных ### Система, компонент системы -Каждое устройство (дрон, базовая станция и т. д.) имеет ID в сети MAVLink. В PX4 MAVLink ID менятся с помощью параметра `MAV_SYS_ID`. Каждое MAVLink сообщение содержит поле с ID системы-отправителя. Кроме того, некоторые сообщения (например, `COMMAND_LONG`) содержат также ID системы-получателя. +Каждое устройство (дрон, базовая станция и т. д.) имеет ID в сети MAVLink. В PX4 MAVLink ID меняется с помощью параметра `MAV_SYS_ID`. Каждое MAVLink сообщение содержит поле с ID системы-отправителя. Кроме того, некоторые сообщения (например, `COMMAND_LONG`) содержат также ID системы-получателя. Помимо ID систем, сообщения могут содержать ID компонента-отправителя и компонента-получателя. Примеры компонентов системы: полетный контроллер, внешняя камера, управляющий бортовой компьютер (Raspberry Pi в случае Клевера) и т. д. @@ -171,7 +171,7 @@ MAVLink-сообщение это отдельная "порция" данных signature 13 байт Сигнатура (опционально) - Позволяет убедиться, что пакет не был скомпроментирован. + Позволяет убедиться, что пакет не был скомпрометирован. Обычно не используется. diff --git a/docs/ru/mavros.md b/docs/ru/mavros.md index 384de414..3b53656c 100644 --- a/docs/ru/mavros.md +++ b/docs/ru/mavros.md @@ -48,8 +48,8 @@ MAVROS подписывается на определенные ROS-топики ### Топики для посылки raw-пакетов -`/mavros/setpoint_raw/local` — отправка пакета [SET\_POSITION\_TARGET\_LOCAL\_NED](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED). Позволяет установить целевую позицию/целевую скорость и целевое рысканье/угловую скорость по рысканью. Выбор устанавливаемых величин осуществляется с помощью поля `type_mask`. +`/mavros/setpoint_raw/local` — отправка пакета [SET\_POSITION\_TARGET\_LOCAL\_NED](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED). Позволяет установить целевую позицию /целевую скорость и целевое рысканье/угловую скорость по рысканью. Выбор устанавливаемых величин осуществляется с помощью поля `type_mask`. -`/mavros/setpoint_raw/attitude` — отправка пакета [SET\_ATTITUDE\_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET). Позвлояет установить целевую ориенатацию /угловые скорости и уровень газа. Выбор устанавливаемых величин осуществляется с помощью поля `type_mask` +`/mavros/setpoint_raw/attitude` — отправка пакета [SET\_ATTITUDE\_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET). Позволяет установить целевую ориентацию / угловые скорости и уровень газа. Выбор устанавливаемых величин осуществляется с помощью поля `type_mask` `/mavros/setpoint_raw/global` — отправка пакета [SET\_POSITION\_TARGET\_GLOBAL\_INT](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_GLOBAL_INT). Позволяет установить целевую позицию в глобальных координатах \(ширина, долгота, высота\), а также скорости полета. **Не поддерживается в PX4** \([issue](https://github.com/PX4/Firmware/issues/7552)\). diff --git a/docs/ru/models.md b/docs/ru/models.md index ddb5fb37..46ab503e 100644 --- a/docs/ru/models.md +++ b/docs/ru/models.md @@ -32,7 +32,7 @@ Дека захвата.
    - Функция: Дека для установки захватов и внешней переферии(камера, дальномер).
    + Функция: Дека для установки захватов и внешней периферии (камера, дальномер).
    Материал: Монолитный поликарбонат 2мм.
    Количество: 1 шт. diff --git a/docs/ru/pid_tuning.md b/docs/ru/pid_tuning.md index e46ac6e6..f07c110f 100644 --- a/docs/ru/pid_tuning.md +++ b/docs/ru/pid_tuning.md @@ -35,7 +35,7 @@ Регулятор угловых угловых скоростей можно настраивать как в режиме ACRO, так и в режиме STABILIZED. -Предпочтительнее настраивать регуляторы в режиме ACRO, поскольку вам будет легче визуально заметить произведенные изменения коэффициентов. Если вы собираетесь использовать этот режим отключите Expo-параметры и снизте чувствительность стиков для облегчения управления. +Предпочтительнее настраивать регуляторы в режиме ACRO, поскольку вам будет легче визуально заметить произведенные изменения коэффициентов. Если вы собираетесь использовать этот режим отключите Expo-параметры и снизьте чувствительность стиков для облегчения управления. * `MC_ACRO_EXPO` = 0, `MC_ACRO_EXPO_Y` = 0, `MC_ACRO_SUPEXPO` = 0, `MC_ACRO_SUPEXPOY` = 0 * `MC_ACRO_P_MAX` = 200, `MC_ACRO_R_MAX` = 200 @@ -45,7 +45,7 @@ Если ваш аппарат вообще не летает обратите внимание на две основные вещи: -* Если вы видите сильные осцилляции при попытке взлета, уменьшайте все кэоффициенты *P* и *D* до тех пор, пока аппарат не поднимется в воздух. +* Если вы видите сильные осцилляции при попытке взлета, уменьшайте все коэффициенты *P* и *D* до тех пор, пока аппарат не поднимется в воздух. * С другой стороны, если аппарат почти не реагирует на управление передаваемое с пульта, увеличивайте коэффициент *P*. Концепция настройки регуляторов одинакова как в режиме STABILIZED, так и в режиме ACRO. Итеративно с указанным шагом настраиваете коэффициенты *P* и *D* для крена и тангажа, а затем изменяете *I*. Первоначально вы можете использовать одинаковые значения для крена, когда регуляторы настроены достаточно хорошо вы можете точно донастроить их по крену и тангажу отдельно (если ваш аппарат симметричен, можете оставить коэффициенты одинаковыми). Идея настройки регулятора рыскания идентична настройке крена и тангажа, за исключением того, что коэффициент *D* может оставаться нулевым. @@ -83,9 +83,9 @@ После изменения коэффициентов регулятора, для того, чтобы протестировать новые значения, подайте на вход аппарата быстрый ступенчатый ввод. Для этого быстро наклоните стик радиоаппаратуры в сторону, при этом коптер точно должен выполнять переданное управление, без осцилляций и "перестреливания". Поскольку обычно стики радиоаппаратуры подпружинены, в случае если их отпустить, они начинают колебаться, хорошо настроенный аппарат будет колебаться вместе со стиком. -## Конфигурация логера +## Конфигурация логгера -Для получения более полной информации с графиков вы можете настроить логер удобным вам образом. Для его настройки вы можете пользоваться параметрами: +Для получения более полной информации с графиков вы можете настроить логгер удобным вам образом. Для его настройки вы можете пользоваться параметрами: * `SDLOG_PROFILE` - включение большого количества функций приводит к увеличению размера файла лога, а также к увеличению требований по скорости записи, перед начало работой убедитесь, что используете накопитель с достаточной пропускной способностью. 1. default set - запись общих логов системы @@ -94,7 +94,7 @@ 4. system identification - высокочастотные данные приводов и IMU 5. high rate - высокочастотные данные радио, угловых скоростей и приводов 6. debug - для записи пользовательских отладочных топиков - 7. sensor comparison - низкочастотные данные IMU, барометра и компаса, для сравнения покозаний датчиков + 7. sensor comparison - низкочастотные данные IMU, барометра и компаса, для сравнения показаний датчиков * SDLOG_MODE 1. when armed until disarm - лог записывается с момента арма коптера, до момента дизарма коптера 2. from boot until disarm - лог записывается с момента запуска системы, до момента дизарма коптера @@ -121,7 +121,7 @@ На графиках красной линией отмечено рассчитанное значение, а зеленой требуемое. -Качество настройки характеризуется тем, что расчитаное значение должно быть максимально близким к требуемому. Если оба графика совпадают, это значит, что ваш коптер точно выполняет все переданные ему команды, если же графики сильно отличаются, во время полета вы заметите, что коптер неправильно выполняет ваши команды управления. +Качество настройки характеризуется тем, что рассчитанное значение должно быть максимально близким к требуемому. Если оба графика совпадают, это значит, что ваш коптер точно выполняет все переданные ему команды, если же графики сильно отличаются, во время полета вы заметите, что коптер неправильно выполняет ваши команды управления. ## Регулятор положения diff --git a/docs/ru/px4_parameters.md b/docs/ru/px4_parameters.md index 27631823..f5a678ed 100644 --- a/docs/ru/px4_parameters.md +++ b/docs/ru/px4_parameters.md @@ -37,7 +37,7 @@ * 2 – дальномер (например, vl53l1x). * 3 – данные с VPE. -Вариант 2 является наиболее точным, но его корректно использовать, только если поверхность, над которой летает котер – плоская. В противном случае начало координат по Z будет двигаться вверх и вниз с изменением высоты поверхности. +Вариант 2 является наиболее точным, но его корректно использовать, только если поверхность, над которой летает коптер – плоская. В противном случае начало координат по Z будет двигаться вверх и вниз с изменением высоты поверхности. ## Multicopter Position Control (полет по позиции) diff --git a/docs/ru/simple_offboard.md b/docs/ru/simple_offboard.md index ec76f443..b8a07478 100644 --- a/docs/ru/simple_offboard.md +++ b/docs/ru/simple_offboard.md @@ -276,7 +276,7 @@ set_velocity(vx=0.4, vy=0.0, vz=0, yaw=float('nan'), yaw_rate=0.4, frame_id='bod ### set_attitude -Установить тангаж, крен, рысканье и уровень газа (примерный аналог управления в [режиме `STABILIZED`](modes.md)). Данный сервис может быть использован для более низкоуровнего контроля поведения коптера либо для управления коптером при отсутствии источника достоверных данных о его позиции. +Установить тангаж, крен, рысканье и уровень газа (примерный аналог управления в [режиме `STABILIZED`](modes.md)). Данный сервис может быть использован для более низкоуровневого контроля поведения коптера либо для управления коптером при отсутствии источника достоверных данных о его позиции. Параметры: diff --git a/docs/ru/uart.md b/docs/ru/uart.md index 8c2b776c..2e873b71 100644 --- a/docs/ru/uart.md +++ b/docs/ru/uart.md @@ -14,7 +14,7 @@ UART – последовательный асинхронный интерфе В Linux есть понятие Posix Terminal Interface (подробнее [здесь](https://ru.wikipedia.org/wiki/TTY-абстракция)). Это некоторая абстракция над последовательным или виртуальным интерфейсом, позволяющая работать с устройством нескольким агентам одновременно. -В качестве примера такой абстрации в Raspbian можно привести `/dev/tty1` – устройство вывода текста на экран подключенный по HDMI. +В качестве примера такой абстракции в Raspbian можно привести `/dev/tty1` – устройство вывода текста на экран подключенный по HDMI. ## UART на Raspberry Pi 3 From 47060db84bd122479516a15b366b0657f75d2584 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 May 2021 20:59:50 +0300 Subject: [PATCH 06/24] travis: disable native kinetic build --- .travis.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index aa326366..b69b6ee2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,14 +52,14 @@ jobs: tags: true draft: true name: ${TRAVIS_TAG} - - stage: Build - name: "Native Kinetic build" - env: - - NATIVE_DOCKER=ros:kinetic-ros-base - before_script: - - docker pull ${NATIVE_DOCKER} - script: - - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh + # - stage: Build + # name: "Native Kinetic build" + # env: + # - NATIVE_DOCKER=ros:kinetic-ros-base + # before_script: + # - docker pull ${NATIVE_DOCKER} + # script: + # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - stage: Build name: "Native Melodic build" env: From 047a965f9f0c42700ac782301b851a0ac30b2e2f Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Mon, 24 May 2021 16:31:29 +0300 Subject: [PATCH 07/24] CI: move Melodic build and editorconfig-lint to GitHub Actions (#331) * Create main.yml * Update main.yml * Disable native Melodic build in Travis * Run editorconfig-lint in Actions * Let wget be less verbose * Test * Test ok * Disable editorconfig-lint in Travis --- .github/workflows/main.yml | 42 ++++++++++++++++++++++++++++++++++++++ .travis.yml | 24 ++++++++-------------- 2 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..10a05402 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,42 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + pull_request: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a set of commands using the runners shell + - name: Native Melodic build + env: + NATIVE_DOCKER: ros:melodic-ros-base + run: | + docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh + editorconfig: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: .editorconfig Linter + run: | + wget --no-verbose https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64 + chmod +x ec-linux-amd64 + ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" diff --git a/.travis.yml b/.travis.yml index b69b6ee2..32b8f201 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,14 +60,14 @@ jobs: # - docker pull ${NATIVE_DOCKER} # script: # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - - stage: Build - name: "Native Melodic build" - env: - - NATIVE_DOCKER=ros:melodic-ros-base - before_script: - - docker pull ${NATIVE_DOCKER} - script: - - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh + # - stage: Build + # name: "Native Melodic build" + # env: + # - NATIVE_DOCKER=ros:melodic-ros-base + # before_script: + # - docker pull ${NATIVE_DOCKER} + # script: + # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - stage: Build name: "Documentation" language: node_js @@ -107,14 +107,6 @@ jobs: verbose: true on: branch: master - - stage: Build - name: Editorconfig-lint - language: generic - before_script: - - wget https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64 - - chmod +x ec-linux-amd64 - script: - - ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" stages: - Build # More info there From 781b8962be23927951cb8d65120d7ea4670e69cd Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 26 May 2021 23:43:52 +0300 Subject: [PATCH 08/24] CI: add Docker authentication on image build --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 32b8f201..33226424 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,9 @@ jobs: directories: - imgcache before_script: + - if [ -z "$DOCKER_USERNAME" ] + echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + fi - docker pull ${DOCKER} # Check if there are any cached images, copy them to our "images" directory - if [ -n "$(ls -A imgcache/*.zip)" ]; then mkdir -p images && cp imgcache/*.zip images; fi From 855d13e2101a97f68b8536661e30326ceb4c050a Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 26 May 2021 23:46:09 +0300 Subject: [PATCH 09/24] CI: fix Bash syntax --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 33226424..017b6acf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,8 +20,8 @@ jobs: directories: - imgcache before_script: - - if [ -z "$DOCKER_USERNAME" ] - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - if [ -z "$DOCKER_USERNAME" ]; then + echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - docker pull ${DOCKER} # Check if there are any cached images, copy them to our "images" directory From 7eb139fd22b6836cfa609194cbfb1446cb2a3fa5 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 26 May 2021 23:56:41 +0300 Subject: [PATCH 10/24] CI: fix authentication in Docker --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 017b6acf..d80d05c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ jobs: directories: - imgcache before_script: - - if [ -z "$DOCKER_USERNAME" ]; then + - if [ ! -z "$DOCKER_USERNAME" ]; then echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - docker pull ${DOCKER} From fad78860121ce7e6a9a1a9f6ea7a11aebca4fd20 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 27 May 2021 20:33:47 +0300 Subject: [PATCH 11/24] docs: add links to hardware sources --- docs/en/coex_gps.md | 2 ++ docs/en/coex_pdb.md | 2 ++ docs/en/coex_pix.md | 2 ++ docs/ru/coex_gps.md | 2 ++ docs/ru/coex_pdb.md | 2 ++ docs/ru/coex_pix.md | 2 ++ 6 files changed, 12 insertions(+) diff --git a/docs/en/coex_gps.md b/docs/en/coex_gps.md index 4b3876f9..b4c2de0b 100644 --- a/docs/en/coex_gps.md +++ b/docs/en/coex_gps.md @@ -2,6 +2,8 @@ The GNSS receiver **COEX GPS** is compatible with the [COEX Pix](coex_pix.md) flight controller. This receiver comes with a COEX Clover Drone Kit. +> **Hint** The source files of the COEX GPS board are [published](https://github.com/CopterExpress/hardware/tree/master/COEX%20GPS) under the CC BY-NC-SA license. + ## Port pinouts ### Top view diff --git a/docs/en/coex_pdb.md b/docs/en/coex_pdb.md index ab611a7d..2a7c7cfe 100644 --- a/docs/en/coex_pdb.md +++ b/docs/en/coex_pdb.md @@ -4,6 +4,8 @@ Board size: 35x35 mm. +> **Hint** The source files of the COEX PDB board are [published](https://github.com/CopterExpress/hardware/tree/master/COEX%20PDB) under the CC BY-NC-SA license. + ## Port pinouts ### Top view diff --git a/docs/en/coex_pix.md b/docs/en/coex_pix.md index 7516ca4f..b1d2ad10 100644 --- a/docs/en/coex_pix.md +++ b/docs/en/coex_pix.md @@ -2,6 +2,8 @@ The **COEX Pix** flight controller is a modified [Pixracer](https://docs.px4.io/v1.9.0/en/flight_controller/pixracer.html) FCU. It is a part of the **Clover 4** quadrotor kit. +> **Hint** The source files of the COEX Pix flight controller are [published](https://github.com/CopterExpress/hardware/tree/master/COEX%20Pix) under the CC BY-NC-SA license. + ## Revision 1.1 ### Physical specs diff --git a/docs/ru/coex_gps.md b/docs/ru/coex_gps.md index 9db5c943..de503bf8 100644 --- a/docs/ru/coex_gps.md +++ b/docs/ru/coex_gps.md @@ -2,6 +2,8 @@ ГНСС-приемник **COEX GPS** совместим с полетным контроллером [COEX Pix](coex_pix.md). Этот приемник поставляется с наборами COEX Клевер 4 Pro. +> **Hint** Исходные файлы платы COEX GPS [выложены](https://github.com/CopterExpress/hardware/tree/master/COEX%20GPS) в открытый доступ под лицензией CC BY-NC-SA. + ## Схемы расположения контактов ### Вид сверху diff --git a/docs/ru/coex_pdb.md b/docs/ru/coex_pdb.md index ad83bd81..c916a90a 100644 --- a/docs/ru/coex_pdb.md +++ b/docs/ru/coex_pdb.md @@ -4,6 +4,8 @@ Габаритные размеры платы: 35x35 мм. +> **Hint** Исходные файлы платы COEX PDB [выложены](https://github.com/CopterExpress/hardware/tree/master/COEX%20PDB) в открытый доступ под лицензией CC BY-NC-SA. + ## Схемы расположения контактов ### Вид сверху diff --git a/docs/ru/coex_pix.md b/docs/ru/coex_pix.md index 1b2318a7..b739e79f 100644 --- a/docs/ru/coex_pix.md +++ b/docs/ru/coex_pix.md @@ -2,6 +2,8 @@ Полетный контроллер **COEX Pix** является модифицированным аналогом полетного контроллера [Pixracer](https://docs.px4.io/v1.9.0/en/flight_controller/pixracer.html). Этот полетный контроллер поставляется с наборами **Клевер 4** и далее. +> **Hint** Исходные файлы полетного контроллера COEX Pix [выложены](https://github.com/CopterExpress/hardware/tree/master/COEX%20Pix) в открытый доступ под лицензией CC BY-NC-SA. + ## Ревизия 1.1 ### Характеристики From f4d07e2c2ccbca77e5744e76769336dba9b60286 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 01:25:29 +0300 Subject: [PATCH 12/24] CI: move image building to GitHub actions (#335) * Start working on building image in GitHub actions * Trigger GitHub on push to any branch * Fix TRAVIS_TAG * Add compress image step * Disable image build in Travis * Add upload image step * Fix compress image * Fix * Fix * Minor fix * Trigger build on tag * Show images sizes not in human format * Upload only built image * Make prerelease * Upload assets on release not on tags --- .github/workflows/main.yml | 23 ++++++++++- .travis.yml | 82 +++++++++++++++++++------------------- 2 files changed, 63 insertions(+), 42 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 10a05402..00ff488f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,15 +6,36 @@ name: CI on: # Triggers the workflow on push or pull request events but only for the master branch push: - branches: [ master ] + branches: [ '*' ] pull_request: branches: [ master ] + release: + types: [ created ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: + build-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build image + run: | + docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${{ github.event.release.tag_name }}" sfalexrog/img-tool:qemu-update + - name: Compress image + run: | + sudo chmod -R 777 images && zip -9 $(echo images/clover_*).zip images/clover_* && ls -l images + - name: Upload image + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/v') + with: + files: images/clover_*.zip + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # This workflow contains a single job called "build" build: # The type of runner that the job will run on diff --git a/.travis.yml b/.travis.yml index d80d05c4..5004abc7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,47 +14,47 @@ git: jobs: fast_finish: true include: - - stage: Build - name: "Raspberry Pi Image Build" - cache: - directories: - - imgcache - before_script: - - if [ ! -z "$DOCKER_USERNAME" ]; then - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; - fi - - docker pull ${DOCKER} -# Check if there are any cached images, copy them to our "images" directory - - if [ -n "$(ls -A imgcache/*.zip)" ]; then mkdir -p images && cp imgcache/*.zip images; fi - script: - - if [[ -z ${TRAVIS_TAG} && "${TRAVIS_PULL_REQUEST}" != "false" ]]; then - echo "Commit range is ${TRAVIS_COMMIT_RANGE}" && - if [ $(git diff --name-only ${TRAVIS_COMMIT_RANGE} | grep -v ^"docs/" | wc -l) -eq 0 ]; then - echo " === Docs-only change; skipping build ===" && - export SKIP_BUILD=true; - fi; - fi - - if [ -z ${SKIP_BUILD} ]; then - docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${TRAVIS_TAG}" ${DOCKER}; - fi - before_cache: - - cp images/*.zip imgcache - after_success: - - sudo chmod -R 777 * - - cd images && zip -9 ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip - before_deploy: - # Set up git user name and tag this commit - - git config --local user.name "goldarte" - - git config --local user.email "goldartt@gmail.com" - deploy: - provider: releases - token: ${GITHUB_OAUTH_TOKEN} - file: ${IMAGE_NAME}.zip - skip_cleanup: true - on: - tags: true - draft: true - name: ${TRAVIS_TAG} +# - stage: Build +# name: "Raspberry Pi Image Build" +# cache: +# directories: +# - imgcache +# before_script: +# - if [ ! -z "$DOCKER_USERNAME" ]; then +# echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; +# fi +# - docker pull ${DOCKER} +# # Check if there are any cached images, copy them to our "images" directory +# - if [ -n "$(ls -A imgcache/*.zip)" ]; then mkdir -p images && cp imgcache/*.zip images; fi +# script: +# - if [[ -z ${TRAVIS_TAG} && "${TRAVIS_PULL_REQUEST}" != "false" ]]; then +# echo "Commit range is ${TRAVIS_COMMIT_RANGE}" && +# if [ $(git diff --name-only ${TRAVIS_COMMIT_RANGE} | grep -v ^"docs/" | wc -l) -eq 0 ]; then +# echo " === Docs-only change; skipping build ===" && +# export SKIP_BUILD=true; +# fi; +# fi +# - if [ -z ${SKIP_BUILD} ]; then +# docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${TRAVIS_TAG}" ${DOCKER}; +# fi +# before_cache: +# - cp images/*.zip imgcache +# after_success: +# - sudo chmod -R 777 * +# - cd images && zip -9 ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip +# before_deploy: +# # Set up git user name and tag this commit +# - git config --local user.name "goldarte" +# - git config --local user.email "goldartt@gmail.com" +# deploy: +# provider: releases +# token: ${GITHUB_OAUTH_TOKEN} +# file: ${IMAGE_NAME}.zip +# skip_cleanup: true +# on: +# tags: true +# draft: true +# name: ${TRAVIS_TAG} # - stage: Build # name: "Native Kinetic build" # env: From faa90b89f6c79f6dda629376d43a528629d594fc Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 01:31:32 +0300 Subject: [PATCH 13/24] readme: change build badge to GitHub Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a642efc..1b705c0b 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Clover drone is used on a wide range of educational events, including [Copter Ha Preconfigured image for Raspberry Pi with installed and configured software, ready to fly, is available [in the Releases section](https://github.com/CopterExpress/clover/releases). -[![Build Status](https://travis-ci.org/CopterExpress/clover.svg?branch=master)](https://travis-ci.org/CopterExpress/clover) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/CopterExpress/clover/CI) ![GitHub all releases](https://img.shields.io/github/downloads/CopterExpress/clover/total) Image features: From 868fc728ddc767685aaa5b4789e0de109b25a534 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 01:47:33 +0300 Subject: [PATCH 14/24] readme: add support chat badge --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1b705c0b..8ff3b1b5 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ API description for autonomous flights is available [on GitBook](https://clover. For manual package installation and running see [`clover` package documentation](clover/README.md). +## Support + +[![Telegram Support Chat](https://img.shields.io/endpoint?label=Support%20Chat&url=https%3A%2F%2Ftelegram-badge-4mbpu8e0fit4.runkit.sh%2F%3Furl%3Dhttps%3A%2F%2Ft.me%2FCOEXHelpDesk)](https://t.me/COEXHelpdesk) + ## License While the Clover platform source code is available under the MIT License, note, that the [documentation](docs/) is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. From 7cc0f066c71fe4bac47c6a2382115b586a5dde35 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 21:09:09 +0300 Subject: [PATCH 15/24] CI: move documentation building to GitHub Actions (#337) --- .github/workflows/main.yml | 48 ++++++++++++++++++++++- .travis.yml | 80 +++++++++++++++++++------------------- 2 files changed, 87 insertions(+), 41 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 00ff488f..3842acb1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -35,7 +35,53 @@ jobs: prerelease: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + documentation: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Use Node.js + uses: actions/setup-node@v1 + with: { node-version: '10' } + - name: Setup tools + run: | + sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections" + sudo apt update && sudo apt install -y calibre msttcorefonts + npm install gitbook-cli -g + gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932 + npm install markdownlint-cli -g + npm install svgexport -g + gitbook -V + markdownlint -V + - name: Run markdownlint + run: markdownlint docs + - name: Check Assets + run: | + ./check_assets_size.py + ./check_unused_assets.py + - name: Build GitBook + run: | + gitbook install + gitbook build + - name: Generate PDF + if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} + run: | + for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done + sudo apt-get -q install ghostscript + gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf + gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf + rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf + rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf + ls -lah _book/clover*.pdf + - name: Deploy + uses: JamesIves/github-pages-deploy-action@4.1.3 + if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} + with: + branch: master + folder: _book + repository-name: CopterExpress/clover.coex.tech + token: ${{ secrets.DOCS_DEPLOY_TOKEN }} + clean: true + single-commit: true # to avoid multiple copies of large pdf files # This workflow contains a single job called "build" build: # The type of runner that the job will run on diff --git a/.travis.yml b/.travis.yml index 5004abc7..124c37f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ git: depth: 1 jobs: fast_finish: true - include: + include: [] # - stage: Build # name: "Raspberry Pi Image Build" # cache: @@ -71,45 +71,45 @@ jobs: # - docker pull ${NATIVE_DOCKER} # script: # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - - stage: Build - name: "Documentation" - language: node_js - node_js: - - "10" - before_script: - - sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections" - - sudo apt update && sudo apt install -y calibre msttcorefonts - - npm install gitbook-cli -g - - gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932 - - npm install markdownlint-cli -g - - npm install svgexport -g - - gitbook -V - - markdownlint -V - script: - - markdownlint docs - - ./check_assets_size.py - - ./check_unused_assets.py - - gitbook install - - gitbook build - - for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done - - sudo apt-get install ghostscript - - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf - - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf - - rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf - - rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf - - ls -lah _book/clover*.pdf - deploy: - provider: pages - local_dir: _book - skip_cleanup: true - token: ${GITHUB_OAUTH_TOKEN} - keep_history: true - target_branch: master - repo: CopterExpress/clover.coex.tech - fqdn: clover.coex.tech - verbose: true - on: - branch: master + # - stage: Build + # name: "Documentation" + # language: node_js + # node_js: + # - "10" + # before_script: + # - sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections" + # - sudo apt update && sudo apt install -y calibre msttcorefonts + # - npm install gitbook-cli -g + # - gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932 + # - npm install markdownlint-cli -g + # - npm install svgexport -g + # - gitbook -V + # - markdownlint -V + # script: + # - markdownlint docs + # - ./check_assets_size.py + # - ./check_unused_assets.py + # - gitbook install + # - gitbook build + # - for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done + # - sudo apt-get install ghostscript + # - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf + # - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf + # - rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf + # - rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf + # - ls -lah _book/clover*.pdf + # deploy: + # provider: pages + # local_dir: _book + # skip_cleanup: true + # token: ${GITHUB_OAUTH_TOKEN} + # keep_history: true + # target_branch: master + # repo: CopterExpress/clover.coex.tech + # fqdn: clover.coex.tech + # verbose: true + # on: + # branch: master stages: - Build # More info there From 84b87055dfa6269b77910f45a74358a64b29122e Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 21:20:43 +0300 Subject: [PATCH 16/24] CI: change docs target branch to actions --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3842acb1..8c035207 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: uses: JamesIves/github-pages-deploy-action@4.1.3 if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} with: - branch: master + branch: actions folder: _book repository-name: CopterExpress/clover.coex.tech token: ${{ secrets.DOCS_DEPLOY_TOKEN }} From 5fd3a92c7b8b296e7ae8c122671d3914659d2db3 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 22:21:07 +0300 Subject: [PATCH 17/24] CI: change docs target branch to master --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8c035207..3842acb1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: uses: JamesIves/github-pages-deploy-action@4.1.3 if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} with: - branch: actions + branch: master folder: _book repository-name: CopterExpress/clover.coex.tech token: ${{ secrets.DOCS_DEPLOY_TOKEN }} From e80a1cc7d607fbb447bd6f8354c13b3858caaca0 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 28 May 2021 22:43:58 +0300 Subject: [PATCH 18/24] CI: use gh-pages target branch for docs --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3842acb1..902741c2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,7 +76,7 @@ jobs: uses: JamesIves/github-pages-deploy-action@4.1.3 if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} with: - branch: master + branch: gh-pages folder: _book repository-name: CopterExpress/clover.coex.tech token: ${{ secrets.DOCS_DEPLOY_TOKEN }} From bcc2e86e6f508ab2cf9424f3309d2e3d890844ba Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 29 May 2021 05:27:20 +0300 Subject: [PATCH 19/24] CI: split up to several workflows --- .github/workflows/build-image.yaml | 29 +++++++++++++ .github/workflows/build.yml | 16 +++++++ .github/workflows/{main.yml => docs.yml} | 55 +----------------------- .github/workflows/editorconfig.yaml | 18 ++++++++ 4 files changed, 64 insertions(+), 54 deletions(-) create mode 100644 .github/workflows/build-image.yaml create mode 100644 .github/workflows/build.yml rename .github/workflows/{main.yml => docs.yml} (51%) create mode 100644 .github/workflows/editorconfig.yaml diff --git a/.github/workflows/build-image.yaml b/.github/workflows/build-image.yaml new file mode 100644 index 00000000..714ce891 --- /dev/null +++ b/.github/workflows/build-image.yaml @@ -0,0 +1,29 @@ +name: Build RPi image + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ master ] + release: + types: [ created ] + +jobs: + build-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build image + run: | + docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${{ github.event.release.tag_name }}" sfalexrog/img-tool:qemu-update + - name: Compress image + run: | + sudo chmod -R 777 images && zip -9 $(echo images/clover_*).zip images/clover_* && ls -l images + - name: Upload image + uses: softprops/action-gh-release@v1 + if: ${{ github.event_name == 'release' }} + with: + files: images/clover_*.zip + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..0709e465 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,16 @@ +name: Build + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ master ] + +jobs: + build-melodic: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Native Melodic build + run: | + docker run --rm -v $(pwd):/root/catkin_ws/src/clover ros:melodic-ros-base /root/catkin_ws/src/clover/builder/standalone-install.sh diff --git a/.github/workflows/main.yml b/.github/workflows/docs.yml similarity index 51% rename from .github/workflows/main.yml rename to .github/workflows/docs.yml index 902741c2..d0cdd5ec 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/docs.yml @@ -1,40 +1,12 @@ -# This is a basic workflow to help you get started with Actions +name: Documentation -name: CI - -# Controls when the action will run. on: - # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ '*' ] pull_request: branches: [ master ] - release: - types: [ created ] - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - build-image: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Build image - run: | - docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${{ github.event.release.tag_name }}" sfalexrog/img-tool:qemu-update - - name: Compress image - run: | - sudo chmod -R 777 images && zip -9 $(echo images/clover_*).zip images/clover_* && ls -l images - - name: Upload image - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/v') - with: - files: images/clover_*.zip - prerelease: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} documentation: runs-on: ubuntu-18.04 steps: @@ -82,28 +54,3 @@ jobs: token: ${{ secrets.DOCS_DEPLOY_TOKEN }} clean: true single-commit: true # to avoid multiple copies of large pdf files - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - # Runs a set of commands using the runners shell - - name: Native Melodic build - env: - NATIVE_DOCKER: ros:melodic-ros-base - run: | - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - editorconfig: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: .editorconfig Linter - run: | - wget --no-verbose https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64 - chmod +x ec-linux-amd64 - ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" diff --git a/.github/workflows/editorconfig.yaml b/.github/workflows/editorconfig.yaml new file mode 100644 index 00000000..9bbeba47 --- /dev/null +++ b/.github/workflows/editorconfig.yaml @@ -0,0 +1,18 @@ +name: Editorconfig lint + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ master ] + +jobs: + editorconfig: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: .editorconfig Linter + run: | + wget --no-verbose https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64 + chmod +x ec-linux-amd64 + ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" From 5932faa29c93f7e3ce4ad71aab668ca374904b3e Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 29 May 2021 05:29:32 +0300 Subject: [PATCH 20/24] CI: remove .travis.yml --- .travis.yml | 119 ---------------------------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 124c37f3..00000000 --- a/.travis.yml +++ /dev/null @@ -1,119 +0,0 @@ -os: linux -dist: xenial -language: generic -services: - - docker -env: - global: - - DOCKER="sfalexrog/img-tool:qemu-update" - - TARGET_REPO="https://github.com/${TRAVIS_REPO_SLUG}.git" - - IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}} - - IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img" -git: - depth: 1 -jobs: - fast_finish: true - include: [] -# - stage: Build -# name: "Raspberry Pi Image Build" -# cache: -# directories: -# - imgcache -# before_script: -# - if [ ! -z "$DOCKER_USERNAME" ]; then -# echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; -# fi -# - docker pull ${DOCKER} -# # Check if there are any cached images, copy them to our "images" directory -# - if [ -n "$(ls -A imgcache/*.zip)" ]; then mkdir -p images && cp imgcache/*.zip images; fi -# script: -# - if [[ -z ${TRAVIS_TAG} && "${TRAVIS_PULL_REQUEST}" != "false" ]]; then -# echo "Commit range is ${TRAVIS_COMMIT_RANGE}" && -# if [ $(git diff --name-only ${TRAVIS_COMMIT_RANGE} | grep -v ^"docs/" | wc -l) -eq 0 ]; then -# echo " === Docs-only change; skipping build ===" && -# export SKIP_BUILD=true; -# fi; -# fi -# - if [ -z ${SKIP_BUILD} ]; then -# docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${TRAVIS_TAG}" ${DOCKER}; -# fi -# before_cache: -# - cp images/*.zip imgcache -# after_success: -# - sudo chmod -R 777 * -# - cd images && zip -9 ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip -# before_deploy: -# # Set up git user name and tag this commit -# - git config --local user.name "goldarte" -# - git config --local user.email "goldartt@gmail.com" -# deploy: -# provider: releases -# token: ${GITHUB_OAUTH_TOKEN} -# file: ${IMAGE_NAME}.zip -# skip_cleanup: true -# on: -# tags: true -# draft: true -# name: ${TRAVIS_TAG} - # - stage: Build - # name: "Native Kinetic build" - # env: - # - NATIVE_DOCKER=ros:kinetic-ros-base - # before_script: - # - docker pull ${NATIVE_DOCKER} - # script: - # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - # - stage: Build - # name: "Native Melodic build" - # env: - # - NATIVE_DOCKER=ros:melodic-ros-base - # before_script: - # - docker pull ${NATIVE_DOCKER} - # script: - # - docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh - # - stage: Build - # name: "Documentation" - # language: node_js - # node_js: - # - "10" - # before_script: - # - sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections" - # - sudo apt update && sudo apt install -y calibre msttcorefonts - # - npm install gitbook-cli -g - # - gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932 - # - npm install markdownlint-cli -g - # - npm install svgexport -g - # - gitbook -V - # - markdownlint -V - # script: - # - markdownlint docs - # - ./check_assets_size.py - # - ./check_unused_assets.py - # - gitbook install - # - gitbook build - # - for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done - # - sudo apt-get install ghostscript - # - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf - # - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf - # - rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf - # - rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf - # - ls -lah _book/clover*.pdf - # deploy: - # provider: pages - # local_dir: _book - # skip_cleanup: true - # token: ${GITHUB_OAUTH_TOKEN} - # keep_history: true - # target_branch: master - # repo: CopterExpress/clover.coex.tech - # fqdn: clover.coex.tech - # verbose: true - # on: - # branch: master -stages: - - Build -# More info there -# https://github.com/travis-ci/travis-ci/issues/6893 -# https://docs.travis-ci.com/user/customizing-the-build/ -# https://docs.travis-ci.com/user/deployment/releases -# https://docs.travis-ci.com/user/environment-variables/ From 563e5acad6e60c645a471cbec039b44dd1992eeb Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 29 May 2021 05:31:29 +0300 Subject: [PATCH 21/24] CI: change apt to apt-get --- .github/workflows/docs.yml | 2 +- builder/standalone-install.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d0cdd5ec..2a70449d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,7 +17,7 @@ jobs: - name: Setup tools run: | sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections" - sudo apt update && sudo apt install -y calibre msttcorefonts + sudo apt-get update && sudo apt-get install -y calibre msttcorefonts npm install gitbook-cli -g gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932 npm install markdownlint-cli -g diff --git a/builder/standalone-install.sh b/builder/standalone-install.sh index f4da6623..21bdeb96 100755 --- a/builder/standalone-install.sh +++ b/builder/standalone-install.sh @@ -3,8 +3,8 @@ # Perform a "standalone install" in a Docker container set -e # Step 1: Install pip -apt update -apt install -y curl +apt-get update +apt-get install -y curl curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py python ./get-pip.py @@ -21,7 +21,7 @@ led_msgs: stretch: ros-kinetic-led-msgs buster: ros-melodic-led-msgs EOF -apt update +apt-get update rosdep update # Step 2: Run rosdep to install all dependencies From 6b0bb41564720c922780662d3075bc2dd2499a4b Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 29 May 2021 06:11:29 +0300 Subject: [PATCH 22/24] CI: push documentation site to the main repo --- .github/workflows/docs.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 2a70449d..a12fefb4 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -35,7 +35,7 @@ jobs: gitbook install gitbook build - name: Generate PDF - if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} run: | for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done sudo apt-get -q install ghostscript @@ -46,11 +46,9 @@ jobs: ls -lah _book/clover*.pdf - name: Deploy uses: JamesIves/github-pages-deploy-action@4.1.3 - if: ${{ github.repository == 'CopterExpress/clover' && github.event_name == 'push' && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} with: branch: gh-pages folder: _book - repository-name: CopterExpress/clover.coex.tech - token: ${{ secrets.DOCS_DEPLOY_TOKEN }} clean: true single-commit: true # to avoid multiple copies of large pdf files From b7f1f2b39171f2f3fa0c941c74af7d0a5a3f4bad Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 29 May 2021 13:22:57 +0300 Subject: [PATCH 23/24] builder: less verbosity --- builder/image-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/image-software.sh b/builder/image-software.sh index 54917504..d0686b2e 100755 --- a/builder/image-software.sh +++ b/builder/image-software.sh @@ -154,7 +154,7 @@ systemctl enable monkey.service echo_stamp "Install Node.js" cd /home/pi -wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-armv6l.tar.gz +wget --no-verbose https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-armv6l.tar.gz tar -xzf node-v10.15.0-linux-armv6l.tar.gz cp -R node-v10.15.0-linux-armv6l/* /usr/local/ rm -rf node-v10.15.0-linux-armv6l/ From f29686b9f48a28ee3e270fc73e255fd256c7f5c1 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 1 Jun 2021 03:44:20 +0300 Subject: [PATCH 24/24] CI: add new key for apt Fixing https://github.com/CopterExpress/clover/runs/2700356960#step:3:74 --- builder/standalone-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/builder/standalone-install.sh b/builder/standalone-install.sh index 21bdeb96..e826401a 100755 --- a/builder/standalone-install.sh +++ b/builder/standalone-install.sh @@ -3,6 +3,7 @@ # Perform a "standalone install" in a Docker container set -e # Step 1: Install pip +apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 # https://github.com/osrf/docker_images/issues/535 apt-get update apt-get install -y curl curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py