This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:lesson8 [2019/11/06 16:43] golikov |
en:lesson8 [2019/11/07 16:44] golikov |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | FIXME **This page is not fully translated, yet. Please help completing the translation.**\\ //(remove this paragraph once the translation is finished)// | + | ====== Lesson 08. Getting acquainted with the solar sensors ====== |
- | + | ||
- | ====== Getting acquainted with the solar sensors ====== | + | |
===== Getting acquainted with smartphone’s light sensor ===== | ===== Getting acquainted with smartphone’s light sensor ===== | ||
Download on smartphone the Andro sensor (or similar) application displaying the information from smartphone’s integrated sensors. | Download on smartphone the Andro sensor (or similar) application displaying the information from smartphone’s integrated sensors. | ||
Line 127: | Line 125: | ||
#!/usr/bin/env python | #!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
- | # Коэффициент дифференциальной обратной связи. | + | # Differential feedback coefficient. |
- | # Коэффициент подбирается экспериментально в зависимости от формы | + | |
- | # и массы вашего спутника. | + | |
kd = 200.0 | kd = 200.0 | ||
- | # Временной шаг работы алгоритма, с | + | # Algorithm working time step, s |
time_step = 0.05 | time_step = 0.05 | ||
- | # Целевая угловая скорость спутника, град/с. | + | # Satellite’s target angular velocity, deg/s. |
- | # Для режима стабилизации равна 0.0. | + | # For stabilization mode it is 0.0. |
omega_goal = 0.0 | omega_goal = 0.0 | ||
- | # Максимально допустимая скорость маховика, об/мин | + | # Maximum allowed flywheel speed, rev/min |
mtr_max_speed = 5000 | mtr_max_speed = 5000 | ||
- | # Номер маховика | + | # Flywheel number |
mtr_num = 1 | mtr_num = 1 | ||
- | # Номер ДУС (датчика угловой скорости) | + | # Angular velocity sensors’ number |
hyr_num = 1 | hyr_num = 1 | ||
- | # Номер магнитометра | + | # Magnetometer number |
mag_num = 1 | mag_num = 1 | ||
- | # Номер результата измерений | + | # Measuring result’s number |
i = 1 | i = 1 | ||
- | # Угол поворота текущий | + | # Current turning angle |
alpha = 0.0 | alpha = 0.0 | ||
- | # Функция включает все приборы, | + | # The function will switch on all apparatuses |
- | # которые будут использоваться в основной программе. | + | # that will be used in the main program. |
def initialize_all(): | def initialize_all(): | ||
print "Enable angular velocity sensor №", hyr_num | print "Enable angular velocity sensor №", hyr_num | ||
Line 157: | Line 154: | ||
print "Enable magnetometer", mag_num | print "Enable magnetometer", mag_num | ||
magnetometer_turn_on(mag_num) | magnetometer_turn_on(mag_num) | ||
- | sleep(1) # Ждем включения 1 секунду | + | sleep(1) # Wait 1 second for switching on |
print "Enable Sun sensors 1-4" | print "Enable Sun sensors 1-4" | ||
sun_sensor_turn_on(1) | sun_sensor_turn_on(1) | ||
Line 168: | Line 165: | ||
sleep(1) | sleep(1) | ||
- | # Функция отключает все приборы, | + | # The function will switch off all sensors, |
- | # которые будут использоваться в основной программе. | + | # that will be used in the main program. |
def switch_off_all(): | def switch_off_all(): | ||
print "Finishing..." | print "Finishing..." | ||
Line 184: | Line 181: | ||
def mag_calibrated(magx,magy,magz): | def mag_calibrated(magx,magy,magz): | ||
- | # вместо этих 3-х строк кода с коэффициентами калибровки, должны быть строки с коэффициентами калибровки для Вашего магнитометра | + | # instead of these 3 lines of code with calibration factors there must be the lines with calibration factors of your magnetometer |
- | #magx_cal = 1.04*magx - 0.26*magy + 0.05*magz - 68.76 # это 1-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра | + | #magx_cal = 1.04*magx - 0.26*magy + 0.05*magz - 68.76 # it is the 1st line that must be changed with results of your magnetometer calibration |
- | #magy_cal = 0.24*magx + 1.04*magy + 0.29*magz + 256.92 # это 2-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра | + | #magy_cal = 0.24*magx + 1.04*magy + 0.29*magz + 256.92 # it is the 2nd line that must be changed with results of your magnetometer calibration а |
- | #magz_cal = -0.09*magx - 0.19*magy + 0.77*magz + 159.41 # это 3-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра | + | #magz_cal = -0.09*magx - 0.19*magy + 0.77*magz + 159.41 # it is the 3rd line that must be changed with results of your magnetometer calibration |
magx_cal = 1.06*(magx + -7.49) + -0.01*(magy + -23.59) + 0.07*(magz + -108.24) | magx_cal = 1.06*(magx + -7.49) + -0.01*(magy + -23.59) + 0.07*(magz + -108.24) | ||
magy_cal = -0.01*(magx + -7.49) + 1.11*(magy + -23.59) + 0.09*(magz + -108.24) | magy_cal = -0.01*(magx + -7.49) + 1.11*(magy + -23.59) + 0.09*(magz + -108.24) | ||
Line 193: | Line 190: | ||
return magx_cal, magy_cal, magz_cal | return magx_cal, magy_cal, magz_cal | ||
- | # Функции для определение новой скорости маховика. | + | # Functions that defines flywheel’s new speed. |
- | # Новая скорость маховика складывается из | + | # Flywheel’s new speed will be the sum of |
- | # текущей скорости маховика и приращения скорости. | + | # flywheel’s current speed and speed increment. |
- | # Приращение скорости пропорционально ошибке по углу | + | # Speed increment is proportioned by angle error |
- | # и ошибке по угловой скорости. | + | # and angular velocity error. |
- | # mtr_speed - текущая угловая скорость маховика, об/мин | + | # mtr_speed - flywheel’s current angular speed, rev/min |
- | # omega - текущая угловая скорость спутника, град/с | + | # omega – satellite’s current angular speed, deg/s |
- | # omega_goal - целевая угловая скорость спутника, град/с | + | # omega_goal - target satellite’s angular speed, deg/s |
- | # mtr_new_speed - требуемая угловая скорость маховика, об/мин | + | # mtr_new_speed - target flywheel’s angular speed, rev/min |
def motor_new_speed_PD(mtr_speed, omega, omega_goal): | def motor_new_speed_PD(mtr_speed, omega, omega_goal): | ||
mtr_new_speed = int(mtr_speed | mtr_new_speed = int(mtr_speed | ||
Line 212: | Line 210: | ||
return mtr_new_speed | return mtr_new_speed | ||
- | # Основная функция программы, в которой вызываются остальные функции. | + | # Program’s main function that will call other functions. |
def control(): | def control(): | ||
- | omega_goal = 0 # omega_goal - целевая угловая скорость спутника, град/с | + | omega_goal = 0 # omega_goal - target satellite’s angular speed, deg/s |
initialize_all() | initialize_all() | ||
- | # Инициализируем статус маховика | + | # Initialize flywheel’s status |
mtr_state = 0 | mtr_state = 0 | ||
- | # Инициализируем статус ДУС | + | # Initialize angular velocity sensor’s status |
hyro_state = 0 | hyro_state = 0 | ||
- | sun_sensor_num = 0 # Инициализируем переменную для номера солнечного датчика | + | sun_sensor_num = 0 # Initialize the variable for the solar sensor’s number |
- | sun_result_1 = [0,0,0] # Инициализируем sun_result_1 | + | sun_result_1 = [0,0,0] # Initialize sun_result_1 |
- | sun_result_2 = [0,0,0] # Инициализируем sun_result_2 | + | sun_result_2 = [0,0,0] # Initialize sun_result_2 |
- | sun_result_3 = [0,0,0] # Инициализируем sun_result_3 | + | sun_result_3 = [0,0,0] # Initialize sun_result_3 |
- | sun_result_4 = [0,0,0] # Инициализируем sun_result_4 | + | sun_result_4 = [0,0,0] # Initialize sun_result_4 |
mag_alpha = 0 | mag_alpha = 0 | ||
output_data_all = [0, 0, 0, 0, 0, 0, 0, 0, 0] | output_data_all = [0, 0, 0, 0, 0, 0, 0, 0, 0] | ||
output_data = [0, 0, 0, 0, 0, 0, 0, 0, 0] | output_data = [0, 0, 0, 0, 0, 0, 0, 0, 0] | ||
- | # Номер результата измерений | + | # Measuring result’s number |
i = 0 | i = 0 | ||
- | # Запоминаем время начала вращения | + | # Put into memory rotation start time |
time_start = time.time() | time_start = time.time() | ||
- | # Запоминаем время начала секундного интервала | + | # Put into memory one-second interval start time |
time_interval = time.time() | time_interval = time.time() | ||
- | # Интервал вывода данных с солнечных датчиков в секундах | + | # solar sensors data output interval in seconds |
time_output = 0.1 | time_output = 0.1 | ||
while True: | while True: | ||
- | # Опрос датчика угловой скорости и маховика. | + | # angular velocity sensor and flywheel data request |
hyro_state, gx_raw, gy_raw, gz_raw = hyro_request_raw(hyr_num) | hyro_state, gx_raw, gy_raw, gz_raw = hyro_request_raw(hyr_num) | ||
mtr_state, mtr_speed = motor_request_speed(mtr_num) | mtr_state, mtr_speed = motor_request_speed(mtr_num) | ||
mag_state, magx_raw, magy_raw, magz_raw = magnetometer_request_raw(mag_num) | mag_state, magx_raw, magy_raw, magz_raw = magnetometer_request_raw(mag_num) | ||
- | # Обработка показаний датчика угловой скорости, | + | # Processing the readings of angular velocity sensor, |
- | # вычисление угловой скорости спутника по показаниям ДУС. | + | # calculation of satellite angular velocity upon angular velocity sensor’s readings. |
- | # Если код ошибки ДУС равен 0, т.е. ошибки нет | + | # If angular velocity sensor’s error code is 0 (no error) |
if not hyro_state: | if not hyro_state: | ||
gx_degs = gx_raw * 0.00875 | gx_degs = gx_raw * 0.00875 | ||
gy_degs = gy_raw * 0.00875 | gy_degs = gy_raw * 0.00875 | ||
gz_degs = gz_raw * 0.00875 | gz_degs = gz_raw * 0.00875 | ||
- | # если ДУС установлен осью z вверх, то угловая скорость | + | # if angular velocity sensor arranged via z-axis up, then satellite’s angular velocity |
- | # спутника совпадает с показаниями ДУС по оси z, иначе | + | # matches to sensors’ readings of z-axis, otherwise |
- | # необходимо изменить знак: omega = - gz_degs | + | # it is required to reverse the sign: omega = - gz_degs |
omega = gz_degs | omega = gz_degs | ||
elif hyro_state == 1: | elif hyro_state == 1: | ||
Line 261: | Line 259: | ||
print "Fail because of interface error, check your code" | print "Fail because of interface error, check your code" | ||
- | #Обработка показаний маховика и установка трубемой угловой скорости. | + | # Processing the readings of flywheel and setting the target angular velocity. |
- | if not mtr_state: # если код ошибки 0, т.е. ошибки нет | + | if not mtr_state: # if magnetometer returned error code 0 (no error) |
- | # установка новой скорости маховика | + | # set flywheel’s new speed |
mtr_new_speed = motor_new_speed_PD(mtr_speed,omega,omega_goal) | mtr_new_speed = motor_new_speed_PD(mtr_speed,omega,omega_goal) | ||
motor_set_speed(mtr_num, mtr_new_speed) | motor_set_speed(mtr_num, mtr_new_speed) | ||
Line 269: | Line 267: | ||
time.sleep(time_step) | time.sleep(time_step) | ||
time_current = time.time() - time_start | time_current = time.time() - time_start | ||
- | if not mag_state: # если магнитометр вернул код ошибки 0, т.е. ошибки нет | + | if not mag_state: # if magnetometer returned error code 0 (no error) |
magx_cal, magy_cal, magz_cal = mag_calibrated(magx_raw,magy_raw,magz_raw) | magx_cal, magy_cal, magz_cal = mag_calibrated(magx_raw,magy_raw,magz_raw) | ||
- | magy_cal = - magy_cal # переходим из левой системы координат, которая изображена на магнитометре в правую, для того чтобы положительное направление угла было против часовой стрелки | + | magy_cal = - magy_cal # transition from the left coordinate system which is plotted on the magnetometer, to the right coordinate system to position the positive angle direction counter clock-wise |
mag_alpha = math.atan2(magy_cal, magx_cal)/math.pi*180 | mag_alpha = math.atan2(magy_cal, magx_cal)/math.pi*180 | ||
if (time.time() - time_interval) > time_output: | if (time.time() - time_interval) > time_output: | ||
- | # Запоминаем время начала следующего секундного интервала | + | # Put into memory next one-second interval starting time |
time_interval = time.time() | time_interval = time.time() | ||
sun_result_1 = sun_sensor_request_raw(1) | sun_result_1 = sun_sensor_request_raw(1) | ||
Line 286: | Line 284: | ||
output_data_all += output_data | output_data_all += output_data | ||
- | if i > 100: # Начинаем вращение через 5с после запуска | + | if i > 100: # Start rotation upon 5 seconds delay from the moment of launching |
- | omega_goal = 6.0 # omega_goal - целевая угловая скорость спутника, град/с | + | omega_goal = 6.0 # omega_goal – satellite’s target angular velocity, deg/s |
if time_current > 90: | if time_current > 90: | ||
Line 303: | Line 301: | ||
</file> | </file> | ||
- | Код на С. | + | С code. |
<file c sun_raw.c> | <file c sun_raw.c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Line 314: | Line 312: | ||
#include <time.h> | #include <time.h> | ||
- | /*Коэффициент дифференциальной обратной связи. | + | //Differential feedback coefficient. |
- | Коэффициент положительный, если маховик расположен осью z вверх | + | |
- | и ДУС расположен осью z также вверх. | + | |
- | Коэффициент подбирается экспериментально в зависимости от формы | + | |
- | и массы вашего спутника.*/ | + | |
const float kd = 200.0; | const float kd = 200.0; | ||
- | // Временной шаг работы алгоритма, с | + | // Algorithm working time step, s |
const float time_step = 0.1; | const float time_step = 0.1; | ||
- | /* Целевая угловая скорость спутника, град/с. Для режима стабилизации равна 0.0.*/ | + | // Satellite’s target angular velocity, deg/s. For stabilization mode it is 0.0 |
const float omega_goal = 0.0; | const float omega_goal = 0.0; | ||
- | // Максимально допустимая скорость маховика, об/мин | + | // Maximum allowed flywheel speed, rev/min |
const int mtr_max_speed = 5000; | const int mtr_max_speed = 5000; | ||
- | const uint16_t mtr_num = 1; // Номер маховика | + | const uint16_t mtr_num = 1; // Flywheel number |
- | const uint16_t hyr_num = 1; // Номер ДУС | + | const uint16_t hyr_num = 1; // Angular velocity sensors’ number |
- | const uint16_t mag_num = 1; // Номер магнитометра | + | const uint16_t mag_num = 1; // Magnetometer number |
- | // Номер результата измерений | + | // Measuring result’s number |
int i = 1; | int i = 1; | ||
- | // Угол поворота текущий | + | // Current turning angle |
const float alpha = 0.0; | const float alpha = 0.0; | ||
- | |||
- | |||
- | void initialize_all(void){/* Функция включает все приборы, | + | void initialize_all(void){/* // The function will switch on all apparatuses that will be used in the main program. |
- | которые будут использоваться в основной программе.*/ | + | |
printf("Enable angular velocity sensor №%d\n", hyr_num); | printf("Enable angular velocity sensor №%d\n", hyr_num); | ||
hyro_turn_on(hyr_num); | hyro_turn_on(hyr_num); | ||
Line 345: | Line 336: | ||
printf("Enable magnetometer %d\n", mag_num); | printf("Enable magnetometer %d\n", mag_num); | ||
magnetometer_turn_on(mag_num); | magnetometer_turn_on(mag_num); | ||
- | Sleep(1); // Ждем включения 1 секунду | + | Sleep(1); // Wait 1 second for switching on |
printf("Enable Sun sensors 1-4\n"); | printf("Enable Sun sensors 1-4\n"); | ||
sun_sensor_turn_on(1); | sun_sensor_turn_on(1); | ||
Line 357: | Line 348: | ||
} | } | ||
- | void switch_off_all(void){/* Функция отключает все приборы, | + | void switch_off_all(void){ // The function will switch off all apparatuses, that will be used in the main program. |
- | которые будут использоваться в основной программе.*/ | + | |
printf("Finishing..."); | printf("Finishing..."); | ||
int16_t new_speed = 0; | int16_t new_speed = 0; | ||
Line 374: | Line 364: | ||
int mag_calibrated(int16_t *magx, int16_t *magy, int16_t *magz ){ | int mag_calibrated(int16_t *magx, int16_t *magy, int16_t *magz ){ | ||
- | /*Функция mag_calibrated вносит поправки | + | /* instead of these 3 lines of code with calibration factors |
- | в показания магнитометра с учетом калибровочных коэффициентов | + | there must be the lines with calibration factors of your magnetometer */ |
- | вместо этих 3-х строк кода с коэффициентами калибровки, должны быть строки с коэффициентами калибровки для Вашего магнитометра | + | //magx_cal = 1.04*magx - 0.26*magy + 0.05*magz - 68.76 // it is the 1st line that must be changed with results of your magnetometer calibration |
- | //magx_cal = 1.04*magx - 0.26*magy + 0.05*magz - 68.76 # это 1-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра | + | //magy_cal = 0.24*magx + 1.04*magy + 0.29*magz + 256.92 // it is the 2nd line that must be changed with results of your magnetometer calibration а |
- | //magy_cal = 0.24*magx + 1.04*magy + 0.29*magz + 256.92 # это 2-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра | + | //magz_cal = -0.09*magx - 0.19*magy + 0.77*magz + 159.41 // it is the 3rd line that must be changed with results of your magnetometer calibration |
- | //magz_cal = -0.09*magx - 0.19*magy + 0.77*magz + 159.41 # это 3-я строчка, которую нужно заменить по результатам калибровки Вашего магнитометра*/ | + | |
float magx_cal; | float magx_cal; | ||
float magy_cal; | float magy_cal; | ||
Line 393: | Line 382: | ||
int motor_new_speed_PD(int mtr_speed, float omega, int16_t omega_goal){ | int motor_new_speed_PD(int mtr_speed, float omega, int16_t omega_goal){ | ||
- | /* Функция для определения новой скорости маховика. | + | /* |
- | Новая скорость маховика складывается из | + | Functions that defines flywheel’s new speed. |
- | текущей скорости маховика и приращения скорости. | + | Flywheel’s new speed will be the sum of |
- | Приращение скорости пропорционально ошибке по углу и ошибке по угловой скорости. | + | flywheel’s current speed and speed increment. |
- | mtr_speed - текущая угловая скорость маховика, об/мин | + | Speed increment is proportioned by angle error |
- | omega - текущая угловая скорость спутника, град/с | + | and angular velocity error. |
- | omega_goal - целевая угловая скорость спутника, град/с | + | mtr_speed - flywheel’s current angular speed, rev/min |
- | mtr_new_speed - требуемая угловая скорость маховика, об/мин*/ | + | omega – satellite’s current angular speed, deg/s |
+ | omega_goal - target satellite’s angular speed, deg/s | ||
+ | mtr_new_speed - target flywheel’s angular speed, rev/min | ||
+ | */ | ||
int16_t mtr_new_speed; | int16_t mtr_new_speed; | ||
mtr_new_speed = (int)(mtr_speed + kd * (omega - omega_goal)); | mtr_new_speed = (int)(mtr_speed + kd * (omega - omega_goal)); | ||
Line 414: | Line 406: | ||
} | } | ||
- | int control(){// Основная функция программы, в которой вызываются остальные функции. | + | int control(){// Program’s main function that will call other functions. |
int16_t omega; | int16_t omega; | ||
- | int omega_goal = 0; // omega_goal - целевая угловая скорость спутника, град/с | + | int omega_goal = 0; // omega_goal - target satellite’s angular speed, deg/s |
initialize_all(); | initialize_all(); | ||
- | int mtr_state = 0; // Инициализируем статус маховика | + | int mtr_state = 0; // Initialize flywheel’s status |
- | int hyro_state = 0; // Инициализируем статус ДУС | + | int hyro_state = 0; // Initialize angular velocity sensor’s status |
- | int mag_state = 0; // Инициализируем статус магнитометра | + | int mag_state = 0; // Initialize magnetometer |
int16_t mtr_speed; | int16_t mtr_speed; | ||
int16_t mtr_new_speed; | int16_t mtr_new_speed; | ||
- | //данные ДУС | + | //angular velocity sensor’s data |
int16_t gx_raw; | int16_t gx_raw; | ||
int16_t gy_raw; | int16_t gy_raw; | ||
Line 430: | Line 422: | ||
int16_t *hyroy_raw= &gy_raw; | int16_t *hyroy_raw= &gy_raw; | ||
int16_t *hyroz_raw = &gz_raw; | int16_t *hyroz_raw = &gz_raw; | ||
- | //данные магнитометра | + | //magnetometer data |
int16_t mgx_cal=0; | int16_t mgx_cal=0; | ||
int16_t mgy_cal=0; | int16_t mgy_cal=0; | ||
Line 441: | Line 433: | ||
float gy_degs; | float gy_degs; | ||
float gz_degs; | float gz_degs; | ||
- | uint16_t sun_result_1[] = {0,0,0}; // Инициализируем sun_result_1 | + | uint16_t sun_result_1[] = {0,0,0}; // Initialize sun_result_1 |
- | uint16_t sun_result_2[] = {0,0,0}; // Инициализируем sun_result_2 | + | uint16_t sun_result_2[] = {0,0,0}; // Initialize sun_result_2 |
- | uint16_t sun_result_3[] = {0,0,0}; // Инициализируем sun_result_3 | + | uint16_t sun_result_3[] = {0,0,0}; // Initialize sun_result_3 |
- | uint16_t sun_result_4[] = {0,0,0}; // Инициализируем sun_result_4 | + | uint16_t sun_result_4[] = {0,0,0}; // Initialize sun_result_4 |
int mag_alpha = 0; | int mag_alpha = 0; | ||
const int sizeOD = 10; | const int sizeOD = 10; | ||
Line 452: | Line 444: | ||
double* output_data_all = (double*)calloc(sizeODA, sizeof(double)); | double* output_data_all = (double*)calloc(sizeODA, sizeof(double)); | ||
- | // Номер результата измерений | + | // Measuring result’s number |
int i = 0; | int i = 0; | ||
- | // Запоминаем время начала вращения | + | // Put into memory rotation start time |
long int time_start = time(NULL); | long int time_start = time(NULL); | ||
- | // Запоминаем время начала секундного интервала | + | // Put into memory one-second interval start time |
long int time_interval = time(NULL); | long int time_interval = time(NULL); | ||
- | // Интервал вывода данных с солнечных датчиков в секундах | + | // solar sensors data output interval in seconds |
int time_output = 0.1; | int time_output = 0.1; | ||
int j; | int j; | ||
Line 464: | Line 456: | ||
while (a==1){ | while (a==1){ | ||
- | // Опрос датчика угловой скорости и маховика. | + | // angular velocity sensor and flywheel data request |
hyro_state = hyro_request_raw(hyr_num,hyrox_raw,hyroy_raw,hyroz_raw); | hyro_state = hyro_request_raw(hyr_num,hyrox_raw,hyroy_raw,hyroz_raw); | ||
mtr_state = motor_request_speed(mtr_num, &mtr_speed); | mtr_state = motor_request_speed(mtr_num, &mtr_speed); | ||
Line 471: | Line 463: | ||
if (!hyro_state){ | if (!hyro_state){ | ||
- | /*Обработка показаний датчика угловой скорости, | + | /*Processing the readings of angular velocity sensor, |
- | вычисление угловой скорости спутника по показаниям ДУС. | + | calculation of satellite angular velocity upon angular velocity sensor’s readings. |
- | Если код ошибки ДУС равен 0, т.е. ошибки нет*/ | + | If angular velocity sensor’s error code is 0 (no error) */ |
gx_degs = gx_raw * 0.00875; | gx_degs = gx_raw * 0.00875; | ||
gy_degs = gy_raw * 0.00875; | gy_degs = gy_raw * 0.00875; | ||
gz_degs = gz_raw * 0.00875; | gz_degs = gz_raw * 0.00875; | ||
- | /* если ДУС установлен осью z вверх, то угловая скорость | + | /* if angular velocity sensor arranged via z-axis up, then satellite’s angular velocity |
- | спутника совпадает с показаниями ДУС по оси z, иначе | + | matches to sensors’ readings of z-axis, otherwise |
- | необходимо изменить знак: omega = - gz_degs*/ | + | it is required to reverse the sign: omega = - gz_degs */ |
omega = gz_degs; | omega = gz_degs; | ||
// printf("gx_degs=%f, gy_degs=%f, gz_degs=%f\n", gx_degs, gy_degs, gz_degs);//ну так на всякий | // printf("gx_degs=%f, gy_degs=%f, gz_degs=%f\n", gx_degs, gy_degs, gz_degs);//ну так на всякий | ||
Line 491: | Line 483: | ||
- | //Обработка показаний маховика и установка требуемой угловой скорости. | + | //Processing the readings of flywheel and setting the target angular velocity. |
- | if (!mtr_state) {// если код ошибки 0, т.е. ошибки нет | + | if (!mtr_state) {// if error code 0 (no error) |
int16_t mtr_speed=0; | int16_t mtr_speed=0; | ||
motor_request_speed(mtr_num, &mtr_speed); | motor_request_speed(mtr_num, &mtr_speed); | ||
// printf("Motor_speed: %d\n", mtr_speed); | // printf("Motor_speed: %d\n", mtr_speed); | ||
- | // установка новой скорости маховика | + | // set flywheel’s new speed |
mtr_new_speed = motor_new_speed_PD(mtr_speed,omega,omega_goal); | mtr_new_speed = motor_new_speed_PD(mtr_speed,omega,omega_goal); | ||
motor_set_speed(mtr_num, mtr_new_speed, &omega); | motor_set_speed(mtr_num, mtr_new_speed, &omega); | ||
Line 506: | Line 498: | ||
if (!mag_state){ | if (!mag_state){ | ||
mag_calibrated(magx_raw,magy_raw,magz_raw); | mag_calibrated(magx_raw,magy_raw,magz_raw); | ||
- | *magy_raw = - *magy_raw; /*переходим из левой системы координат, | + | *magy_raw = - *magy_raw; /*transition from the left coordinate system which is plotted on the magnetometer, to the right coordinate system to position the positive angle direction counter clock-wise*/ |
- | которая изображена на магнитометре в правую, для того чтобы | + | |
- | положительное направление угла было против часовой стрелки*/ | + | |
mag_alpha = atan2(mgy_cal, mgx_cal)/M_PI*180; | mag_alpha = atan2(mgy_cal, mgx_cal)/M_PI*180; | ||
} | } | ||
if ((time(NULL) - time_interval) > time_output){ | if ((time(NULL) - time_interval) > time_output){ | ||
- | // Запоминаем время начала следующего секундного интервала | + | // Put into memory next one-second interval starting time |
time_interval = time(NULL); | time_interval = time(NULL); | ||
sun_result_1[0] = sun_sensor_request_raw(1, &sun_result_1[1],&sun_result_1[2]); | sun_result_1[0] = sun_sensor_request_raw(1, &sun_result_1[1],&sun_result_1[2]); | ||
Line 528: | Line 518: | ||
} | } | ||
} | } | ||
- | if (i > 100){ // Начинаем вращение через 5с после запуска | + | if (i > 100){ // Start rotation upon 5 seconds delay from the moment of launching |
- | omega_goal = 6.0; // omega_goal - целевая угловая скорость спутника, град/с | + | omega_goal = 6.0; // omega_goal - omega_goal – satellite’s target angular velocity, deg/s |
} | } | ||
Line 550: | Line 540: | ||
</file> | </file> | ||
+ | Based on the program run’s results there will be displayed 500 data lines in such form: | ||
- | По результатам работы программы будут выведены 500 строк с данными следующего вида: | ||
<code python> | <code python> | ||
onmessage0.132400989532 74 117 27 25 156 214 156 61 -34.6566118491 | onmessage0.132400989532 74 117 27 25 156 214 156 61 -34.6566118491 | ||
Line 565: | Line 555: | ||
</code> | </code> | ||
- | Где первое значение - время с начала измерений, два следующих – данные с первого солнечного датчика, следующие два значения со второго солнечного датчика, следующие два с третьего и с четвертого. Десятое значение – показания магнетометра (угол поворота Орбикрафт относительно направления на магнитный полюс). | + | when the first value is the time elapsed from measurement start, next two values are the data from the first solar sensor, next two values are the data from the second solar sensor, next two values are the data from the third solar sensor and the next two – from the fourth sensor. The tenth value is magnetometer readings (OrbiCraft’s turning angle as related to direction to the magnetic pole). |
- | Для анализа полученных данных следует скопировать их из браузера (выбрав с помощью Ctrl-A и скопировав с помощью Ctrl-С) и сохранить в новом текстовом документе в Notepad++ (вставка с помощью (Ctrl-V). Затем следует очистить их от служебной информации в начале и в конце файла. | + | To analyze the collected data they must be copied from browser (select the data with Ctrl-A and copy with Ctrl-С) and saved in the new text document created with Notepad++ (insert with Ctrl-V). Than the data must be cleared from service information that is present at the file start and end. |
- | Часто встречающееся служебное слово onmessage следует удалить с помощью функции замены Notepad++. Нажмите на клавиатуре Ctrl-H, введите в поле «Найти» onmessage, поле «Заменить на» оставьте пустым и нажмите на «Заменить все» или «Заменить во всех открытых документах». | + | The frequent service word onmessage must be deleted with Notepad++ replace function. Press Ctrl-H, enter to the “Find” field “onmessage”, leave the “Replace” field blank and press “Replace all” or “Replace in all open documents”. |
{{::08image009.png?nolink&600|}} | {{::08image009.png?nolink&600|}} | ||
- | Сохраните очищенный документ в txt файле. Теперь его можно проанализировать в Excel. | + | Save the clear document in .txt form file. Now it may be analyzed with Excel. |