simple_offboard: refactor api, remove */yaw_rate services

This commit is contained in:
Oleg Kalachev
2018-03-09 02:28:52 +03:00
parent bf054ef9f5
commit 97b8eb435a
13 changed files with 103 additions and 229 deletions

View File

@@ -16,15 +16,15 @@ Simple offboard
* `z` — высота в системе координат `frame_id`;
* `lat`, `lon` широта и долгота (в градусах);
* `yaw` — рысканье в радианах в системе координат `frame_id` (0 коптер смотрит по оси X);
* `yaw_rate` — угловая скорость по рысканью в радианах в секунду (против часовой);
* `thrust` — уровень газа (от 0 [нет газа] до 1 [полный газ]).
* `yaw_rate` — угловая скорость по рысканью в радианах в секунду (против часовой), `yaw` должен быть установлен в NaN;
* `thrust` — уровень газа от 0 (нет газа) до 1 (полный газ).
> **Warning** API модуля `simple_offboard` на данный момент нестабилен и может измениться.
Использование из языка Python
---
Объявление прокси ко всем сервисам:
Пример программы, объявляющей прокси ко всем сервисам:
```python
import rospy
@@ -35,26 +35,16 @@ rospy.init_node('foo')
# Создаем прокси ко всем сервисам:
navigate = rospy.ServiceProxy('/navigate', srv.Navigate)
set_position = rospy.ServiceProxy('/set_position', srv.SetPosition)
set_position_yaw_rate =
rospy.ServiceProxy('/set_position/yaw_rate', srv.SetPositionYawRate)
set_position_global = rospy.ServiceProxy('/set_position_global', srv.SetPositionGlobal)
set_position_global_yaw_rate = rospy.ServiceProxy('/set_position_global/yaw_rate', srv.SetPositionGlobalYawRate)
set_velocity = rospy.ServiceProxy('/set_velocity', srv.SetVelocity)
set_velocity_yaw_rate = rospy.ServiceProxy('/set_Velocity/yaw_rate', srv.SetVelocityYawRate)
set_attitude = rospy.ServiceProxy('/set_attitude', srv.SetAttitude)
set_attitude_yaw_rate = rospy.ServiceProxy('/set_attitude/yaw_rate', srv.SetAttitudeYawRate)
set_rates_yaw = rospy.ServiceProxy('/set_rates/yaw', srv.SetRatesYaw)
set_rates = rospy.ServiceProxy('/set_rates', srv.SetRates)
get_telemetry = rospy.ServiceProxy('/get_telemetry', srv.GetTelemetry)
release = rospy.ServiceProxy('/release', Trigger)
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal)
set_position = rospy.ServiceProxy('set_position', srv.SetPosition)
set_position_global = rospy.ServiceProxy('set_position_global', srv.SetPositionGlobal)
set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity)
set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)
set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
land = rospy.ServiceProxy('land', Trigger)
release = rospy.ServiceProxy('release', Trigger)
```
Неиспользуемые фукнции-прокси можно удалить из кода.
@@ -72,8 +62,8 @@ release = rospy.ServiceProxy('/release', Trigger)
* `connected` есть ли подключение к <abbr title="Flight Control Unit, полетный контроллер">FCU</abbr>
* `armed` состояние `armed` винтов (винты включены, если true)
* `mode` - текущий [полетный режим](/docs/modes.md)
* `x, y, z`  локальная позиция коптера
* `lat, lon` широта, долгота (при наличии [gps](/docs/gps.md))
* `x, y, z` позиция коптера в системе координат `frame_id`
* `lat, lon` текущая широта и долгота (при наличии [gps](/docs/gps.md))
* `vx, vy, vz` скорость коптера
* `pitch`  угол по тангажу (радианы)
* `roll` угол по крену (радианы)
@@ -103,10 +93,11 @@ rosservice call /get_telemetry "{frame_id: ''}"
Параметры:
* x, y, z координаты в системе `frame_id`
* yaw угол по рысканью
* speed скорость полета (скорость движения setpoint)
* frame_id, update_frame, auto_arm.
* `x`, `y`, `z` координаты в системе `frame_id`
* `yaw` угол по рысканью
* `yaw_rate` угловая скорость по рысканью (при установке yaw в NaN)
* `speed` скорость полета (скорость движения setpoint)
* `frame_id`, `update_frame`, `auto_arm`.
Примеры:
@@ -134,6 +125,7 @@ navigate(x=3, y=2, z=2, speed=1, frame_id='aruco_map', update_frame=True)
```
Пример взлета на коптере на 2 метра из командной строки:
```bash
rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, speed: 0.5, frame_id: 'fcu_horiz', update_frame: false, auto_arm: true}"
```
@@ -146,11 +138,12 @@ rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, speed: 0.5, frame_id
Параметры:
* lat, lon широта и долгота
* z высота в системе координат `frame_id`
* yaw угол по рысканью
* speed скорость полета (скорость движения setpoint)
* frame_id, update_frame, auto_arm.
* `lat`, `lon` широта и долгота;
* `z` высота в системе координат `frame_id`;
* `yaw` угол по рысканью;
* `yaw_rate` угловая скорость по рысканью (при установке yaw в NaN);
* `speed` скорость полета (скорость движения setpoint);
* `frame_id`, `update_frame`, `auto_arm`.
Объявление прокси к сервису:
@@ -172,12 +165,18 @@ rosservice call /navigate_global "{lat: 55.707033, lon: 37.725010, z: 0.0, yaw:
### set_position
Установить цель по позиции и рысканью.
Установить цель по позиции и рысканью.
Параметры:
* `x`, `y`, `z` координаты точки в системе координат `frame_id`;
* `yaw` угол по рысканью;
* `yaw_rate` угловая скорость по рысканью (при установке yaw в NaN);
* `speed` скорость полета (скорость движения setpoint);
* `frame_id`, `update_frame`, `auto_arm`.
> **Hint** Для полета на точку по прямой или взлета используйте более высокоуровневый сервис `navigate`.
Параметры: x, y, z, yaw, frame_id, update_frame
Задание позиции относительно текущей позиции коптера:
```python
@@ -199,76 +198,61 @@ set_position(x=0, y=-1, z=0, frame_id='fcu_horiz') # пролететь впр
set_position(x=2, y=2, z=3, frame_id='aruco_map', update_frame=True) # полет в координату 2:2, высота 3 метра
```
### set_position_yaw_rate
Вращение на месте со скоростью 0.5 рад/c:
Установить цель по позиции и угловую скорость по рысканью.
Параметры: x, y, z, yaw_rate, frame_id, update_frame
### set_position_global
> **Hint** Для полета в точку в глобальной системе координат по прямой используйте более высокоуровневый сервис `navigate_global`.
Установить цель по позиции в глобальной системе координат (широта/долгота).
Параметры: lat (широта), lon (долгота), z (высота в системе координат frame_id), yaw (рысканье в системе координат frame_id), update_frame.
Полет в глобальную точку (оставаясь на текущей высоте):
```python
set_position_global(lat=55.707033, lon=37.725010, z=0, frame_id='fcu_horiz')
set_position(x=0, y=0, z=0, frame_id='fcu_horiz', yaw=float('nan'), yaw_rate=0.5)
```
### set_position_global_yaw_rate
Полет в позицию в глобальной системе координат вращаясь с заданной скоростью по рысканью.
Параметры: lat (широта), lon (долгота), z (высота в системе координат frame_id), yaw_rate (угловая скорость по рысканью), update_frame.
### set_velocity
Установить скорости и рысканье. Параметр `frame_id` влияет только на ориентацию результирующего вектора скорости, но не на его длину.
Установить скорости и рысканье.
* `vx`, `vy`, `vz` требуемая скорость полета;
* `yaw` угол по рысканью;
* `yaw_rate` угловая скорость по рысканью (при установке yaw в NaN);
* `frame_id`, `update_frame`, `auto_arm`.
> **Note** Параметр `frame_id` влияет только на ориентацию результирующего вектора скорости, но не на его длину.
Параметры: vx, vy, vz, yaw, frame_id, update_frame
Полет вперед (относительно коптера) со скоростью 1 м/с:
```python
set_velocity(vx=1, vy=0.0, vz=0, frame_id: 'fcu_horiz')
```
Полет по кругу:
```python
set_velocity_yaw_rate(vx=0.2, vy=0.0, vz=0, yaw_rate=0.5, frame_id: 'fcu_horiz', update_frame: true)
set_velocity(vx=0.2, vy=0.0, vz=0, yaw=float('nan'), yaw_rate=0.5, frame_id: 'fcu_horiz', update_frame: True)
```
### set_velocity_yaw_rate
Установить скорости и угловую скорость по рысканью.
Параметры: vx, vy, vz, yaw_rate, frame_id, update_frame
### set_attitude
Установить тангаж, крен, рысканье и уровень газа. Имеет смысл использовать этот сервис со значением frame_id равным `fcu_horiz`.
Установить тангаж, крен, рысканье и уровень газа.
Параметры: pitch, roll, yaw, thrust, frame_id, update_frame
> **Note** Параметр `frame_id` определяет систему координат, в которой задается `yaw`.
### set_attitude_yaw_rate
Параметры:
Установить тангаж, крен, угловую скорость по рысканью и уровень газа. Имеет смысл использовать этот сервис со значением frame_id равным `fcu_horiz`. **Возможно, не поддерживается в PX4**.
Параметры: pitch, roll, yaw_rate, thrust
### set_rates_yaw
Установить угловые скорости по тангажу и крену, рысканье и уровень газа.
Параметры: pitch_rate, roll_rate, yaw, thrust, frame_id, update_frame
* `pitch`, `roll`, `yaw` – необходимый угол по тангажу, крену и рысканью (рад.);
* `thrust` – уровень газа от 0 (нет газа) до 1 (полный газ);
* `frame_id`, `update_frame`.
### set_rates
Установить угловые скорости по тагажу, крену и рысканью и уровень газа.
Параметры: pitch_rate, roll_rate, yaw_rate, thrust
Параметры:
* pitch_rate, roll_rate, yaw_rate – угловая скорость по танажу, крену и рыканью (рад/с);
* thrust уровень газа от 0 (нет газа) до 1 (полный газ).
### release
Перестать публиковать команды коптеру (отпустить управление).
Перестать публиковать sepoint'ы коптеру (отпустить управление).
Возможно продолжение управления средствами [MAVROS](/docs/mavros.md), [Веб-пультом управления](/docs/web_rc.md).
Посадка