mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-16 05:30:35 +08:00
drivers/actuators/modalai_esc --> modal_io and rename UART_ESC prefix to MODAL_IO (#20995)
This commit is contained in:
@@ -5,7 +5,7 @@ CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS6"
|
||||
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS4"
|
||||
CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS1"
|
||||
CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS3"
|
||||
CONFIG_DRIVERS_ACTUATORS_MODALAI_ESC=y
|
||||
CONFIG_DRIVERS_ACTUATORS_MODAL_IO=y
|
||||
CONFIG_DRIVERS_ADC_ADS1115=y
|
||||
CONFIG_DRIVERS_ADC_BOARD_ADC=y
|
||||
CONFIG_COMMON_BAROMETERS=y
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
# ModalAI FC-v1 specific board sensors init
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
if param greater UART_ESC_CONFIG 0
|
||||
if param greater MODAL_IO_CONFIG 0
|
||||
then
|
||||
modalai_esc start
|
||||
modal_io start
|
||||
fi
|
||||
|
||||
board_adc start
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
#define BOARD_NUM_IO_TIMERS 5
|
||||
|
||||
// J4 / TELEM3 / UART2
|
||||
#define MODALAI_ESC_DEFAULT_PORT "/dev/ttyS1"
|
||||
#define MODAL_IO_DEFAULT_PORT "/dev/ttyS1"
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ CONFIG_BOARD_ARCHITECTURE="cortex-m7"
|
||||
CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0"
|
||||
CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS6"
|
||||
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS4"
|
||||
CONFIG_DRIVERS_ACTUATORS_MODALAI_ESC=y
|
||||
CONFIG_DRIVERS_ACTUATORS_MODAL_IO=y
|
||||
CONFIG_DRIVERS_ADC_ADS1115=y
|
||||
CONFIG_DRIVERS_ADC_BOARD_ADC=y
|
||||
CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP201XX=y
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
# ModalAI FC-v2 specific board sensors init
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
if param greater UART_ESC_CONFIG 0
|
||||
if param greater MODAL_IO_CONFIG 0
|
||||
then
|
||||
modalai_esc start
|
||||
modal_io start
|
||||
fi
|
||||
|
||||
board_adc start
|
||||
|
||||
@@ -339,7 +339,7 @@
|
||||
#define BOARD_NUM_IO_TIMERS 5
|
||||
|
||||
// J1 / TELEM1 / USART7
|
||||
#define MODALAI_ESC_DEFAULT_PORT "/dev/ttyS6"
|
||||
#define MODAL_IO_DEFAULT_PORT "/dev/ttyS6"
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
CONFIG_PLATFORM_QURT=y
|
||||
CONFIG_BOARD_TOOLCHAIN="qurt"
|
||||
CONFIG_DRIVERS_ACTUATORS_MODALAI_ESC=y
|
||||
CONFIG_DRIVERS_ACTUATORS_MODAL_IO=y
|
||||
CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y
|
||||
CONFIG_DRIVERS_QSHELL_QURT=y
|
||||
CONFIG_MODULES_EKF2=y
|
||||
|
||||
@@ -62,4 +62,4 @@
|
||||
/*
|
||||
* Default port for the ESC
|
||||
*/
|
||||
#define MODALAI_ESC_DEFAULT_PORT "2"
|
||||
#define MODAL_IO_DEFAULT_PORT "2"
|
||||
|
||||
@@ -20,4 +20,4 @@ muorb start
|
||||
|
||||
qshell icm42688p start -s
|
||||
|
||||
qshell modalai_esc start
|
||||
qshell modal_io start
|
||||
|
||||
+6
-6
@@ -32,16 +32,16 @@
|
||||
############################################################################
|
||||
|
||||
px4_add_module(
|
||||
MODULE drivers__actuators__modalai_esc
|
||||
MAIN modalai_esc
|
||||
MODULE drivers__actuators__modal_io
|
||||
MAIN modal_io
|
||||
SRCS
|
||||
crc16.c
|
||||
crc16.h
|
||||
|
||||
modalai_esc_serial.cpp
|
||||
modalai_esc_serial.hpp
|
||||
modalai_esc.cpp
|
||||
modalai_esc.hpp
|
||||
modal_io_serial.cpp
|
||||
modal_io_serial.hpp
|
||||
modal_io.cpp
|
||||
modal_io.hpp
|
||||
qc_esc_packet_types.h
|
||||
qc_esc_packet.c
|
||||
qc_esc_packet.h
|
||||
@@ -0,0 +1,5 @@
|
||||
menuconfig DRIVERS_ACTUATORS_MODAL_IO
|
||||
bool "modal_io"
|
||||
default n
|
||||
---help---
|
||||
Enable support for modal_io
|
||||
+107
-107
@@ -33,34 +33,34 @@
|
||||
|
||||
#include <px4_platform_common/getopt.h>
|
||||
|
||||
#include "modalai_esc.hpp"
|
||||
#include "modalai_esc_serial.hpp"
|
||||
#include "modal_io.hpp"
|
||||
#include "modal_io_serial.hpp"
|
||||
|
||||
// utility for running on VOXL and using driver as a bridge
|
||||
#define MODALAI_ESC_VOXL_BRIDGE_PORT "/dev/ttyS4"
|
||||
#define MODAL_IO_VOXL_BRIDGE_PORT "/dev/ttyS4"
|
||||
|
||||
// future use:
|
||||
#define MODALAI_PUBLISH_ESC_STATUS 0
|
||||
|
||||
const char *_device;
|
||||
|
||||
ModalaiEsc::ModalaiEsc() :
|
||||
OutputModuleInterface(MODULE_NAME, px4::serial_port_to_wq(MODALAI_ESC_DEFAULT_PORT)),
|
||||
_mixing_output{"UART_ESC", MODALAI_ESC_OUTPUT_CHANNELS, *this, MixingOutput::SchedulingPolicy::Auto, false, false},
|
||||
ModalIo::ModalIo() :
|
||||
OutputModuleInterface(MODULE_NAME, px4::serial_port_to_wq(MODAL_IO_DEFAULT_PORT)),
|
||||
_mixing_output{"MODAL_IO", MODAL_IO_OUTPUT_CHANNELS, *this, MixingOutput::SchedulingPolicy::Auto, false, false},
|
||||
_cycle_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")),
|
||||
_output_update_perf(perf_alloc(PC_INTERVAL, MODULE_NAME": output update interval"))
|
||||
{
|
||||
_device = MODALAI_ESC_DEFAULT_PORT;
|
||||
_device = MODAL_IO_DEFAULT_PORT;
|
||||
|
||||
_mixing_output.setAllFailsafeValues(0);
|
||||
_mixing_output.setAllDisarmedValues(0);
|
||||
|
||||
_esc_status.timestamp = hrt_absolute_time();
|
||||
_esc_status.counter = 0;
|
||||
_esc_status.esc_count = MODALAI_ESC_OUTPUT_CHANNELS;
|
||||
_esc_status.esc_count = MODAL_IO_OUTPUT_CHANNELS;
|
||||
_esc_status.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_SERIAL;
|
||||
|
||||
for (unsigned i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (unsigned i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
_esc_status.esc[i].timestamp = 0;
|
||||
_esc_status.esc[i].esc_address = 0;
|
||||
_esc_status.esc[i].esc_rpm = 0;
|
||||
@@ -79,7 +79,7 @@ ModalaiEsc::ModalaiEsc() :
|
||||
_fb_idx = 0;
|
||||
}
|
||||
|
||||
ModalaiEsc::~ModalaiEsc()
|
||||
ModalIo::~ModalIo()
|
||||
{
|
||||
_outputs_on = false;
|
||||
|
||||
@@ -97,7 +97,7 @@ ModalaiEsc::~ModalaiEsc()
|
||||
perf_free(_output_update_perf);
|
||||
}
|
||||
|
||||
int ModalaiEsc::init()
|
||||
int ModalIo::init()
|
||||
{
|
||||
|
||||
/* Getting initial parameter values */
|
||||
@@ -107,8 +107,8 @@ int ModalaiEsc::init()
|
||||
return ret;
|
||||
}
|
||||
|
||||
_uart_port = new ModalaiEscSerial();
|
||||
_uart_port_bridge = new ModalaiEscSerial();
|
||||
_uart_port = new ModalIoSerial();
|
||||
_uart_port_bridge = new ModalIoSerial();
|
||||
memset(&_esc_chans, 0x00, sizeof(_esc_chans));
|
||||
|
||||
//get_instance()->ScheduleOnInterval(10000); //100hz
|
||||
@@ -118,79 +118,79 @@ int ModalaiEsc::init()
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEsc::load_params(uart_esc_params_t *params, ch_assign_t *map)
|
||||
int ModalIo::load_params(modal_io_params_t *params, ch_assign_t *map)
|
||||
{
|
||||
int ret = PX4_OK;
|
||||
|
||||
// initialize out
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
params->function_map[i] = (int)OutputFunction::Disabled;
|
||||
params->direction_map[i] = 0;
|
||||
params->motor_map[i] = 0;
|
||||
}
|
||||
|
||||
param_get(param_find("UART_ESC_CONFIG"), ¶ms->config);
|
||||
param_get(param_find("UART_ESC_MODE"), ¶ms->mode);
|
||||
param_get(param_find("UART_ESC_BAUD"), ¶ms->baud_rate);
|
||||
param_get(param_find("MODAL_IO_CONFIG"), ¶ms->config);
|
||||
param_get(param_find("MODAL_IO_MODE"), ¶ms->mode);
|
||||
param_get(param_find("MODAL_IO_BAUD"), ¶ms->baud_rate);
|
||||
|
||||
param_get(param_find("UART_ESC_T_PERC"), ¶ms->turtle_motor_percent);
|
||||
param_get(param_find("UART_ESC_T_DEAD"), ¶ms->turtle_motor_deadband);
|
||||
param_get(param_find("UART_ESC_T_EXPO"), ¶ms->turtle_motor_expo);
|
||||
param_get(param_find("UART_ESC_T_MINF"), ¶ms->turtle_stick_minf);
|
||||
param_get(param_find("UART_ESC_T_COSP"), ¶ms->turtle_cosphi);
|
||||
param_get(param_find("MODAL_IO_T_PERC"), ¶ms->turtle_motor_percent);
|
||||
param_get(param_find("MODAL_IO_T_DEAD"), ¶ms->turtle_motor_deadband);
|
||||
param_get(param_find("MODAL_IO_T_EXPO"), ¶ms->turtle_motor_expo);
|
||||
param_get(param_find("MODAL_IO_T_MINF"), ¶ms->turtle_stick_minf);
|
||||
param_get(param_find("MODAL_IO_T_COSP"), ¶ms->turtle_cosphi);
|
||||
|
||||
param_get(param_find("UART_ESC_FUNC1"), ¶ms->function_map[0]);
|
||||
param_get(param_find("UART_ESC_FUNC2"), ¶ms->function_map[1]);
|
||||
param_get(param_find("UART_ESC_FUNC3"), ¶ms->function_map[2]);
|
||||
param_get(param_find("UART_ESC_FUNC4"), ¶ms->function_map[3]);
|
||||
param_get(param_find("MODAL_IO_FUNC1"), ¶ms->function_map[0]);
|
||||
param_get(param_find("MODAL_IO_FUNC2"), ¶ms->function_map[1]);
|
||||
param_get(param_find("MODAL_IO_FUNC3"), ¶ms->function_map[2]);
|
||||
param_get(param_find("MODAL_IO_FUNC4"), ¶ms->function_map[3]);
|
||||
|
||||
param_get(param_find("UART_ESC_SDIR1"), ¶ms->direction_map[0]);
|
||||
param_get(param_find("UART_ESC_SDIR2"), ¶ms->direction_map[1]);
|
||||
param_get(param_find("UART_ESC_SDIR3"), ¶ms->direction_map[2]);
|
||||
param_get(param_find("UART_ESC_SDIR4"), ¶ms->direction_map[3]);
|
||||
param_get(param_find("MODAL_IO_SDIR1"), ¶ms->direction_map[0]);
|
||||
param_get(param_find("MODAL_IO_SDIR2"), ¶ms->direction_map[1]);
|
||||
param_get(param_find("MODAL_IO_SDIR3"), ¶ms->direction_map[2]);
|
||||
param_get(param_find("MODAL_IO_SDIR4"), ¶ms->direction_map[3]);
|
||||
|
||||
param_get(param_find("UART_ESC_RPM_MIN"), ¶ms->rpm_min);
|
||||
param_get(param_find("UART_ESC_RPM_MAX"), ¶ms->rpm_max);
|
||||
param_get(param_find("MODAL_IO_RPM_MIN"), ¶ms->rpm_min);
|
||||
param_get(param_find("MODAL_IO_RPM_MAX"), ¶ms->rpm_max);
|
||||
|
||||
if (params->rpm_min >= params->rpm_max) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_RPM_MIN. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_RPM_MIN. Please verify parameters.");
|
||||
params->rpm_min = 0;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
if (params->turtle_motor_percent < 0 || params->turtle_motor_percent > 100) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_T_PERC. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_T_PERC. Please verify parameters.");
|
||||
params->turtle_motor_percent = 0;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
if (params->turtle_motor_deadband < 0 || params->turtle_motor_deadband > 100) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_T_DEAD. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_T_DEAD. Please verify parameters.");
|
||||
params->turtle_motor_deadband = 0;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
if (params->turtle_motor_expo < 0 || params->turtle_motor_expo > 100) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_T_EXPO. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_T_EXPO. Please verify parameters.");
|
||||
params->turtle_motor_expo = 0;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
if (params->turtle_stick_minf < 0.0f || params->turtle_stick_minf > 100.0f) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_T_MINF. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_T_MINF. Please verify parameters.");
|
||||
params->turtle_stick_minf = 0.0f;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
if (params->turtle_cosphi < 0.0f || params->turtle_cosphi > 100.0f) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_T_COSP. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_T_COSP. Please verify parameters.");
|
||||
params->turtle_cosphi = 0.0f;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
if (params->function_map[i] < (int)OutputFunction::Motor1 || params->function_map[i] > (int)OutputFunction::Motor4) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_FUNCX. Only supports motors 1-4. Please verify parameters.");
|
||||
PX4_ERR("Invalid parameter MODAL_IO_FUNCX. Only supports motors 1-4. Please verify parameters.");
|
||||
params->function_map[i] = 0;
|
||||
ret = PX4_ERROR;
|
||||
|
||||
@@ -204,11 +204,11 @@ int ModalaiEsc::load_params(uart_esc_params_t *params, ch_assign_t *map)
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
if (params->motor_map[i] == MODALAI_ESC_OUTPUT_DISABLED ||
|
||||
params->motor_map[i] < -(MODALAI_ESC_OUTPUT_CHANNELS) ||
|
||||
params->motor_map[i] > MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
PX4_ERR("Invalid parameter UART_ESC_MOTORX. Please verify parameters.");
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
if (params->motor_map[i] == MODAL_IO_OUTPUT_DISABLED ||
|
||||
params->motor_map[i] < -(MODAL_IO_OUTPUT_CHANNELS) ||
|
||||
params->motor_map[i] > MODAL_IO_OUTPUT_CHANNELS) {
|
||||
PX4_ERR("Invalid parameter MODAL_IO_MOTORX. Please verify parameters.");
|
||||
params->motor_map[i] = 0;
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
@@ -221,7 +221,7 @@ int ModalaiEsc::load_params(uart_esc_params_t *params, ch_assign_t *map)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ModalaiEsc::task_spawn(int argc, char *argv[])
|
||||
int ModalIo::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
int myoptind = 0;
|
||||
int ch;
|
||||
@@ -238,7 +238,7 @@ int ModalaiEsc::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
ModalaiEsc *instance = new ModalaiEsc();
|
||||
ModalIo *instance = new ModalIo();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
@@ -259,14 +259,14 @@ int ModalaiEsc::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
int ModalaiEsc::flush_uart_rx()
|
||||
int ModalIo::flush_uart_rx()
|
||||
{
|
||||
while (_uart_port->uart_read(_read_buf, sizeof(_read_buf)) > 0) {}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEsc::read_response(Command *out_cmd)
|
||||
int ModalIo::read_response(Command *out_cmd)
|
||||
{
|
||||
px4_usleep(_current_cmd.resp_delay_us);
|
||||
|
||||
@@ -289,7 +289,7 @@ int ModalaiEsc::read_response(Command *out_cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback)
|
||||
int ModalIo::parse_response(uint8_t *buf, uint8_t len, bool print_feedback)
|
||||
{
|
||||
hrt_abstime tnow = hrt_absolute_time();
|
||||
|
||||
@@ -309,7 +309,7 @@ int ModalaiEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback)
|
||||
|
||||
uint32_t id = (fb.id_state & 0xF0) >> 4; //ID of the ESC based on hardware address
|
||||
|
||||
if (id < MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (id < MODAL_IO_OUTPUT_CHANNELS) {
|
||||
|
||||
int motor_idx = _output_map[id].number - 1; // mapped motor id.. user defined mapping is 1-4, array is 0-3
|
||||
|
||||
@@ -438,7 +438,7 @@ int ModalaiEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback)
|
||||
memcpy(&fb, buf, len);
|
||||
uint8_t id = (fb.state & 0xF0) >> 4;
|
||||
|
||||
if (id < MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (id < MODAL_IO_OUTPUT_CHANNELS) {
|
||||
_esc_chans[id].rate_meas = fb.rpm;
|
||||
_esc_chans[id].state = fb.state & 0x0F;
|
||||
_esc_chans[id].cmd_counter = fb.cmd_counter;
|
||||
@@ -456,19 +456,19 @@ int ModalaiEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEsc::check_for_esc_timeout()
|
||||
int ModalIo::check_for_esc_timeout()
|
||||
{
|
||||
hrt_abstime tnow = hrt_absolute_time();
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
// PX4 motor indexed user defined mapping is 1-4, we want to use in bitmask (0-3)
|
||||
uint8_t motor_idx = _output_map[i].number - 1;
|
||||
|
||||
if (motor_idx < MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (motor_idx < MODAL_IO_OUTPUT_CHANNELS) {
|
||||
// we are using PX4 motor index in the bitmask
|
||||
if (_esc_status.esc_online_flags & (1 << motor_idx)) {
|
||||
// using index i here for esc_chans enumeration stored in ESC ID order
|
||||
if ((tnow - _esc_chans[i].feedback_time) > MODALAI_ESC_DISCONNECT_TIMEOUT_US) {
|
||||
if ((tnow - _esc_chans[i].feedback_time) > MODAL_IO_DISCONNECT_TIMEOUT_US) {
|
||||
// stale data, assume offline and clear armed
|
||||
_esc_status.esc_online_flags &= ~(1 << motor_idx);
|
||||
_esc_status.esc_armed_flags &= ~(1 << motor_idx);
|
||||
@@ -481,7 +481,7 @@ int ModalaiEsc::check_for_esc_timeout()
|
||||
|
||||
}
|
||||
|
||||
int ModalaiEsc::send_cmd_thread_safe(Command *cmd)
|
||||
int ModalIo::send_cmd_thread_safe(Command *cmd)
|
||||
{
|
||||
cmd->id = _cmd_id++;
|
||||
_pending_cmd.store(cmd);
|
||||
@@ -496,7 +496,7 @@ int ModalaiEsc::send_cmd_thread_safe(Command *cmd)
|
||||
|
||||
|
||||
|
||||
int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
int ModalIo::custom_command(int argc, char *argv[])
|
||||
{
|
||||
int myoptind = 0;
|
||||
int ch;
|
||||
@@ -522,7 +522,7 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
/* start the FMU if not running */
|
||||
if (!strcmp(verb, "start")) {
|
||||
if (!is_running()) {
|
||||
return ModalaiEsc::task_spawn(argc, argv);
|
||||
return ModalIo::task_spawn(argc, argv);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -654,8 +654,8 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
} else if (!strcmp(verb, "rpm")) {
|
||||
if (0 < esc_id && esc_id < 16) {
|
||||
PX4_INFO("Request RPM for ESC bit mask: %i - RPM: %i", esc_id, rate);
|
||||
int16_t rate_req[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
int16_t outputs[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
int16_t rate_req[MODAL_IO_OUTPUT_CHANNELS];
|
||||
int16_t outputs[MODAL_IO_OUTPUT_CHANNELS];
|
||||
outputs[0] = (esc_id & 1) ? rate : 0;
|
||||
outputs[1] = (esc_id & 2) ? rate : 0;
|
||||
outputs[2] = (esc_id & 4) ? rate : 0;
|
||||
@@ -663,8 +663,8 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
|
||||
//the motor mapping is.. if I want to spin Motor 1 (1-4) then i need to provide non-zero rpm for motor map[m-1]
|
||||
|
||||
uart_esc_params_t params;
|
||||
ch_assign_t map[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
modal_io_params_t params;
|
||||
ch_assign_t map[MODAL_IO_OUTPUT_CHANNELS];
|
||||
get_instance()->load_params(¶ms, (ch_assign_t *)&map);
|
||||
|
||||
uint8_t id_fb_raw = 0;
|
||||
@@ -678,10 +678,10 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
|
||||
else if (esc_id & 8) { id_fb_raw = 3; }
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
int motor_idx = map[i].number - 1; // user defined mapping is 1-4, array is 0-3
|
||||
|
||||
if (motor_idx >= 0 && motor_idx < MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (motor_idx >= 0 && motor_idx < MODAL_IO_OUTPUT_CHANNELS) {
|
||||
rate_req[i] = outputs[motor_idx] * map[i].direction;
|
||||
}
|
||||
|
||||
@@ -722,15 +722,15 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
} else if (!strcmp(verb, "pwm")) {
|
||||
if (0 < esc_id && esc_id < 16) {
|
||||
PX4_INFO("Request PWM for ESC mask: %i - PWM: %i", esc_id, rate);
|
||||
int16_t rate_req[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
int16_t outputs[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
int16_t rate_req[MODAL_IO_OUTPUT_CHANNELS];
|
||||
int16_t outputs[MODAL_IO_OUTPUT_CHANNELS];
|
||||
outputs[0] = (esc_id & 1) ? rate : 0;
|
||||
outputs[1] = (esc_id & 2) ? rate : 0;
|
||||
outputs[2] = (esc_id & 4) ? rate : 0;
|
||||
outputs[3] = (esc_id & 8) ? rate : 0;
|
||||
|
||||
uart_esc_params_t params;
|
||||
ch_assign_t map[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
modal_io_params_t params;
|
||||
ch_assign_t map[MODAL_IO_OUTPUT_CHANNELS];
|
||||
get_instance()->load_params(¶ms, (ch_assign_t *)&map);
|
||||
|
||||
uint8_t id_fb_raw = 0;
|
||||
@@ -744,10 +744,10 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
|
||||
else if (esc_id & 8) { id_fb_raw = 3; }
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
int motor_idx = map[i].number - 1; // user defined mapping is 1-4, array is 0-3
|
||||
|
||||
if (motor_idx >= 0 && motor_idx < MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (motor_idx >= 0 && motor_idx < MODAL_IO_OUTPUT_CHANNELS) {
|
||||
rate_req[i] = outputs[motor_idx] * map[i].direction;
|
||||
PX4_INFO("rate_req[%d]=%d", i, rate_req[i]);
|
||||
}
|
||||
@@ -791,7 +791,7 @@ int ModalaiEsc::custom_command(int argc, char *argv[])
|
||||
return print_usage("unknown command");
|
||||
}
|
||||
|
||||
int ModalaiEsc::update_params()
|
||||
int ModalIo::update_params()
|
||||
{
|
||||
int ret = PX4_ERROR;
|
||||
|
||||
@@ -810,7 +810,7 @@ int ModalaiEsc::update_params()
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ModalaiEsc::update_leds(vehicle_control_mode_s mode, led_control_s control)
|
||||
void ModalIo::update_leds(vehicle_control_mode_s mode, led_control_s control)
|
||||
{
|
||||
int i = 0;
|
||||
uint8_t led_mask = _led_rsc.led_mask;
|
||||
@@ -910,12 +910,12 @@ void ModalaiEsc::update_leds(vehicle_control_mode_s mode, led_control_s control)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
_esc_chans[i].led = led_mask;
|
||||
}
|
||||
}
|
||||
|
||||
void ModalaiEsc::mix_turtle_mode(uint16_t outputs[MAX_ACTUATORS])
|
||||
void ModalIo::mix_turtle_mode(uint16_t outputs[MAX_ACTUATORS])
|
||||
{
|
||||
bool use_pitch = true;
|
||||
bool use_roll = true;
|
||||
@@ -1090,10 +1090,10 @@ void ModalaiEsc::mix_turtle_mode(uint16_t outputs[MAX_ACTUATORS])
|
||||
}
|
||||
|
||||
/* OutputModuleInterface */
|
||||
bool ModalaiEsc::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
||||
unsigned num_outputs, unsigned num_control_groups_updated)
|
||||
bool ModalIo::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
||||
unsigned num_outputs, unsigned num_control_groups_updated)
|
||||
{
|
||||
if (num_outputs != MODALAI_ESC_OUTPUT_CHANNELS) {
|
||||
if (num_outputs != MODAL_IO_OUTPUT_CHANNELS) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1102,7 +1102,7 @@ bool ModalaiEsc::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS]
|
||||
mix_turtle_mode(outputs);
|
||||
}
|
||||
|
||||
for (int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++) {
|
||||
for (int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++) {
|
||||
if (!_outputs_on || stop_motors) {
|
||||
_esc_chans[i].rate_req = 0;
|
||||
|
||||
@@ -1137,7 +1137,7 @@ bool ModalaiEsc::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS]
|
||||
}
|
||||
|
||||
// round robin
|
||||
_fb_idx = (_fb_idx + 1) % MODALAI_ESC_OUTPUT_CHANNELS;
|
||||
_fb_idx = (_fb_idx + 1) % MODAL_IO_OUTPUT_CHANNELS;
|
||||
|
||||
|
||||
/*
|
||||
@@ -1179,7 +1179,7 @@ bool ModalaiEsc::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS]
|
||||
}
|
||||
|
||||
|
||||
void ModalaiEsc::Run()
|
||||
void ModalIo::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
@@ -1260,16 +1260,16 @@ void ModalaiEsc::Run()
|
||||
|
||||
if (!_outputs_on) {
|
||||
|
||||
float setpoint = MODALAI_ESC_MODE_DISABLED_SETPOINT;
|
||||
float setpoint = MODAL_IO_MODE_DISABLED_SETPOINT;
|
||||
|
||||
if (_parameters.mode == MODALAI_ESC_MODE_TURTLE_AUX1) {
|
||||
if (_parameters.mode == MODAL_IO_MODE_TURTLE_AUX1) {
|
||||
setpoint = _manual_control_setpoint.aux1;
|
||||
|
||||
} else if (_parameters.mode == MODALAI_ESC_MODE_TURTLE_AUX2) {
|
||||
} else if (_parameters.mode == MODAL_IO_MODE_TURTLE_AUX2) {
|
||||
setpoint = _manual_control_setpoint.aux2;
|
||||
}
|
||||
|
||||
if (setpoint > MODALAI_ESC_MODE_THRESHOLD) {
|
||||
if (setpoint > MODAL_IO_MODE_THRESHOLD) {
|
||||
_turtle_mode_en = true;
|
||||
|
||||
} else {
|
||||
@@ -1278,9 +1278,9 @@ void ModalaiEsc::Run()
|
||||
}
|
||||
}
|
||||
|
||||
if (_parameters.mode == MODALAI_ESC_MODE_UART_BRIDGE) {
|
||||
if (_parameters.mode == MODAL_IO_MODE_UART_BRIDGE) {
|
||||
if (!_uart_port_bridge->is_open()) {
|
||||
if (_uart_port_bridge->uart_open(MODALAI_ESC_VOXL_BRIDGE_PORT, 230400) == PX4_OK) {
|
||||
if (_uart_port_bridge->uart_open(MODAL_IO_VOXL_BRIDGE_PORT, 230400) == PX4_OK) {
|
||||
PX4_INFO("Opened UART ESC Bridge device");
|
||||
|
||||
} else {
|
||||
@@ -1400,7 +1400,7 @@ void ModalaiEsc::Run()
|
||||
}
|
||||
|
||||
|
||||
int ModalaiEsc::print_usage(const char *reason)
|
||||
int ModalIo::print_usage(const char *reason)
|
||||
{
|
||||
if (reason) {
|
||||
PX4_WARN("%s\n", reason);
|
||||
@@ -1420,7 +1420,7 @@ $ todo
|
||||
|
||||
)DESCR_STR");
|
||||
|
||||
PRINT_MODULE_USAGE_NAME("modalai_esc", "driver");
|
||||
PRINT_MODULE_USAGE_NAME("modal_io", "driver");
|
||||
PRINT_MODULE_USAGE_COMMAND_DESCR("start", "Start the task");
|
||||
|
||||
PRINT_MODULE_USAGE_COMMAND_DESCR("reset", "Send reset request to ESC");
|
||||
@@ -1458,7 +1458,7 @@ $ todo
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEsc::print_status()
|
||||
int ModalIo::print_status()
|
||||
{
|
||||
PX4_INFO("Max update rate: %i Hz", _current_update_rate);
|
||||
PX4_INFO("Outputs on: %s", _outputs_on ? "yes" : "no");
|
||||
@@ -1467,25 +1467,25 @@ int ModalaiEsc::print_status()
|
||||
|
||||
PX4_INFO("");
|
||||
|
||||
PX4_INFO("Params: UART_ESC_CONFIG: %li", _parameters.config);
|
||||
PX4_INFO("Params: UART_ESC_BAUD: %li", _parameters.baud_rate);
|
||||
PX4_INFO("Params: MODAL_IO_CONFIG: %li", _parameters.config);
|
||||
PX4_INFO("Params: MODAL_IO_BAUD: %li", _parameters.baud_rate);
|
||||
|
||||
PX4_INFO("Params: UART_ESC_FUNC1: %li", _parameters.function_map[0]);
|
||||
PX4_INFO("Params: UART_ESC_FUNC2: %li", _parameters.function_map[1]);
|
||||
PX4_INFO("Params: UART_ESC_FUNC3: %li", _parameters.function_map[2]);
|
||||
PX4_INFO("Params: UART_ESC_FUNC4: %li", _parameters.function_map[3]);
|
||||
PX4_INFO("Params: MODAL_IO_FUNC1: %li", _parameters.function_map[0]);
|
||||
PX4_INFO("Params: MODAL_IO_FUNC2: %li", _parameters.function_map[1]);
|
||||
PX4_INFO("Params: MODAL_IO_FUNC3: %li", _parameters.function_map[2]);
|
||||
PX4_INFO("Params: MODAL_IO_FUNC4: %li", _parameters.function_map[3]);
|
||||
|
||||
PX4_INFO("Params: UART_ESC_SDIR1: %li", _parameters.direction_map[0]);
|
||||
PX4_INFO("Params: UART_ESC_SDIR2: %li", _parameters.direction_map[1]);
|
||||
PX4_INFO("Params: UART_ESC_SDIR3: %li", _parameters.direction_map[2]);
|
||||
PX4_INFO("Params: UART_ESC_SDIR4: %li", _parameters.direction_map[3]);
|
||||
PX4_INFO("Params: MODAL_IO_SDIR1: %li", _parameters.direction_map[0]);
|
||||
PX4_INFO("Params: MODAL_IO_SDIR2: %li", _parameters.direction_map[1]);
|
||||
PX4_INFO("Params: MODAL_IO_SDIR3: %li", _parameters.direction_map[2]);
|
||||
PX4_INFO("Params: MODAL_IO_SDIR4: %li", _parameters.direction_map[3]);
|
||||
|
||||
PX4_INFO("Params: UART_ESC_RPM_MIN: %li", _parameters.rpm_min);
|
||||
PX4_INFO("Params: UART_ESC_RPM_MAX: %li", _parameters.rpm_max);
|
||||
PX4_INFO("Params: MODAL_IO_RPM_MIN: %li", _parameters.rpm_min);
|
||||
PX4_INFO("Params: MODAL_IO_RPM_MAX: %li", _parameters.rpm_max);
|
||||
|
||||
PX4_INFO("");
|
||||
|
||||
for( int i = 0; i < MODALAI_ESC_OUTPUT_CHANNELS; i++){
|
||||
for( int i = 0; i < MODAL_IO_OUTPUT_CHANNELS; i++){
|
||||
PX4_INFO("-- ID: %i", i);
|
||||
PX4_INFO(" Motor: %i", _output_map[i].number);
|
||||
PX4_INFO(" Direction: %i", _output_map[i].direction);
|
||||
@@ -1505,9 +1505,9 @@ int ModalaiEsc::print_status()
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" __EXPORT int modalai_esc_main(int argc, char *argv[]);
|
||||
extern "C" __EXPORT int modal_io_main(int argc, char *argv[]);
|
||||
|
||||
int modalai_esc_main(int argc, char *argv[])
|
||||
int modal_io_main(int argc, char *argv[])
|
||||
{
|
||||
return ModalaiEsc::main(argc, argv);
|
||||
return ModalIo::main(argc, argv);
|
||||
}
|
||||
+38
-45
@@ -48,16 +48,16 @@
|
||||
#include <uORB/topics/esc_status.h>
|
||||
#include <uORB/topics/actuator_test.h>
|
||||
|
||||
#include "modalai_esc_serial.hpp"
|
||||
#include "modal_io_serial.hpp"
|
||||
|
||||
#include "qc_esc_packet.h"
|
||||
#include "qc_esc_packet_types.h"
|
||||
|
||||
class ModalaiEsc : public ModuleBase<ModalaiEsc>, public OutputModuleInterface
|
||||
class ModalIo : public ModuleBase<ModalIo>, public OutputModuleInterface
|
||||
{
|
||||
public:
|
||||
ModalaiEsc();
|
||||
virtual ~ModalaiEsc();
|
||||
ModalIo();
|
||||
virtual ~ModalIo();
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
@@ -80,13 +80,6 @@ public:
|
||||
|
||||
virtual int init();
|
||||
|
||||
typedef enum {
|
||||
UART_ESC_RESET,
|
||||
UART_ESC_VERSION,
|
||||
UART_ESC_TONE,
|
||||
UART_ESC_LED
|
||||
} uart_esc_cmd_t;
|
||||
|
||||
struct Command {
|
||||
uint16_t id = 0;
|
||||
uint8_t len = 0;
|
||||
@@ -107,50 +100,50 @@ public:
|
||||
int send_cmd_thread_safe(Command *cmd);
|
||||
|
||||
private:
|
||||
static constexpr uint32_t MODALAI_ESC_UART_CONFIG = 1;
|
||||
static constexpr uint32_t MODALAI_ESC_DEFAULT_BAUD = 250000;
|
||||
static constexpr uint16_t MODALAI_ESC_OUTPUT_CHANNELS = 4;
|
||||
static constexpr uint16_t MODALAI_ESC_OUTPUT_DISABLED = 0;
|
||||
static constexpr uint32_t MODAL_IO_UART_CONFIG = 1;
|
||||
static constexpr uint32_t MODAL_IO_DEFAULT_BAUD = 250000;
|
||||
static constexpr uint16_t MODAL_IO_OUTPUT_CHANNELS = 4;
|
||||
static constexpr uint16_t MODAL_IO_OUTPUT_DISABLED = 0;
|
||||
|
||||
static constexpr uint32_t MODALAI_ESC_WRITE_WAIT_US = 200;
|
||||
static constexpr uint32_t MODALAI_ESC_DISCONNECT_TIMEOUT_US = 500000;
|
||||
static constexpr uint32_t MODAL_IO_WRITE_WAIT_US = 200;
|
||||
static constexpr uint32_t MODAL_IO_DISCONNECT_TIMEOUT_US = 500000;
|
||||
|
||||
static constexpr uint16_t DISARMED_VALUE = 0;
|
||||
|
||||
static constexpr uint16_t MODALAI_ESC_PWM_MIN = 0;
|
||||
static constexpr uint16_t MODALAI_ESC_PWM_MAX = 800;
|
||||
static constexpr uint16_t MODALAI_ESC_DEFAULT_RPM_MIN = 5000;
|
||||
static constexpr uint16_t MODALAI_ESC_DEFAULT_RPM_MAX = 17000;
|
||||
static constexpr uint16_t MODAL_IO_PWM_MIN = 0;
|
||||
static constexpr uint16_t MODAL_IO_PWM_MAX = 800;
|
||||
static constexpr uint16_t MODAL_IO_DEFAULT_RPM_MIN = 5000;
|
||||
static constexpr uint16_t MODAL_IO_DEFAULT_RPM_MAX = 17000;
|
||||
|
||||
static constexpr float MODALAI_ESC_MODE_DISABLED_SETPOINT = -0.1f;
|
||||
static constexpr float MODALAI_ESC_MODE_THRESHOLD = 0.0f;
|
||||
static constexpr float MODAL_IO_MODE_DISABLED_SETPOINT = -0.1f;
|
||||
static constexpr float MODAL_IO_MODE_THRESHOLD = 0.0f;
|
||||
|
||||
static constexpr uint32_t MODALAI_ESC_MODE = 0;
|
||||
static constexpr uint32_t MODALAI_ESC_MODE_TURTLE_AUX1 = 1;
|
||||
static constexpr uint32_t MODALAI_ESC_MODE_TURTLE_AUX2 = 2;
|
||||
static constexpr uint32_t MODALAI_ESC_MODE_UART_BRIDGE = 3;
|
||||
static constexpr uint32_t MODAL_IO_MODE = 0;
|
||||
static constexpr uint32_t MODAL_IO_MODE_TURTLE_AUX1 = 1;
|
||||
static constexpr uint32_t MODAL_IO_MODE_TURTLE_AUX2 = 2;
|
||||
static constexpr uint32_t MODAL_IO_MODE_UART_BRIDGE = 3;
|
||||
|
||||
//static constexpr uint16_t max_pwm(uint16_t pwm) { return math::min(pwm, MODALAI_ESC_PWM_MAX); }
|
||||
//static constexpr uint16_t max_rpm(uint16_t rpm) { return math::min(rpm, MODALAI_ESC_RPM_MAX); }
|
||||
//static constexpr uint16_t max_pwm(uint16_t pwm) { return math::min(pwm, MODAL_IO_PWM_MAX); }
|
||||
//static constexpr uint16_t max_rpm(uint16_t rpm) { return math::min(rpm, MODAL_IO_RPM_MAX); }
|
||||
|
||||
ModalaiEscSerial *_uart_port;
|
||||
ModalaiEscSerial *_uart_port_bridge;
|
||||
ModalIoSerial *_uart_port;
|
||||
ModalIoSerial *_uart_port_bridge;
|
||||
|
||||
typedef struct {
|
||||
int32_t config{MODALAI_ESC_UART_CONFIG};
|
||||
int32_t mode{MODALAI_ESC_MODE};
|
||||
int32_t config{MODAL_IO_UART_CONFIG};
|
||||
int32_t mode{MODAL_IO_MODE};
|
||||
int32_t turtle_motor_expo{35};
|
||||
int32_t turtle_motor_deadband{20};
|
||||
int32_t turtle_motor_percent{90};
|
||||
float turtle_stick_minf{0.15f};
|
||||
float turtle_cosphi{0.99f};
|
||||
int32_t baud_rate{MODALAI_ESC_DEFAULT_BAUD};
|
||||
int32_t rpm_min{MODALAI_ESC_DEFAULT_RPM_MIN};
|
||||
int32_t rpm_max{MODALAI_ESC_DEFAULT_RPM_MAX};
|
||||
int32_t function_map[MODALAI_ESC_OUTPUT_CHANNELS] {0, 0, 0, 0};
|
||||
int32_t motor_map[MODALAI_ESC_OUTPUT_CHANNELS] {1, 2, 3, 4};
|
||||
int32_t direction_map[MODALAI_ESC_OUTPUT_CHANNELS] {1, 1, 1, 1};
|
||||
} uart_esc_params_t;
|
||||
int32_t baud_rate{MODAL_IO_DEFAULT_BAUD};
|
||||
int32_t rpm_min{MODAL_IO_DEFAULT_RPM_MIN};
|
||||
int32_t rpm_max{MODAL_IO_DEFAULT_RPM_MAX};
|
||||
int32_t function_map[MODAL_IO_OUTPUT_CHANNELS] {0, 0, 0, 0};
|
||||
int32_t motor_map[MODAL_IO_OUTPUT_CHANNELS] {1, 2, 3, 4};
|
||||
int32_t direction_map[MODAL_IO_OUTPUT_CHANNELS] {1, 1, 1, 1};
|
||||
} modal_io_params_t;
|
||||
|
||||
struct EscChan {
|
||||
int16_t rate_req;
|
||||
@@ -173,13 +166,13 @@ private:
|
||||
typedef struct {
|
||||
led_control_s control{};
|
||||
vehicle_control_mode_s mode{};
|
||||
uint8_t led_mask;// TODO led_mask[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
uint8_t led_mask;// TODO led_mask[MODAL_IO_OUTPUT_CHANNELS];
|
||||
bool breath_en;
|
||||
uint8_t breath_counter;
|
||||
bool test;
|
||||
} led_rsc_t;
|
||||
|
||||
ch_assign_t _output_map[MODALAI_ESC_OUTPUT_CHANNELS] {{1, 1}, {2, 1}, {3, 1}, {4, 1}};
|
||||
ch_assign_t _output_map[MODAL_IO_OUTPUT_CHANNELS] {{1, 1}, {2, 1}, {3, 1}, {4, 1}};
|
||||
MixingOutput _mixing_output;
|
||||
|
||||
perf_counter_t _cycle_perf;
|
||||
@@ -198,9 +191,9 @@ private:
|
||||
//uORB::Publication<actuator_outputs_s> _outputs_debug_pub{ORB_ID(actuator_outputs_debug)};
|
||||
uORB::Publication<esc_status_s> _esc_status_pub{ORB_ID(esc_status)};
|
||||
|
||||
uart_esc_params_t _parameters;
|
||||
modal_io_params_t _parameters;
|
||||
int update_params();
|
||||
int load_params(uart_esc_params_t *params, ch_assign_t *map);
|
||||
int load_params(modal_io_params_t *params, ch_assign_t *map);
|
||||
|
||||
bool _turtle_mode_en{false};
|
||||
int32_t _rpm_turtle_min{0};
|
||||
@@ -211,7 +204,7 @@ private:
|
||||
Command _current_cmd;
|
||||
px4::atomic<Command *> _pending_cmd{nullptr};
|
||||
|
||||
EscChan _esc_chans[MODALAI_ESC_OUTPUT_CHANNELS];
|
||||
EscChan _esc_chans[MODAL_IO_OUTPUT_CHANNELS];
|
||||
Command _esc_cmd;
|
||||
esc_status_s _esc_status;
|
||||
EscPacket _fb_packet;
|
||||
+32
-32
@@ -38,23 +38,23 @@
|
||||
*
|
||||
* @reboot_required true
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - Disabled
|
||||
* @value 1 - VOXL ESC
|
||||
* @min 0
|
||||
* @max 1
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_CONFIG, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_CONFIG, 0);
|
||||
|
||||
/**
|
||||
* UART ESC baud rate
|
||||
*
|
||||
* Default rate is 250Kbps, which is used in off-the-shelf MoadalAI ESC products.
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @unit bit/s
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_BAUD, 250000);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_BAUD, 250000);
|
||||
|
||||
/**
|
||||
* Motor mappings for ModalAI ESC
|
||||
@@ -68,31 +68,31 @@ PARAM_DEFINE_INT32(UART_ESC_BAUD, 250000);
|
||||
// The following are auto generated params from control allocator pattern, put here for reference
|
||||
|
||||
// Default ESC1 to motor2
|
||||
//PARAM_DEFINE_INT32(UART_ESC_FUNC1, 102);
|
||||
//PARAM_DEFINE_INT32(MODAL_IO_FUNC1, 102);
|
||||
|
||||
//PARAM_DEFINE_INT32(UART_ESC_FUNC2, 103);
|
||||
//PARAM_DEFINE_INT32(MODAL_IO_FUNC2, 103);
|
||||
|
||||
//PARAM_DEFINE_INT32(UART_ESC_FUNC3, 101);
|
||||
//PARAM_DEFINE_INT32(MODAL_IO_FUNC3, 101);
|
||||
|
||||
//PARAM_DEFINE_INT32(UART_ESC_FUNC4, 104);
|
||||
//PARAM_DEFINE_INT32(MODAL_IO_FUNC4, 104);
|
||||
|
||||
/**
|
||||
* UART ESC RPM Min
|
||||
*
|
||||
* Minimum RPM for ESC
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_RPM_MIN, 5500);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_RPM_MIN, 5500);
|
||||
|
||||
/**
|
||||
* UART ESC RPM Max
|
||||
*
|
||||
* Maximum RPM for ESC
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_RPM_MAX, 15000);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_RPM_MAX, 15000);
|
||||
|
||||
/**
|
||||
* UART ESC Mode
|
||||
@@ -101,7 +101,7 @@ PARAM_DEFINE_INT32(UART_ESC_RPM_MAX, 15000);
|
||||
*
|
||||
* @reboot_required true
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - None
|
||||
* @value 1 - Turtle Mode enabled via AUX1
|
||||
* @value 2 - Turtle Mode enabled via AUX2
|
||||
@@ -109,95 +109,95 @@ PARAM_DEFINE_INT32(UART_ESC_RPM_MAX, 15000);
|
||||
* @min 0
|
||||
* @max 2
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_MODE, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_MODE, 0);
|
||||
|
||||
/**
|
||||
* UART ESC ID 1 Spin Direction Flag
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - Default
|
||||
* @value 1 - Reverse
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_SDIR1, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_SDIR1, 0);
|
||||
|
||||
/**
|
||||
* UART ESC ID 2 Spin Direction Flag
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - Default
|
||||
* @value 1 - Reverse
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_SDIR2, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_SDIR2, 0);
|
||||
|
||||
/**
|
||||
* UART ESC ID 3 Spin Direction Flag
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - Default
|
||||
* @value 1 - Reverse
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_SDIR3, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_SDIR3, 0);
|
||||
|
||||
/**
|
||||
* UART ESC ID 4 Spin Direction Flag
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @value 0 - Default
|
||||
* @value 1 - Reverse
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_SDIR4, 0);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_SDIR4, 0);
|
||||
|
||||
/**
|
||||
* UART ESC Turtle Mode Crash Flip Motor Percent
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @min 1
|
||||
* @max 100
|
||||
* @decimal 10
|
||||
* @increment 1
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_T_PERC, 90);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_T_PERC, 90);
|
||||
|
||||
/**
|
||||
* UART ESC Turtle Mode Crash Flip Motor Deadband
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @min 0
|
||||
* @max 100
|
||||
* @decimal 10
|
||||
* @increment 1
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_T_DEAD, 20);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_T_DEAD, 20);
|
||||
|
||||
/**
|
||||
* UART ESC Turtle Mode Crash Flip Motor STICK_MINF
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @min 0.0
|
||||
* @max 100.0
|
||||
* @decimal 10
|
||||
* @increment 1.0
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(UART_ESC_T_MINF, 0.15);
|
||||
PARAM_DEFINE_FLOAT(MODAL_IO_T_MINF, 0.15);
|
||||
|
||||
/**
|
||||
* UART ESC Turtle Mode Crash Flip Motor expo
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @min 0
|
||||
* @max 100
|
||||
* @decimal 10
|
||||
* @increment 1
|
||||
*/
|
||||
PARAM_DEFINE_INT32(UART_ESC_T_EXPO, 35);
|
||||
PARAM_DEFINE_INT32(MODAL_IO_T_EXPO, 35);
|
||||
|
||||
/**
|
||||
* UART ESC Turtle Mode Cosphi
|
||||
*
|
||||
* @group UART ESC
|
||||
* @group MODAL IO
|
||||
* @min 0.000
|
||||
* @max 1.000
|
||||
* @decimal 10
|
||||
* @increment 0.001
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(UART_ESC_T_COSP, 0.990);
|
||||
PARAM_DEFINE_FLOAT(MODAL_IO_T_COSP, 0.990);
|
||||
+8
-8
@@ -32,20 +32,20 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "string.h"
|
||||
#include "modalai_esc_serial.hpp"
|
||||
#include "modal_io_serial.hpp"
|
||||
|
||||
ModalaiEscSerial::ModalaiEscSerial()
|
||||
ModalIoSerial::ModalIoSerial()
|
||||
{
|
||||
}
|
||||
|
||||
ModalaiEscSerial::~ModalaiEscSerial()
|
||||
ModalIoSerial::~ModalIoSerial()
|
||||
{
|
||||
if (_uart_fd >= 0) {
|
||||
uart_close();
|
||||
}
|
||||
}
|
||||
|
||||
int ModalaiEscSerial::uart_open(const char *dev, speed_t speed)
|
||||
int ModalIoSerial::uart_open(const char *dev, speed_t speed)
|
||||
{
|
||||
if (_uart_fd >= 0) {
|
||||
PX4_ERR("Port in use: %s (%i)", dev, errno);
|
||||
@@ -110,7 +110,7 @@ int ModalaiEscSerial::uart_open(const char *dev, speed_t speed)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEscSerial::uart_set_baud(speed_t speed)
|
||||
int ModalIoSerial::uart_set_baud(speed_t speed)
|
||||
{
|
||||
#ifndef __PX4_QURT
|
||||
|
||||
@@ -134,7 +134,7 @@ int ModalaiEscSerial::uart_set_baud(speed_t speed)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ModalaiEscSerial::uart_close()
|
||||
int ModalIoSerial::uart_close()
|
||||
{
|
||||
#ifndef __PX4_QURT
|
||||
|
||||
@@ -158,7 +158,7 @@ int ModalaiEscSerial::uart_close()
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModalaiEscSerial::uart_write(FAR void *buf, size_t len)
|
||||
int ModalIoSerial::uart_write(FAR void *buf, size_t len)
|
||||
{
|
||||
if (_uart_fd < 0 || buf == NULL) {
|
||||
PX4_ERR("invalid state for writing or buffer");
|
||||
@@ -172,7 +172,7 @@ int ModalaiEscSerial::uart_write(FAR void *buf, size_t len)
|
||||
#endif
|
||||
}
|
||||
|
||||
int ModalaiEscSerial::uart_read(FAR void *buf, size_t len)
|
||||
int ModalIoSerial::uart_read(FAR void *buf, size_t len)
|
||||
{
|
||||
if (_uart_fd < 0 || buf == NULL) {
|
||||
PX4_ERR("invalid state for reading or buffer");
|
||||
+4
-4
@@ -43,11 +43,11 @@
|
||||
#define FAR
|
||||
#endif
|
||||
|
||||
class ModalaiEscSerial
|
||||
class ModalIoSerial
|
||||
{
|
||||
public:
|
||||
ModalaiEscSerial();
|
||||
virtual ~ModalaiEscSerial();
|
||||
ModalIoSerial();
|
||||
virtual ~ModalIoSerial();
|
||||
|
||||
int uart_open(const char *dev, speed_t speed);
|
||||
int uart_set_baud(speed_t speed);
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
int uart_write(FAR void *buf, size_t len);
|
||||
int uart_read(FAR void *buf, size_t len);
|
||||
bool is_open() { return _uart_fd >= 0; };
|
||||
int uart_get_baud() {return _speed; }
|
||||
int uart_get_baud() {return _speed; }
|
||||
|
||||
private:
|
||||
int _uart_fd = -1;
|
||||
+11
-11
@@ -1,26 +1,26 @@
|
||||
module_name: MODALAI ESC Output
|
||||
module_name: MODAL IO Output
|
||||
actuator_output:
|
||||
show_subgroups_if: 'UART_ESC_CONFIG>0'
|
||||
show_subgroups_if: 'MODAL_IO_CONFIG>0'
|
||||
config_parameters:
|
||||
- param: 'UART_ESC_CONFIG'
|
||||
- param: 'MODAL_IO_CONFIG'
|
||||
label: 'Configure'
|
||||
function: 'enable'
|
||||
- param: 'UART_ESC_BAUD'
|
||||
- param: 'MODAL_IO_BAUD'
|
||||
label: 'Bitrate'
|
||||
- param: 'UART_ESC_RPM_MIN'
|
||||
- param: 'MODAL_IO_RPM_MIN'
|
||||
label: 'RPM Min'
|
||||
- param: 'UART_ESC_RPM_MAX'
|
||||
- param: 'MODAL_IO_RPM_MAX'
|
||||
label: 'RPM Max'
|
||||
- param: 'UART_ESC_SDIR1'
|
||||
- param: 'MODAL_IO_SDIR1'
|
||||
label: 'ESC 1 Spin Direction'
|
||||
- param: 'UART_ESC_SDIR2'
|
||||
- param: 'MODAL_IO_SDIR2'
|
||||
label: 'ESC 2 Spin Direction'
|
||||
- param: 'UART_ESC_SDIR3'
|
||||
- param: 'MODAL_IO_SDIR3'
|
||||
label: 'ESC 3 Spin Direction'
|
||||
- param: 'UART_ESC_SDIR4'
|
||||
- param: 'MODAL_IO_SDIR4'
|
||||
label: 'ESC 4 Spin Direction'
|
||||
output_groups:
|
||||
- param_prefix: UART_ESC
|
||||
- param_prefix: MODAL_IO
|
||||
group_label: 'ESCs'
|
||||
channel_label: 'ESC'
|
||||
num_channels: 4
|
||||
@@ -1,5 +0,0 @@
|
||||
menuconfig DRIVERS_ACTUATORS_MODALAI_ESC
|
||||
bool "modalai_esc"
|
||||
default n
|
||||
---help---
|
||||
Enable support for modalai_esc
|
||||
Reference in New Issue
Block a user