mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-22 01:12:31 +00:00
rc_channels topic cleanup
This commit is contained in:
@@ -45,7 +45,6 @@
|
|||||||
|
|
||||||
#include <uORB/uORB.h>
|
#include <uORB/uORB.h>
|
||||||
#include <uORB/topics/sensor_combined.h>
|
#include <uORB/topics/sensor_combined.h>
|
||||||
#include <uORB/topics/rc_channels.h>
|
|
||||||
#include <uORB/topics/vehicle_attitude.h>
|
#include <uORB/topics/vehicle_attitude.h>
|
||||||
#include <uORB/topics/vehicle_gps_position.h>
|
#include <uORB/topics/vehicle_gps_position.h>
|
||||||
#include <uORB/topics/vehicle_global_position.h>
|
#include <uORB/topics/vehicle_global_position.h>
|
||||||
|
|||||||
@@ -1200,8 +1200,8 @@ int sdlog2_thread_main(int argc, char *argv[])
|
|||||||
if (copy_if_updated(ORB_ID(rc_channels), subs.rc_sub, &buf.rc)) {
|
if (copy_if_updated(ORB_ID(rc_channels), subs.rc_sub, &buf.rc)) {
|
||||||
log_msg.msg_type = LOG_RC_MSG;
|
log_msg.msg_type = LOG_RC_MSG;
|
||||||
/* Copy only the first 8 channels of 14 */
|
/* Copy only the first 8 channels of 14 */
|
||||||
memcpy(log_msg.body.log_RC.channel, buf.rc.chan, sizeof(log_msg.body.log_RC.channel));
|
memcpy(log_msg.body.log_RC.channel, buf.rc.channels, sizeof(log_msg.body.log_RC.channel));
|
||||||
log_msg.body.log_RC.channel_count = buf.rc.chan_count;
|
log_msg.body.log_RC.channel_count = buf.rc.channel_count;
|
||||||
log_msg.body.log_RC.signal_lost = buf.rc.signal_lost;
|
log_msg.body.log_RC.signal_lost = buf.rc.signal_lost;
|
||||||
LOGBUFFER_WRITE_AND_COUNT(RC);
|
LOGBUFFER_WRITE_AND_COUNT(RC);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1202,9 +1202,9 @@ Sensors::parameter_update_poll(bool forced)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf("CH0: RAW MAX: %d MIN %d S: %d MID: %d FUNC: %d\n", (int)_parameters.max[0], (int)_parameters.min[0], (int)(_rc.chan[0].scaling_factor * 10000), (int)(_rc.chan[0].mid), (int)_rc.function[0]);
|
printf("CH0: RAW MAX: %d MIN %d S: %d MID: %d FUNC: %d\n", (int)_parameters.max[0], (int)_parameters.min[0], (int)(_rc.channels[0].scaling_factor * 10000), (int)(_rc.channels[0].mid), (int)_rc.function[0]);
|
||||||
printf("CH1: RAW MAX: %d MIN %d S: %d MID: %d FUNC: %d\n", (int)_parameters.max[1], (int)_parameters.min[1], (int)(_rc.chan[1].scaling_factor * 10000), (int)(_rc.chan[1].mid), (int)_rc.function[1]);
|
printf("CH1: RAW MAX: %d MIN %d S: %d MID: %d FUNC: %d\n", (int)_parameters.max[1], (int)_parameters.min[1], (int)(_rc.channels[1].scaling_factor * 10000), (int)(_rc.channels[1].mid), (int)_rc.function[1]);
|
||||||
printf("MAN: %d %d\n", (int)(_rc.chan[0].scaled * 100), (int)(_rc.chan[1].scaled * 100));
|
printf("MAN: %d %d\n", (int)(_rc.channels[0] * 100), (int)(_rc.channels[1] * 100));
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
#endif
|
#endif
|
||||||
@@ -1334,7 +1334,7 @@ float
|
|||||||
Sensors::get_rc_value(enum RC_CHANNELS_FUNCTION func, float min_value, float max_value)
|
Sensors::get_rc_value(enum RC_CHANNELS_FUNCTION func, float min_value, float max_value)
|
||||||
{
|
{
|
||||||
if (_rc.function[func] >= 0) {
|
if (_rc.function[func] >= 0) {
|
||||||
float value = _rc.chan[_rc.function[func]].scaled;
|
float value = _rc.channels[_rc.function[func]];
|
||||||
|
|
||||||
if (value < min_value) {
|
if (value < min_value) {
|
||||||
return min_value;
|
return min_value;
|
||||||
@@ -1355,7 +1355,7 @@ switch_pos_t
|
|||||||
Sensors::get_rc_sw3pos_position(enum RC_CHANNELS_FUNCTION func, float on_th, bool on_inv, float mid_th, bool mid_inv)
|
Sensors::get_rc_sw3pos_position(enum RC_CHANNELS_FUNCTION func, float on_th, bool on_inv, float mid_th, bool mid_inv)
|
||||||
{
|
{
|
||||||
if (_rc.function[func] >= 0) {
|
if (_rc.function[func] >= 0) {
|
||||||
float value = 0.5f * _rc.chan[_rc.function[func]].scaled + 0.5f;
|
float value = 0.5f * _rc.channels[_rc.function[func]] + 0.5f;
|
||||||
|
|
||||||
if (on_inv ? value < on_th : value > on_th) {
|
if (on_inv ? value < on_th : value > on_th) {
|
||||||
return SWITCH_POS_ON;
|
return SWITCH_POS_ON;
|
||||||
@@ -1376,7 +1376,7 @@ switch_pos_t
|
|||||||
Sensors::get_rc_sw2pos_position(enum RC_CHANNELS_FUNCTION func, float on_th, bool on_inv)
|
Sensors::get_rc_sw2pos_position(enum RC_CHANNELS_FUNCTION func, float on_th, bool on_inv)
|
||||||
{
|
{
|
||||||
if (_rc.function[func] >= 0) {
|
if (_rc.function[func] >= 0) {
|
||||||
float value = 0.5f * _rc.chan[_rc.function[func]].scaled + 0.5f;
|
float value = 0.5f * _rc.channels[_rc.function[func]] + 0.5f;
|
||||||
|
|
||||||
if (on_inv ? value < on_th : value > on_th) {
|
if (on_inv ? value < on_th : value > on_th) {
|
||||||
return SWITCH_POS_ON;
|
return SWITCH_POS_ON;
|
||||||
@@ -1468,25 +1468,25 @@ Sensors::rc_poll()
|
|||||||
* DO NOT REMOVE OR ALTER STEP 1!
|
* DO NOT REMOVE OR ALTER STEP 1!
|
||||||
*/
|
*/
|
||||||
if (rc_input.values[i] > (_parameters.trim[i] + _parameters.dz[i])) {
|
if (rc_input.values[i] > (_parameters.trim[i] + _parameters.dz[i])) {
|
||||||
_rc.chan[i].scaled = (rc_input.values[i] - _parameters.trim[i] - _parameters.dz[i]) / (float)(_parameters.max[i] - _parameters.trim[i] - _parameters.dz[i]);
|
_rc.channels[i] = (rc_input.values[i] - _parameters.trim[i] - _parameters.dz[i]) / (float)(_parameters.max[i] - _parameters.trim[i] - _parameters.dz[i]);
|
||||||
|
|
||||||
} else if (rc_input.values[i] < (_parameters.trim[i] - _parameters.dz[i])) {
|
} else if (rc_input.values[i] < (_parameters.trim[i] - _parameters.dz[i])) {
|
||||||
_rc.chan[i].scaled = (rc_input.values[i] - _parameters.trim[i] + _parameters.dz[i]) / (float)(_parameters.trim[i] - _parameters.min[i] - _parameters.dz[i]);
|
_rc.channels[i] = (rc_input.values[i] - _parameters.trim[i] + _parameters.dz[i]) / (float)(_parameters.trim[i] - _parameters.min[i] - _parameters.dz[i]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* in the configured dead zone, output zero */
|
/* in the configured dead zone, output zero */
|
||||||
_rc.chan[i].scaled = 0.0f;
|
_rc.channels[i] = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
_rc.chan[i].scaled *= _parameters.rev[i];
|
_rc.channels[i] *= _parameters.rev[i];
|
||||||
|
|
||||||
/* handle any parameter-induced blowups */
|
/* handle any parameter-induced blowups */
|
||||||
if (!isfinite(_rc.chan[i].scaled)) {
|
if (!isfinite(_rc.channels[i])) {
|
||||||
_rc.chan[i].scaled = 0.0f;
|
_rc.channels[i] = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_rc.chan_count = rc_input.channel_count;
|
_rc.channel_count = rc_input.channel_count;
|
||||||
_rc.rssi = rc_input.rssi;
|
_rc.rssi = rc_input.rssi;
|
||||||
_rc.signal_lost = signal_lost;
|
_rc.signal_lost = signal_lost;
|
||||||
_rc.timestamp = rc_input.timestamp_last_signal;
|
_rc.timestamp = rc_input.timestamp_last_signal;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved.
|
* Copyright (c) 2012-2014 PX4 Development Team. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@@ -42,60 +42,44 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "../uORB.h"
|
#include "../uORB.h"
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of RC channel inputs supported.
|
|
||||||
* Current (Q4/2013) radios support up to 18 channels,
|
|
||||||
* leaving at a sane value of 16.
|
|
||||||
* This number can be greater then number of RC channels,
|
|
||||||
* because single RC channel can be mapped to multiple
|
|
||||||
* functions, e.g. for various mode switches.
|
|
||||||
*/
|
|
||||||
#define RC_CHANNELS_MAPPED_MAX 16
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This defines the mapping of the RC functions.
|
* This defines the mapping of the RC functions.
|
||||||
* The value assigned to the specific function corresponds to the entry of
|
* The value assigned to the specific function corresponds to the entry of
|
||||||
* the channel array chan[].
|
* the channel array channels[].
|
||||||
*/
|
*/
|
||||||
enum RC_CHANNELS_FUNCTION {
|
enum RC_CHANNELS_FUNCTION {
|
||||||
THROTTLE = 0,
|
THROTTLE = 0,
|
||||||
ROLL = 1,
|
ROLL,
|
||||||
PITCH = 2,
|
PITCH,
|
||||||
YAW = 3,
|
YAW,
|
||||||
MODE = 4,
|
MODE,
|
||||||
RETURN = 5,
|
RETURN,
|
||||||
POSCTL = 6,
|
POSCTL,
|
||||||
LOITER = 7,
|
LOITER,
|
||||||
OFFBOARD_MODE = 8,
|
OFFBOARD_MODE,
|
||||||
ACRO = 9,
|
ACRO,
|
||||||
FLAPS = 10,
|
FLAPS,
|
||||||
AUX_1 = 11,
|
AUX_1,
|
||||||
AUX_2 = 12,
|
AUX_2,
|
||||||
AUX_3 = 13,
|
AUX_3,
|
||||||
AUX_4 = 14,
|
AUX_4,
|
||||||
AUX_5 = 15,
|
AUX_5,
|
||||||
RC_CHANNELS_FUNCTION_MAX /**< indicates the number of functions. There can be more functions than RC channels. */
|
RC_CHANNELS_FUNCTION_MAX /**< Indicates the number of functions. There can be more functions than RC channels. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup topics
|
* @addtogroup topics
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct rc_channels_s {
|
struct rc_channels_s {
|
||||||
|
uint64_t timestamp; /**< Timestamp in microseconds since boot time */
|
||||||
uint64_t timestamp; /**< In microseconds since boot time. */
|
uint64_t timestamp_last_valid; /**< Timestamp of last valid RC signal */
|
||||||
uint64_t timestamp_last_valid; /**< timestamp of last valid RC signal. */
|
float channels[RC_CHANNELS_FUNCTION_MAX]; /**< Scaled to -1..1 (throttle: 0..1) */
|
||||||
struct {
|
uint8_t channel_count; /**< Number of valid channels */
|
||||||
float scaled; /**< Scaled to -1..1 (throttle: 0..1) */
|
char function_name[RC_CHANNELS_FUNCTION_MAX][20]; /**< String array to store the names of the functions */
|
||||||
} chan[RC_CHANNELS_MAPPED_MAX];
|
int8_t function[RC_CHANNELS_FUNCTION_MAX]; /**< Functions mapping */
|
||||||
uint8_t chan_count; /**< number of valid channels */
|
uint8_t rssi; /**< Receive signal strength index */
|
||||||
|
bool signal_lost; /**< Control signal lost, should be checked together with topic timeout */
|
||||||
/*String array to store the names of the functions*/
|
|
||||||
char function_name[RC_CHANNELS_FUNCTION_MAX][20];
|
|
||||||
int8_t function[RC_CHANNELS_FUNCTION_MAX];
|
|
||||||
uint8_t rssi; /**< Overall receive signal strength */
|
|
||||||
bool signal_lost; /**< control signal lost, should be checked together with topic timeout */
|
|
||||||
}; /**< radio control channels. */
|
}; /**< radio control channels. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user