Merge branch 'master' of github.com:CopterExpress/clever
@@ -24,7 +24,7 @@ Image includes:
|
||||
* mavros
|
||||
* CLEVER software bundle for autonomous drone control
|
||||
|
||||
API description in Russian for autonomous flights is available [here](https://copterexpress.gitbooks.io/clever/content/docs/simple_offboard.html).
|
||||
API description in Russian for autonomous flights is available [here](https://copterexpress.gitbooks.io/clever/simple_offboard.html).
|
||||
|
||||
## Manual installation
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
@@ -10,7 +10,7 @@
|
||||
|
||||
Для прошивки самых разнообразных ESC регуляторов существует программа [BLHeliSuite](https://github.com/4712/BLHeliSuite) \(для Windows\).
|
||||
|
||||
Для запуска программы \(BLHeliSuite.exe\) необходимо распаковать архивы BLHeliAtmelHEX.zip и BLHeliSilabsHEX.zip в корневой папке.
|
||||
Для запуска программы \(BLHeliSuite.exe\) необходимо распаковать архивы BLHeliAtmelHEX.zip и BLHeliSilabsHEX.zip в папку с программой.
|
||||
|
||||
#### Программатор для прошивки регуляторов.
|
||||
|
||||
@@ -18,28 +18,37 @@
|
||||
|
||||
Создание программатора на примере Arduino Mega.
|
||||
|
||||
1. Запустить программу BLHeliSuite и выбрать вкладку Make interfaces.
|
||||

|
||||
1. Запустите программу BLHeliSuite и выберите вкладку Make interfaces.
|
||||
|
||||
2. Нажать Arduino 4way-interface в разделе Make Arduino Interface Boards и выбрать файл прошивки
|
||||

|
||||

|
||||
|
||||
3. После прошивки Arduino вернуться на вкладку Silabs ESC Setup и подключиться к Arduino, предварительно выбрав интерфейс программатора 4way-if и COM порт Arduino.
|
||||

|
||||
2. Подключите Arduino к компьютеру, при необходимости посмотрите в диспетчере устройств номер COM порта, к которому подключена плата.
|
||||
|
||||
3. Нажмите Arduino 4way-interface в разделе Make Arduino Interface Boards и выберите файл прошивки. После выбора файла начнётся прошивка контроллера.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
4. После прошивки Arduino вернитесь на вкладку Silabs ESC Setup и подключитесь к Arduino, предварительно выбрав интерфейс программатора 4way-if и COM порт Arduino.
|
||||
|
||||

|
||||

|
||||
|
||||
#### Подключение ESC регуляторов к Arduino.
|
||||
|
||||
Для прошивки или изменения настроек регуляторов необходимо подключить сигнальные порты ESC регуляторов к портам Arduino, предварительно посмотрев в мануале, какие порты используются для прошивки. Так же нужно не забыть соединить GND Arduino с землёй одного из регуляторов. Регуляторы должны быть подключены к питанию, в случае если к регуляторам подключены моторы, **на них не должно быть винтов**.
|
||||
Для прошивки или изменения настроек регуляторов необходимо подключить сигнальные порты (обычно белого цвета) ESC регуляторов к портам Arduino, предварительно посмотрев в мануале (см. рисунок ниже), какие порты используются для соединения с регуляторами. Так же нужно соединить GND Arduino с землёй одного из регуляторов (обычно черного цвета). Регуляторы должны быть подключены к питанию, а если к регуляторам подключены моторы, **на них не должно быть винтов**.
|
||||
|
||||

|
||||

|
||||
|
||||
В случае с Arduino Mega, регуляторы подключаются к портам D43-D49 и D51.
|
||||
В случае с Arduino Mega, сигнальные порты регуляторов подключаются к портам D43-D49 и D51.
|
||||
|
||||
#### Изменение настроек ESC регуляторов.
|
||||
|
||||
Для загрузки информации о версии прошивки и настроек регуляторов нужно нажать на кнопку Check.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
Основные параметры, которые нас интересуют, это:
|
||||
|
||||
@@ -51,13 +60,19 @@
|
||||
|
||||
Самый левый мотор в списке моторов \(Multiple ESC\) считается главным \(мастер\). Нажимая на номера моторов, можно включать/выключать возможность записи в них настроек. После изменения необходимых параметров можно записать в нужные моторы настройки, нажав на кнопку Write Setup.
|
||||
|
||||

|
||||

|
||||
|
||||
Для отображения настроек со всех регуляторов одновременно можно воспользоваться вкладкой ESC Overview.
|
||||
|
||||
#### Прошивка ESC регуляторов.
|
||||
|
||||
Файлы с прошивками регуляторов находятся [здесь](https://github.com/cleanflight/blheli-multishot).
|
||||
Файлы с прошивками регуляторов находятся [здесь](https://github.com/cleanflight/blheli-multishot/tree/master/BLHeli_S%20SiLabs/Hex%20Files).
|
||||
|
||||
Для перепрошивки регулятора отдельно, нужно сделать все остальные неактивными. Для перепрошивки нужно нажать на кнопку Flash BLHeli.
|
||||
Для перепрошивки регуляторов нужно нажать на кнопку Flash BLHeli и выбрать файл прошивки с типом контроллера, название которого указано в рамке названия прошивки и находится сверху во вкладке Silabs ESC Setup (в случае контроллера, который используется в конструкторе Клевер 2, это A-H-70).
|
||||
|
||||
Для перепрошивки отдельного регулятора нужно сделать все остальные неактивными.
|
||||
|
||||
#### Видеоинструкция по перепрошивке ESC регуляторов
|
||||
|
||||
Для лучшего понимания того, что описано в статье, рекомендуем посмотреть наглядное руководство по подключению электроники и прошивке регуляторов на английском языке на [youtube](https://www.youtube.com/watch?v=i6lhMcQLRSU&feature=youtu.be).
|
||||
|
||||
|
||||
138
docs/snippets.md
@@ -57,6 +57,144 @@ while True:
|
||||
|
||||
---
|
||||
|
||||
Запуск полётной программы с пульта:
|
||||
|
||||
```python
|
||||
|
||||
#!/usr/bin/python
|
||||
import rospy
|
||||
import thread
|
||||
import sys
|
||||
import math
|
||||
from mavros_msgs.msg import RCIn
|
||||
from clever import srv
|
||||
from time import sleep
|
||||
from mavros_msgs.srv import SetMode
|
||||
from mavros_msgs.srv import CommandBool
|
||||
|
||||
states = ('start','stop','unknown')
|
||||
state = states[2]
|
||||
|
||||
rospy.init_node('Clever3_RC_Script')
|
||||
|
||||
navigate = rospy.ServiceProxy('/navigate', srv.Navigate)
|
||||
set_mode = rospy.ServiceProxy('/mavros/set_mode', SetMode)
|
||||
get_telemetry = rospy.ServiceProxy('/get_telemetry', srv.GetTelemetry)
|
||||
arming = rospy.ServiceProxy('/mavros/cmd/arming', CommandBool)
|
||||
|
||||
def get_distance(x1, y1, z1, x2, y2, z2):
|
||||
return math.sqrt((x1-x2)**2 + (y1-y2)**2 +(z1-z2)**2)
|
||||
|
||||
def takeoff (zp, sp = 1, tolerance = 0.2):
|
||||
start = get_telemetry()
|
||||
print navigate(z=zp, speed=sp, frame_id='fcu_horiz', auto_arm=True)
|
||||
while True:
|
||||
telem = get_telemetry()
|
||||
delta = abs(abs(telem.z - start.z)-zp)
|
||||
if delta < tolerance:
|
||||
break
|
||||
rospy.sleep(0.2)
|
||||
|
||||
def land(sp = 1, land_height = -1, tolerance = 0.25):
|
||||
print 'land!'
|
||||
z0 = get_telemetry(frame_id='local_origin').z
|
||||
print z0
|
||||
h = get_telemetry(frame_id='aruco_map').z
|
||||
print h
|
||||
print navigate(z=-h+land_height, speed=sp, frame_id='fcu_horiz')
|
||||
while True:
|
||||
z = get_telemetry(frame_id='local_origin').z
|
||||
delta = z0-z-h
|
||||
print delta
|
||||
if (abs(delta) < tolerance):
|
||||
print get_telemetry(frame_id='local_origin')
|
||||
arming(False)
|
||||
break
|
||||
rospy.sleep(0.2)
|
||||
|
||||
def flight_to_point(xp, yp, zp, sp = 1, breakable = True, tolerance = 0.2, constant_yaw = True):
|
||||
frame_id = 'aruco_map'
|
||||
if constant_yaw:
|
||||
current_yaw = get_telemetry(frame_id = 'aruco_map').yaw
|
||||
print navigate(frame_id=frame_id, x=xp, y=yp, z=zp, speed=sp, yaw = current_yaw)
|
||||
else:
|
||||
print navigate(frame_id=frame_id, x=xp, y=yp, z=zp, speed=sp)
|
||||
while True:
|
||||
if breakable and state == 'stop':
|
||||
return
|
||||
telem = get_telemetry(frame_id=frame_id)
|
||||
if get_distance(xp, yp, zp, telem.x, telem.y, telem.z) < tolerance:
|
||||
break
|
||||
rospy.sleep(0.2)
|
||||
|
||||
# copter parameters
|
||||
|
||||
speed = 1
|
||||
z = 1
|
||||
|
||||
# rectangle parameters
|
||||
|
||||
width = 1
|
||||
height = 1
|
||||
x0 = 0.1
|
||||
y0 = 0.6
|
||||
|
||||
# flight program
|
||||
|
||||
def flight_program (param):
|
||||
while True:
|
||||
|
||||
global state
|
||||
print 'waiting for stop!'
|
||||
while state != 'stop':
|
||||
rospy.sleep(0.1)
|
||||
print 'waiting for start...'
|
||||
while state == 'stop':
|
||||
rospy.sleep(0.1)
|
||||
print 'start!'
|
||||
|
||||
takeoff(z) #takeoff
|
||||
flight_to_point(x0, y0, z, speed)
|
||||
while True:
|
||||
flight_to_point(x0, y0 + height, z, speed)
|
||||
flight_to_point(x0 + width, y0 + height, z, speed)
|
||||
flight_to_point(x0 + width, y0, z, speed)
|
||||
flight_to_point(x0, y0, z, speed, breakable = False)
|
||||
if state == 'stop':
|
||||
break
|
||||
land()
|
||||
|
||||
# Вызывается при обновлении данных из топика
|
||||
def callback(data):
|
||||
global state
|
||||
# Обрабатываем данные с 6 канала пульта
|
||||
if data.channels[5] < 1100:
|
||||
state = states[1]
|
||||
elif data.channels[5] > 1900:
|
||||
state = states[0]
|
||||
else:
|
||||
state = states[2]
|
||||
|
||||
def listener():
|
||||
|
||||
# In ROS, nodes are uniquely named. If two nodes with the same
|
||||
# name are launched, the previous one is kicked off. The
|
||||
# anonymous=True flag means that rospy will choose a unique
|
||||
# name for our 'listener' node so that multiple listeners can
|
||||
# run simultaneously.
|
||||
|
||||
rospy.Subscriber('mavros/rc/in', RCIn, callback)
|
||||
|
||||
# spin() simply keeps python from exiting until this node is stopped
|
||||
|
||||
rospy.spin()
|
||||
|
||||
param = []
|
||||
thread.start_new_thread(flight_program, (param,))
|
||||
listener()
|
||||
```
|
||||
---
|
||||
|
||||
Флип:
|
||||
|
||||
TODO
|
||||
|
||||