simulator: support accel/gyro instances and stuck failure

- expand simulator to 3 accels and gyros
 - PX4Accelerometer/PX4Gyroscope switch to old param usage due to copy constructor issues with ModuleParams
This commit is contained in:
Daniel Agar
2020-10-07 13:20:13 -04:00
committed by GitHub
parent c01fabaf11
commit 378cb155d6
10 changed files with 201 additions and 78 deletions
@@ -35,6 +35,7 @@
#include "PX4Accelerometer.hpp"
#include <lib/drivers/device/Device.hpp>
#include <lib/parameters/param.h>
using namespace time_literals;
using matrix::Vector3f;
@@ -64,7 +65,6 @@ static constexpr uint8_t clipping(const int16_t samples[16], int16_t clip_limit,
}
PX4Accelerometer::PX4Accelerometer(uint32_t device_id, enum Rotation rotation) :
ModuleParams(nullptr),
_sensor_pub{ORB_ID(sensor_accel)},
_sensor_fifo_pub{ORB_ID(sensor_accel_fifo)},
_device_id{device_id},
@@ -73,7 +73,7 @@ PX4Accelerometer::PX4Accelerometer(uint32_t device_id, enum Rotation rotation) :
// advertise immediately to keep instance numbering in sync
_sensor_pub.advertise();
updateParams();
param_get(param_find("IMU_GYRO_RATEMAX"), &_imu_gyro_rate_max);
}
PX4Accelerometer::~PX4Accelerometer()
@@ -1,6 +1,6 @@
/****************************************************************************
*
* Copyright (c) 2018 PX4 Development Team. All rights reserved.
* Copyright (c) 2018-2020 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,20 +36,19 @@
#include <drivers/drv_hrt.h>
#include <lib/conversion/rotation.h>
#include <lib/ecl/geo/geo.h>
#include <px4_platform_common/module_params.h>
#include <uORB/PublicationMulti.hpp>
#include <uORB/topics/sensor_accel.h>
#include <uORB/topics/sensor_accel_fifo.h>
class PX4Accelerometer : public ModuleParams
class PX4Accelerometer
{
public:
PX4Accelerometer(uint32_t device_id, enum Rotation rotation = ROTATION_NONE);
~PX4Accelerometer() override;
~PX4Accelerometer();
uint32_t get_device_id() const { return _device_id; }
float get_max_rate_hz() const { return _param_imu_gyro_rate_max.get(); }
int32_t get_max_rate_hz() const { return _imu_gyro_rate_max; }
void set_device_id(uint32_t device_id) { _device_id = device_id; }
void set_device_type(uint8_t devtype);
@@ -73,6 +72,8 @@ private:
uint32_t _device_id{0};
const enum Rotation _rotation;
int32_t _imu_gyro_rate_max{0}; // match gyro max rate
float _range{16 * CONSTANTS_ONE_G};
float _scale{1.f};
float _temperature{NAN};
@@ -82,8 +83,4 @@ private:
uint32_t _error_count{0};
int16_t _last_sample[3] {};
DEFINE_PARAMETERS(
(ParamInt<px4::params::IMU_GYRO_RATEMAX>) _param_imu_gyro_rate_max
)
};
+2 -2
View File
@@ -35,6 +35,7 @@
#include "PX4Gyroscope.hpp"
#include <lib/drivers/device/Device.hpp>
#include <lib/parameters/param.h>
using namespace time_literals;
using matrix::Vector3f;
@@ -51,7 +52,6 @@ static constexpr int32_t sum(const int16_t samples[16], uint8_t len)
}
PX4Gyroscope::PX4Gyroscope(uint32_t device_id, enum Rotation rotation) :
ModuleParams(nullptr),
_sensor_pub{ORB_ID(sensor_gyro)},
_sensor_fifo_pub{ORB_ID(sensor_gyro_fifo)},
_device_id{device_id},
@@ -60,7 +60,7 @@ PX4Gyroscope::PX4Gyroscope(uint32_t device_id, enum Rotation rotation) :
// advertise immediately to keep instance numbering in sync
_sensor_pub.advertise();
updateParams();
param_get(param_find("IMU_GYRO_RATEMAX"), &_imu_gyro_rate_max);
}
PX4Gyroscope::~PX4Gyroscope()
+5 -8
View File
@@ -35,20 +35,19 @@
#include <drivers/drv_hrt.h>
#include <lib/conversion/rotation.h>
#include <px4_platform_common/module_params.h>
#include <uORB/PublicationMulti.hpp>
#include <uORB/topics/sensor_gyro.h>
#include <uORB/topics/sensor_gyro_fifo.h>
class PX4Gyroscope : public ModuleParams
class PX4Gyroscope
{
public:
PX4Gyroscope(uint32_t device_id, enum Rotation rotation = ROTATION_NONE);
~PX4Gyroscope() override;
~PX4Gyroscope();
uint32_t get_device_id() const { return _device_id; }
float get_max_rate_hz() const { return _param_imu_gyro_rate_max.get(); }
int32_t get_max_rate_hz() const { return _imu_gyro_rate_max; }
void set_device_id(uint32_t device_id) { _device_id = device_id; }
void set_device_type(uint8_t devtype);
@@ -71,6 +70,8 @@ private:
uint32_t _device_id{0};
const enum Rotation _rotation;
int32_t _imu_gyro_rate_max{0};
float _range{math::radians(2000.f)};
float _scale{1.f};
float _temperature{NAN};
@@ -78,8 +79,4 @@ private:
uint32_t _error_count{0};
int16_t _last_sample[3] {};
DEFINE_PARAMETERS(
(ParamInt<px4::params::IMU_GYRO_RATEMAX>) _param_imu_gyro_rate_max
)
};