1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-24 16:55:29 +03:00

Add headtracker axis ratios

This commit is contained in:
Marcelo Bezerra 2024-06-17 19:51:41 +02:00
parent 29a2d6935b
commit 0849408fa1
6 changed files with 61 additions and 7 deletions

View file

@ -1822,6 +1822,36 @@ This setting limits yaw rotation rate that HEADING_HOLD controller can request f
---
### headtracker_pan_ratio
Head pan movement vs camera movement ratio
| Default | Min | Max |
| --- | --- | --- |
| 1 | 0 | 3 |
---
### headtracker_roll_ratio
Head roll movement vs camera movement ratio
| Default | Min | Max |
| --- | --- | --- |
| 1 | 0 | 3 |
---
### headtracker_tilt_ratio
Head tilt movement vs camera movement ratio
| Default | Min | Max |
| --- | --- | --- |
| 1 | 0 | 3 |
---
### headtracker_type
Type of headtrackr dervice

View file

@ -40,7 +40,7 @@
#include "drivers/headtracker_common.h"
PG_REGISTER_WITH_RESET_TEMPLATE(headTrackerConfig_t, headTrackerConfig, PG_HEADTRACKER_CONFIG, 0);
PG_REGISTER_WITH_RESET_TEMPLATE(headTrackerConfig_t, headTrackerConfig, PG_HEADTRACKER_CONFIG, 1);
PG_RESET_TEMPLATE(headTrackerConfig_t, headTrackerConfig,
.devType = SETTING_HEADTRACKER_TYPE_DEFAULT

View file

@ -70,6 +70,9 @@ typedef struct headTrackerVTable_s {
typedef struct headTrackerConfig_s {
headTrackerDevType_e devType;
float pan_ratio;
float tilt_ratio;
float roll_ratio;
} headTrackerConfig_t;
PG_DECLARE(headTrackerConfig_t, headTrackerConfig);

View file

@ -4251,3 +4251,24 @@ groups:
field: devType
type: uint8_t
table: headtracker_dev_type
- name: headtracker_pan_ratio
description: "Head pan movement vs camera movement ratio"
type: float
default_value: 1
field: tilt_ratio
min: 0
max: 3
- name: headtracker_tilt_ratio
description: "Head tilt movement vs camera movement ratio"
type: float
default_value: 1
field: tilt_ratio
min: 0
max: 3
- name: headtracker_roll_ratio
description: "Head roll movement vs camera movement ratio"
type: float
default_value: 1
field: tilt_ratio
min: 0
max: 3

View file

@ -317,9 +317,9 @@ void gimbalSerialHeadTrackerReceive(uint16_t c, void *data)
state->attitude.crcl = c;
if(checkCrc(&(state->attitude))) {
state->expires = micros() + MAX_HEADTRACKER_DATA_AGE_US;
state->pan = state->attitude.pan;
state->tilt = state->attitude.tilt;
state->roll = state->attitude.roll;
state->pan = constrain(state->attitude.pan * headTrackerConfig()->pan_ratio) + 0.5, -2048, 2047);
state->tilt = constrain(state->attitude.tilt * headTrackerConfig()->tilt_ratio) + 0.5, -2048, 2047);
state->roll = constrain(state->attitude.roll * headTrackerConfig()->roll_ratio) + 0.5, -2048, 2047);
DEBUG_SET(DEBUG_HEADTRACKING, 2, pktCount++);
} else {
DEBUG_SET(DEBUG_HEADTRACKING, 3, errorCount++);

View file

@ -73,9 +73,9 @@ void mspHeadTrackerReceiverNewData(uint8_t *data, int dataSize)
headtrackerMspMessage_t *status = (headtrackerMspMessage_t *)data;
headTrackerMspDevice.pan = status->pan;
headTrackerMspDevice.tilt = status->tilt;
headTrackerMspDevice.roll = status->roll;
headTrackerMspDevice.pan = constrain((status->pan * headTrackerConfig()->pan_ratio) + 0.5, -2048, 2047);
headTrackerMspDevice.tilt = constrain((status->tilt * headTrackerConfig()->tilt_ratio) + 0.5, -2048, 2047);
headTrackerMspDevice.roll = constrain((status->roll * headTrackerConfig()->roll_ratio) + 0.5, -2048, 2047);
headTrackerMspDevice.expires = micros() + MAX_HEADTRACKER_DATA_AGE_US;
UNUSED(status);