mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-01 06:01:35 +08:00
logger: add rate factor to slow logging down
This is required for the Mantis to reduce the log streaming rate.
This commit is contained in:
@@ -393,6 +393,8 @@ bool LoggedTopics::add_topic(const orb_metadata *topic, uint16_t interval_ms, ui
|
|||||||
|
|
||||||
bool LoggedTopics::add_topic(const char *name, uint16_t interval_ms, uint8_t instance, bool optional)
|
bool LoggedTopics::add_topic(const char *name, uint16_t interval_ms, uint8_t instance, bool optional)
|
||||||
{
|
{
|
||||||
|
interval_ms /= _rate_factor;
|
||||||
|
|
||||||
const orb_metadata *const *topics = orb_get_topics();
|
const orb_metadata *const *topics = orb_get_topics();
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,8 @@ public:
|
|||||||
const RequestedSubscriptionArray &subscriptions() const { return _subscriptions; }
|
const RequestedSubscriptionArray &subscriptions() const { return _subscriptions; }
|
||||||
int numMissionSubscriptions() const { return _num_mission_subs; }
|
int numMissionSubscriptions() const { return _num_mission_subs; }
|
||||||
|
|
||||||
|
void set_rate_factor(float rate_factor) { _rate_factor = rate_factor; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,6 +177,7 @@ private:
|
|||||||
|
|
||||||
RequestedSubscriptionArray _subscriptions;
|
RequestedSubscriptionArray _subscriptions;
|
||||||
int _num_mission_subs{0};
|
int _num_mission_subs{0};
|
||||||
|
float _rate_factor{1.0f};
|
||||||
};
|
};
|
||||||
|
|
||||||
} //namespace logger
|
} //namespace logger
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ void Logger::print_statistics(LogType type)
|
|||||||
Logger *Logger::instantiate(int argc, char *argv[])
|
Logger *Logger::instantiate(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
uint32_t log_interval = 3500;
|
uint32_t log_interval = 3500;
|
||||||
|
float rate_factor = 1.0f;
|
||||||
int log_buffer_size = 12 * 1024;
|
int log_buffer_size = 12 * 1024;
|
||||||
Logger::LogMode log_mode = Logger::LogMode::while_armed;
|
Logger::LogMode log_mode = Logger::LogMode::while_armed;
|
||||||
bool error_flag = false;
|
bool error_flag = false;
|
||||||
@@ -250,7 +251,7 @@ Logger *Logger::instantiate(int argc, char *argv[])
|
|||||||
int ch;
|
int ch;
|
||||||
const char *myoptarg = nullptr;
|
const char *myoptarg = nullptr;
|
||||||
|
|
||||||
while ((ch = px4_getopt(argc, argv, "r:b:etfm:p:x", &myoptind, &myoptarg)) != EOF) {
|
while ((ch = px4_getopt(argc, argv, "r:b:etfm:p:xc:", &myoptind, &myoptarg)) != EOF) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'r': {
|
case 'r': {
|
||||||
unsigned long r = strtoul(myoptarg, nullptr, 10);
|
unsigned long r = strtoul(myoptarg, nullptr, 10);
|
||||||
@@ -263,6 +264,10 @@ Logger *Logger::instantiate(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
rate_factor = strtof(myoptarg, nullptr);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'x':
|
case 'x':
|
||||||
log_mode = Logger::LogMode::rc_aux1;
|
log_mode = Logger::LogMode::rc_aux1;
|
||||||
break;
|
break;
|
||||||
@@ -332,7 +337,8 @@ Logger *Logger::instantiate(int argc, char *argv[])
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger *logger = new Logger(backend, log_buffer_size, log_interval, poll_topic, log_mode, log_name_timestamp);
|
Logger *logger = new Logger(backend, log_buffer_size, log_interval, poll_topic, log_mode, log_name_timestamp,
|
||||||
|
rate_factor);
|
||||||
|
|
||||||
#if defined(DBGPRINT) && defined(__PX4_NUTTX)
|
#if defined(DBGPRINT) && defined(__PX4_NUTTX)
|
||||||
struct mallinfo alloc_info = mallinfo();
|
struct mallinfo alloc_info = mallinfo();
|
||||||
@@ -360,13 +366,14 @@ Logger *Logger::instantiate(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
Logger::Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_interval, const char *poll_topic_name,
|
Logger::Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_interval, const char *poll_topic_name,
|
||||||
LogMode log_mode, bool log_name_timestamp) :
|
LogMode log_mode, bool log_name_timestamp, float rate_factor) :
|
||||||
ModuleParams(nullptr),
|
ModuleParams(nullptr),
|
||||||
_log_mode(log_mode),
|
_log_mode(log_mode),
|
||||||
_log_name_timestamp(log_name_timestamp),
|
_log_name_timestamp(log_name_timestamp),
|
||||||
_event_subscription(ORB_ID::event),
|
_event_subscription(ORB_ID::event),
|
||||||
_writer(backend, buffer_size),
|
_writer(backend, buffer_size),
|
||||||
_log_interval(log_interval)
|
_log_interval(log_interval),
|
||||||
|
_rate_factor(rate_factor)
|
||||||
{
|
{
|
||||||
if (poll_topic_name) {
|
if (poll_topic_name) {
|
||||||
const orb_metadata *const *topics = orb_get_topics();
|
const orb_metadata *const *topics = orb_get_topics();
|
||||||
@@ -478,6 +485,7 @@ bool Logger::initialize_topics()
|
|||||||
}
|
}
|
||||||
|
|
||||||
LoggedTopics logged_topics;
|
LoggedTopics logged_topics;
|
||||||
|
logged_topics.set_rate_factor(_rate_factor);
|
||||||
|
|
||||||
// initialize mission topics
|
// initialize mission topics
|
||||||
logged_topics.initialize_mission_topics((MissionLogType)_param_sdlog_mission.get());
|
logged_topics.initialize_mission_topics((MissionLogType)_param_sdlog_mission.get());
|
||||||
@@ -2310,6 +2318,7 @@ $ logger on
|
|||||||
PRINT_MODULE_USAGE_PARAM_INT('b', 12, 4, 10000, "Log buffer size in KiB", true);
|
PRINT_MODULE_USAGE_PARAM_INT('b', 12, 4, 10000, "Log buffer size in KiB", true);
|
||||||
PRINT_MODULE_USAGE_PARAM_STRING('p', nullptr, "<topic_name>",
|
PRINT_MODULE_USAGE_PARAM_STRING('p', nullptr, "<topic_name>",
|
||||||
"Poll on a topic instead of running with fixed rate (Log rate and topic intervals are ignored if this is set)", true);
|
"Poll on a topic instead of running with fixed rate (Log rate and topic intervals are ignored if this is set)", true);
|
||||||
|
PRINT_MODULE_USAGE_PARAM_FLOAT('c', 1.0, 0.2, 2.0, "Log rate factor (higher is faster)", true);
|
||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("on", "start logging now, override arming (logger must be running)");
|
PRINT_MODULE_USAGE_COMMAND_DESCR("on", "start logging now, override arming (logger must be running)");
|
||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("off", "stop logging now, override arming (logger must be running)");
|
PRINT_MODULE_USAGE_COMMAND_DESCR("off", "stop logging now, override arming (logger must be running)");
|
||||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_interval, const char *poll_topic_name,
|
Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_interval, const char *poll_topic_name,
|
||||||
LogMode log_mode, bool log_name_timestamp);
|
LogMode log_mode, bool log_name_timestamp, float rate_factor);
|
||||||
|
|
||||||
~Logger();
|
~Logger();
|
||||||
|
|
||||||
@@ -344,6 +344,7 @@ private:
|
|||||||
|
|
||||||
LogWriter _writer;
|
LogWriter _writer;
|
||||||
uint32_t _log_interval{0};
|
uint32_t _log_interval{0};
|
||||||
|
float _rate_factor{1.0f};
|
||||||
const orb_metadata *_polling_topic_meta{nullptr}; ///< if non-null, poll on this topic instead of sleeping
|
const orb_metadata *_polling_topic_meta{nullptr}; ///< if non-null, poll on this topic instead of sleeping
|
||||||
orb_advert_t _mavlink_log_pub{nullptr};
|
orb_advert_t _mavlink_log_pub{nullptr};
|
||||||
uint8_t _next_topic_id{0}; ///< id of next subscribed ulog topic
|
uint8_t _next_topic_id{0}; ///< id of next subscribed ulog topic
|
||||||
|
|||||||
Reference in New Issue
Block a user