- added raw logging

- better calibration output
- added calibration plotter
This commit is contained in:
0x23 2025-10-18 12:43:13 +02:00
parent 7d41d30757
commit 3be961eecf
6 changed files with 53 additions and 4 deletions

View file

@ -23,8 +23,8 @@
[env:pico]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = rpipico2 # RP2530
# board = rpipico # RP2040
board = rpipico2 # use this for RP2530
# board = rpipico # use this for RP2040
board_build.filesystem_size = 0.5m
framework = arduino

View file

@ -49,7 +49,7 @@ bool measure_calibration_data(
// TODO: read motor_pos from precise reference encoder
if(print_measurements)
LOG_INFO("%f, %15.10f, %15.10f", encoder_angle_raw, field_angle, motor_pos);
LOG_RAW("%15.10f, %15.10f, %f", motor_pos, field_angle, encoder_angle_raw);
encoder_angle_and_motor_pos.push_back({encoder_angle_raw, motor_pos});
motor_pos_and_field_angle.push_back({motor_pos, field_angle});

View file

@ -60,6 +60,13 @@ void Logger::error(const char* fmt, ...) {
}
}
void Logger::raw(const char* fmt, ...) {
va_list args;
va_start(args, fmt);
log(ELogLevel::NONE, fmt, args);
va_end(args);
}
void Logger::log(ELogLevel level, const char* fmt, va_list args) {
char buf[128]; // Adjust size as needed
vsnprintf(buf, sizeof(buf), fmt, args);

View file

@ -15,6 +15,7 @@
#define LOG_INFO(...) Logger::instance().info(__VA_ARGS__)
#define LOG_WARNING(...) Logger::instance().warn(__VA_ARGS__)
#define LOG_ERROR(...) Logger::instance().error(__VA_ARGS__)
#define LOG_RAW(...) Logger::instance().raw(__VA_ARGS__)
//*** ENUM ******************************************************************************
@ -39,6 +40,7 @@ class Logger {
void info(const char* fmt, ...);
void warn(const char* fmt, ...);
void error(const char* fmt, ...);
void raw(const char* fmt, ...);
private:
Logger() = default;

View file

@ -1 +1 @@
static const char* FIRMWARE_VERSION = "v1.0.1";
static const char* FIRMWARE_VERSION = "v1.0.2";

View file

@ -0,0 +1,40 @@
from open_micro_stage_api import OpenMicroStageInterface
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 200
def plot_calibration_data(ax_encoder_counts, ax_field_angel, label, data):
# Plot on the provided Axes object
if ax_encoder_counts is not None:
ax_encoder_counts.plot(data[0], data[2], label=label)
ax_encoder_counts.set_xlabel('Motor Angle [rad]')
ax_encoder_counts.set_ylabel('Encoder Counts Raw')
ax_encoder_counts.set_title('Encoder Count Plot')
ax_encoder_counts.legend()
ax_encoder_counts.grid(True)
# Plot on the provided Axes object
if ax_field_angel is not None:
ax_field_angel.plot(data[0], data[1], label=label)
ax_field_angel.set_xlabel('Motor Angle [rad]')
ax_field_angel.set_ylabel('Motor Field Angle [rad]')
ax_field_angel.set_title('Field Angle Plot')
ax_field_angel.legend()
ax_field_angel.grid(True)
def main():
# create interface and connect
oms = OpenMicroStageInterface(show_communication=True, show_log_messages=True)
oms.connect('/dev/ttyACM0')
# Create subplots
fig, ax = plt.subplots(1, 1, figsize=(10, 7), sharex='all')
for i in range(3):
res, data = oms.calibrate_joint(i, save_result=False)
plot_calibration_data(ax, None, f'Actuator {i}', data)
# Adjust layout and show
plt.tight_layout()
plt.show()
main()