mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-31 23:19:32 +00:00
Compare commits
22 Commits
fix-gpio
...
v0.23-rc.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75b63ad77d | ||
|
|
36a4962bc0 | ||
|
|
140535b0b4 | ||
|
|
2cd3be1139 | ||
|
|
6909ba5819 | ||
|
|
2a8c85144e | ||
|
|
f1783bdd0b | ||
|
|
528be179e6 | ||
|
|
fe588e7af9 | ||
|
|
15551db840 | ||
|
|
65bc74b5ec | ||
|
|
ac4f16f973 | ||
|
|
baf8b736d4 | ||
|
|
bb318ce93f | ||
|
|
d7b6968fee | ||
|
|
08f6aa7aee | ||
|
|
d5e729c66c | ||
|
|
27c83d062c | ||
|
|
04bc9fb017 | ||
|
|
b2928dd536 | ||
|
|
2a4163cbeb | ||
|
|
d1edc95ab5 |
@@ -53,6 +53,7 @@ private:
|
||||
std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
|
||||
std::unique_ptr<tf2_ros::TransformListener> tf_listener_;
|
||||
bool calc_flow_gyro_;
|
||||
float flow_gyro_default_;
|
||||
|
||||
void onInit()
|
||||
{
|
||||
@@ -69,6 +70,7 @@ private:
|
||||
roi_px_ = nh_priv.param("roi", 128);
|
||||
roi_rad_ = nh_priv.param("roi_rad", 0.0);
|
||||
calc_flow_gyro_ = nh_priv.param("calc_flow_gyro", false);
|
||||
flow_gyro_default_ = nh_priv.param("flow_gyro_default", NAN);
|
||||
|
||||
img_pub_ = it_priv.advertise("debug", 1);
|
||||
flow_pub_ = nh.advertise<mavros_msgs::OpticalFlowRad>("mavros/px4flow/raw/send", 1);
|
||||
@@ -194,9 +196,9 @@ private:
|
||||
uint32_t integration_time_us = integration_time.toSec() * 1.0e6;
|
||||
|
||||
// Calculate flow gyro
|
||||
flow_.integrated_xgyro = NAN;
|
||||
flow_.integrated_ygyro = NAN;
|
||||
flow_.integrated_zgyro = NAN;
|
||||
flow_.integrated_xgyro = flow_gyro_default_;
|
||||
flow_.integrated_ygyro = flow_gyro_default_;
|
||||
flow_.integrated_zgyro = flow_gyro_default_;
|
||||
|
||||
if (calc_flow_gyro_) {
|
||||
try {
|
||||
|
||||
@@ -201,18 +201,13 @@ def check_fcu():
|
||||
if version_str == '':
|
||||
info('no version data available from SITL')
|
||||
|
||||
r = re.compile(r'^FW (git tag|version): (v?\d\.\d\.\d.*)$')
|
||||
is_clover_firmware = False
|
||||
for ver_line in version_str.split('\n'):
|
||||
match = r.search(ver_line)
|
||||
if match is not None:
|
||||
field, version = match.groups()
|
||||
info('firmware %s: %s' % (field, version))
|
||||
if 'clover' in version or 'clever' in version:
|
||||
is_clover_firmware = True
|
||||
|
||||
if not is_clover_firmware:
|
||||
failure('not running Clover PX4 firmware, https://clover.coex.tech/firmware')
|
||||
for line in version_str.split('\n'):
|
||||
if line.startswith('FW version: '):
|
||||
info(line[len('FW version: '):])
|
||||
elif line.startswith('FW git tag: '):
|
||||
info(line[len('FW git tag: '):])
|
||||
elif line.startswith('HW arch: '):
|
||||
info(line[len('HW arch: '):])
|
||||
|
||||
est = get_param('SYS_MC_EST_GROUP')
|
||||
if est == 1:
|
||||
@@ -648,13 +643,22 @@ def check_clover_service():
|
||||
elif 'failed' in output:
|
||||
failure('service failed to run, check your launch-files')
|
||||
|
||||
r = re.compile(r'^(.*)\[(FATAL|ERROR)\] \[\d+.\d+\]: (.*?)(\x1b(.*))?$')
|
||||
BLACKLIST = 'Unexpected command 520', 'Time jump detected'
|
||||
|
||||
r = re.compile(r'^(.*)\[(FATAL|ERROR| WARN)\] \[\d+.\d+\]: (.*?)(\x1b(.*))?$')
|
||||
error_count = OrderedDict()
|
||||
try:
|
||||
for line in open('/tmp/clover.err', 'r'):
|
||||
skip = False
|
||||
for substr in BLACKLIST:
|
||||
if substr in line:
|
||||
skip = True
|
||||
if skip:
|
||||
continue
|
||||
|
||||
node_error = r.search(line)
|
||||
if node_error:
|
||||
msg = node_error.groups()[1] + ': ' + node_error.groups()[2]
|
||||
msg = node_error.groups()[1].strip() + ': ' + node_error.groups()[2]
|
||||
if msg in error_count:
|
||||
error_count[msg] += 1
|
||||
else:
|
||||
|
||||
@@ -3,11 +3,13 @@ const ros = new ROSLIB.Ros({ url: url });
|
||||
|
||||
ros.on('connection', function () {
|
||||
document.body.classList.add('connected');
|
||||
document.body.classList.remove('closed');
|
||||
init();
|
||||
});
|
||||
|
||||
ros.on('close', function () {
|
||||
document.body.classList.remove('connected');
|
||||
document.body.classList.add('closed');
|
||||
setTimeout(function() {
|
||||
// reconnect
|
||||
ros.connect(url);
|
||||
@@ -37,13 +39,14 @@ function viewTopicsList() {
|
||||
let rosdistro;
|
||||
|
||||
function viewTopic(topic) {
|
||||
title.innerHTML = topic;
|
||||
let index = '<a href=topics.html>Topics</a>';
|
||||
title.innerHTML = `${index}: ${topic}`;
|
||||
topicMessage.style.display = 'block';
|
||||
|
||||
ros.getTopicType(topic, function(typeStr) {
|
||||
const [pack, type] = typeStr.split('/');
|
||||
let href = `https://docs.ros.org/en/${rosdistro}/api/${pack}/html/msg/${type}.html`;
|
||||
title.innerHTML = `${topic} <a id="topic-type" href=${href} target="_blank">${typeStr}</a>`;
|
||||
title.innerHTML = `${index}: ${topic} <a id="topic-type" href=${href} target="_blank">${typeStr}</a>`;
|
||||
});
|
||||
|
||||
new ROSLIB.Topic({ ros: ros, name: topic }).subscribe(function(msg) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
}
|
||||
#topic-type { font-family: monospace; font-size: 0.5em; vertical-align: super; font-weight: normal; }
|
||||
.topic { font-family: monospace; }
|
||||
body.closed { background-color: rgb(207, 207, 207); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -464,7 +464,7 @@ Blockly.Python.led_count = function(block) {
|
||||
|
||||
function pigpio() {
|
||||
Blockly.Python.definitions_['import_pigpio'] = 'import pigpio';
|
||||
Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()';
|
||||
Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()\nif not pi.connected: raise Exception(\'Cannot connect to pigpiod\')';
|
||||
}
|
||||
|
||||
const GPIO_READ = `\ndef gpio_read(pin):
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* [Работа с FS-A8S](rc_flysky_a8s.md)
|
||||
* [Полетные режимы](modes.md)
|
||||
* [Настройка питания](power.md)
|
||||
* [Настройка failsafe](failsafe.md)
|
||||
* [Настройка Failsafe](failsafe.md)
|
||||
* [Ручной полет](flight.md)
|
||||
* [Упражнения](flight_exercises.md)
|
||||
* [Работа с Raspberry Pi](raspberry.md)
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
4. Последовательно устанавливайте квадрокоптер в каждую из указанных ориентаций до появления желтой рамки.
|
||||
5. Вращайте квадрокоптер по направлению стрелки до появления зеленой рамки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/compass.html.
|
||||
> **Warning** Последние версии прошивки PX4 не поддерживают внутренний компас на полетном контроллере COEX Pix. При появлении ошибки *No mags found* перейдите во вкладку *Parameters*, установите параметры `SYS_HAS_MAG` в `0`, `EKF2_MAG_TYPE` в `None` и перезагрузите полетный контроллер (*Tools* => *Reboot Vehicle*).
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/compass.html.
|
||||
|
||||
## Гироскоп
|
||||
|
||||
@@ -27,7 +29,7 @@
|
||||
|
||||
> **Warning** Во время калибровки гироскопа квадрокоптер не должен менять своего положения, шататься и т. д.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/gyroscope.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/gyroscope.html.
|
||||
|
||||
## Акселерометр
|
||||
|
||||
@@ -38,7 +40,7 @@
|
||||
3. Последовательно устанавливайте квадрокоптер в каждую из указанных ориентаций до появления желтой рамки.
|
||||
4. Держите квадрокоптер неподвижно до появления зеленой рамки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/accelerometer.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/accelerometer.html.
|
||||
|
||||
## Уровень горизонта
|
||||
|
||||
@@ -50,6 +52,6 @@
|
||||
4. Нажмите *OK*.
|
||||
5. Дождитесь окончания калибровки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/level_horizon_calibration.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/level_horizon_calibration.html.
|
||||
|
||||
**Далее**: [Настройка пульта](radio.md).
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# Настройка failsafe
|
||||
# Настройка Failsafe
|
||||
|
||||
Основная статья: https://docs.px4.io/master/en/config/safety.html.
|
||||
|
||||
Во вкладке *Safety* настраиваются реакции квадрокоптера на различные нештатные ситуации. Рекомендуется включить как минимум реакцию на потерю связи с пультом управления:
|
||||
|
||||
1. Откройте вкладку *Safety*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Safety*.
|
||||
2. В блоке *RC Loss Failsafe Trigger* выберите один из рекомендуемых вариантов реакции на потерю связи с пультом:
|
||||
* *Land mode* – переход в режим посадки;
|
||||
* *Terminate* – аварийное отключение моторов.
|
||||
3. В поле *RC Loss Timeout* выберите значение таймаута, по истечении которого связь с пультом считается потерянной. Рекомендуемое значение – 0.5 s.
|
||||
3. В поле *RC Loss Timeout* выберите значение таймаута, по истечении которого связь с пультом считается потерянной. Рекомендуемое значение – 2 s.
|
||||
|
||||
<img src="../assets/qgc-failsafe.png" alt="QGroundControl failsafe" class="zoom">
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# Полетные режимы
|
||||
|
||||
**Режим** полетного контроллера PX4 определяет, как именно коптер (или другое ТС) должно себя вести: каким образом интерпретировать входящие команды и сигналы с пульта. Режим переключается одним из переключателей на пульте радиоуправления.
|
||||
**Режим** полетного контроллера PX4 определяет, как именно квадрокоптер (или другой аппарат) должен себя вести: каким образом интерпретировать входящие команды и сигналы с пульта. Режим переключается одним из переключателей на пульте радиоуправления.
|
||||
|
||||
Чтобы настроить полетные режимы:
|
||||
|
||||
1. Зайдите во вкладку *Vehicle Setup*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup*.
|
||||
2. Выберите меню *Flight Modes*.
|
||||
3. Установите переключатель режимов на переключатель SwC (Channel 6).
|
||||
4. Выберите необходимые полетные режимы.
|
||||
3. Установите переключатель режимов (*Mode Channel*) на переключатель SwC (*Channel 6*).
|
||||
4. Опционально, установите экстренное отключение пропеллеров (*Emergency Kill Switch Channel*) на переключатель SwA (*Channel 5*).
|
||||
5. Выберите необходимые полетные режимы.
|
||||
|
||||
Рекомендуемые полетные режимы:
|
||||
|
||||
@@ -15,8 +16,8 @@
|
||||
* Flight Mode 4: *Altitude*.
|
||||
* Flight Mode 6: *Position*.
|
||||
|
||||
5. Проверьте корректность переключения режимов, переключая переключатель на пульте.
|
||||
6. Назначьте аварийное отключение моторов (*Kill switch*) на переключатель SwA (Channel 5).
|
||||
6. Проверьте корректность переключения режимов, переключая переключатель на пульте.
|
||||
7. Назначьте аварийное отключение моторов (*Kill switch*) на переключатель SwA (Channel 5).
|
||||
|
||||
<img src="../assets/qgc-modes.png" class="zoom" alt="QGroundControl modes">
|
||||
|
||||
|
||||
@@ -4,9 +4,7 @@
|
||||
|
||||
## Включение
|
||||
|
||||
> **Hint** Необходимо использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
|
||||
|
||||
Необходимо использование дальномера. [Подключите и настройте дальномер VL53L1X](laser.md), используя инструкцию.
|
||||
> **Hint** Для работы Optical Flow необходим [подключенный и настроенный лазерный дальномер](laser.md).
|
||||
|
||||
Включите Optical Flow в файле `~/catkin_ws/src/clover/clover/launch/clover.launch`:
|
||||
|
||||
@@ -14,7 +12,7 @@
|
||||
<arg name="optical_flow" default="true"/>
|
||||
```
|
||||
|
||||
Optical Flow публикует данные в топик `mavros/px4flow/raw/send`. Кроме того, в топик `optical_flow/debug` публикуется визуализация, которую можно просмотреть с помощью [web_video_server](web_video_server.md).
|
||||
Optical Flow публикует данные в топик `/mavros/px4flow/raw/send`. Кроме того, в топик `/optical_flow/debug` публикуется визуализация, которую можно просмотреть с помощью [web_video_server](web_video_server.md).
|
||||
|
||||
> **Info** Для правильной работы модуль камеры должен быть корректно подключен и [сконфигурирован](camera.md).
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Настройка PID регуляторов
|
||||
|
||||
Основная статья: https://docs.px4.io/v1.9.0/en/config_mc/pid_tuning_guide_multicopter.html.
|
||||
Основная статья: https://docs.px4.io/master/en/config_mc/pid_tuning_guide_multicopter.html.
|
||||
|
||||
В этой статье описаны методы и основные технологии настройки каскадного ПИД-регулятора. Приведенные советы и методики подходят для любых видов рам (Квадрокоптеров, Гексакоптеров, Октокоптеров и т.д.).
|
||||
|
||||
|
||||
@@ -6,15 +6,16 @@
|
||||
|
||||
> **Note** Калибровка делителя напряжения должна выполняться с подключенным АКБ.
|
||||
|
||||
В случае отсутствия индикатора напряжения или невозможности ручной калибровки, установите усредненное значение делителя напряжения для комплекта Клевер 4 (*Voltage divider* = 11).
|
||||
|
||||
1. Установите параметр *Number of cells* в соответствии с количеством банок в АКБ (*3S* для Клевера 4).
|
||||
2. Откалибруйте делитель напряжения:
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Power*.
|
||||
2. Установите параметр *Number of cells* в соответствии с количеством банок в АКБ (*3S* для Клевера 4).
|
||||
3. Откалибруйте делитель напряжения:
|
||||
* Подключите индикатор напряжения к балансировочному разъему АКБ.
|
||||
* Нажмите кнопку *Calculate* напротив надписи *Voltage Divider*.
|
||||
* Введите в открывшемся поле суммарное значение напряжения с индикатора напряжения.
|
||||
* Нажмите *Close*, чтобы сохранить рассчитанное значение.
|
||||
|
||||
В случае отсутствия индикатора напряжения или невозможности ручной калибровки, установите усредненное значение делителя напряжения для комплекта Клевер 4 (*Voltage divider* = 11).
|
||||
|
||||
<img src="../assets/qgc-voltage-divider.png" class="zoom">
|
||||
|
||||
Дополнительная информация: https://docs.qgroundcontrol.com/en/SetupView/Power.html.
|
||||
@@ -30,6 +31,6 @@
|
||||
|
||||
<img src="../assets/qgc-power.png" class="zoom">
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/advanced_config/esc_calibration.html.
|
||||
|
||||
**Далее**: [настройка Failsafe](failsafe.md).
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## Подключение пульта
|
||||
|
||||
1. Зайдите во вкладку *Vehicle Setup* и выберите меню *Radio*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Radio*.
|
||||
2. Включите пульт, переводя переключатель *POWER* в верхнее положение.
|
||||
3. Убедитесь, что связь с приемником установлена.
|
||||
|
||||
|
||||
@@ -16,33 +16,26 @@
|
||||
|
||||
<img src="../assets/pix-sd.png" alt="Pixracer и MicroSD-карта" class="zoom center" width=400>
|
||||
|
||||
* Установите карту в компьютер (используйте адаптер при необходимости).
|
||||
* Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS.
|
||||
* Выполните "Безопасное извлечение" карты, извлеките карту.
|
||||
* Установите карту в полетный контроллер.
|
||||
1. Установите карту в компьютер (используйте адаптер при необходимости).
|
||||
2. Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS.
|
||||
3. Выполните "Безопасное извлечение" карты, извлеките карту.
|
||||
4. Установите карту в полетный контроллер.
|
||||
|
||||
## Загрузка прошивки в полетный контроллер
|
||||
|
||||
Основная статья: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html.
|
||||
Для использования всех наиболее актуальных функций PX4 используйте последнюю версию прошивки PX4 (*1.12+*).
|
||||
|
||||
> **Note** Перед осуществлением перепрошивки Pixracer не должен быть подключен к компьютеру по USB.
|
||||
> **Note** Альтернативой является использование более старой прошивки (*1.8.2*) [с патчами COEX](firmware.md). В этой прошивке функциональность автономных полетов является более оттестированной и отлаженной. Прошивка может быть скачана с GitHub — **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">Скачать</a>**.
|
||||
|
||||
Для Клевера, в особенности для осуществления автономных полетов, рекомендуется использовать версию прошивки PX4 от Copter Express. Скачайте актуальную версию прошивки на GitHub — **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">скачать</a>**.
|
||||
|
||||
> **Info** Для квадрокоптеров с Pixhawk (Клевер 2) существует отдельная версия прошивки. Подробности смотрите в статье "[Прошивка полетного контроллера](firmware.md)".
|
||||
|
||||
Загрузите прошивку в полетный контролер:
|
||||
1. Отключите полетный контроллер от компьютера (если он подключен).
|
||||
2. Запустите программу QGroundControl.
|
||||
3. Перейдите в панель *Vehicle Setup* (кликнув на логотип QGroundControl в левом верхнем углу) и выберите меню *Firmware*.
|
||||
4. Подключите полетный контроллер к компьютеру по USB.
|
||||
5. Выберите в появившемся меню справа *PX4 Flight Stack*.
|
||||
|
||||
<img src="../assets/qgc-firmware.png" alt="QGroundControl firmware upload" class="zoom">
|
||||
|
||||
1. Запустите программу QGroundControl.
|
||||
2. Зайдите во вкладку *Vehicle Setup*.
|
||||
3. Выберите меню *Firmware*.
|
||||
4. Подключите Pixracer к компьютеру по USB.
|
||||
5. Дождитесь подключения Pixracer к QGroundControl.
|
||||
6. Выберите в меню справа *PX4 Flight Stack*.
|
||||
|
||||
Для загрузки прошивки от Copter Express (рекомендуется):
|
||||
Для загрузки прошивки COEX:
|
||||
|
||||
* Выберите *Advanced settings*.
|
||||
* В выпадающем меню выберите *Custom firmware file...*
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
{ "from": "power/", "to": "en/power.html" },
|
||||
{ "from": "connection/", "to": "en/connection.html" },
|
||||
{ "from": "clover_vm/", "to": "en/simulation_vm.html" },
|
||||
{ "from": "gpio/", "to": "en/gpio.html" },
|
||||
|
||||
{ "from": "ru/microsd_images.html", "to": "image.html" },
|
||||
{ "from": "en/microsd_images.html", "to": "image.html" }
|
||||
|
||||
Reference in New Issue
Block a user