Инструменты пользователя

Инструменты сайта


lesson5

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
lesson5 [2019/05/14 10:51]
golikov [Проверка работоспособности магнитометра Орбикрафт]
lesson5 [2019/05/14 11:15]
golikov [Получение сырых данных для калибровки магнитометра]
Строка 103: Строка 103:
 Загрузите в БКУ следующую программу,​ которая произведет 60 измерений с шагом в 1 сек. ​ Загрузите в БКУ следующую программу,​ которая произведет 60 измерений с шагом в 1 сек. ​
  
-<code python>+ 
 +Код на Python. 
 +<file python ​azimuth.py>
  
 import math import math
Строка 128: Строка 130:
  magnetometer_turn_off(mag_num)  magnetometer_turn_off(mag_num)
  
 +</​file>​
  
-</​code>​+Код на С. 
 +<file c azimuth.c>​ 
 +#include <​stdio.h>​ 
 +#include <​stdint.h>​ 
 +#include "​libschsat.h"​ 
 +#define LSS_OK 0  
 +#define LSS_ERROR 1  
 +#define LSS_BREAK 2 
 + 
 + 
 +#include <​math.h>​ 
 +void control(void){ 
 + int time_step = 1; 
 + uint16_t mag_num = 1; 
 + printf("​Enable magnetometer %d\n", mag_num); 
 + magnetometer_turn_on(mag_num);​ 
 + Sleep(1);​ 
 + int mag_state = 0; 
 +  
 + int16_t p_dataX; 
 + int16_t p_dataY; 
 + int16_t p_dataZ; 
 + int16_t *pRAW_dataX = &​p_dataX;​ 
 + int16_t *pRAW_dataY = &​p_dataY;​ 
 + int16_t *pRAW_dataZ = &​p_dataZ;​ 
 + int i; 
 + for (i = 0; i < 60; i++){ 
 + mag_state = magnetometer_request_raw(mag_num,​ pRAW_dataX, pRAW_dataY, pRAW_dataZ);​ 
 + float mag_alpha;​ 
 + if (!mag_state){ 
 + mag_alpha = atan2(p_dataY,​ p_dataX)/M_PI*180; 
 + printf("​mag_alpha atan2 = %f\n", mag_alpha);​ 
 +
 + else if (mag_state == 1){ 
 + printf("​Fail because of access error, check the connection\n"​);​ 
 +
 + else if (mag_state == 2){ 
 + printf("​Fail because of interface error, check your code\n"​);​ 
 +
 + Sleep(time_step);​ 
 +
 + printf("​Disable magnetometer %d\n", mag_num); 
 + magnetometer_turn_off(mag_num);​ 
 +
 +</file>
  
 Поворачивайте магнитометр с шагом в 30 градусов и записывайте выдаваемое значение угла в таблицу EXCEL. Должна получится примерно вот такая таблица с данными. Поворачивайте магнитометр с шагом в 30 градусов и записывайте выдаваемое значение угла в таблицу EXCEL. Должна получится примерно вот такая таблица с данными.
Строка 218: Строка 265:
 По умолчанию магнитометр не откалиброван,​ т.е. выдает неточные значения. Уточненные значения можно получить из сырых данных путем калибровки,​ которая заключается в нахождении матрицы преобразования и вектора смещения. Сырые данные с магнитометра можно получить,​ выполнив код на языке Python, представленный ниже. Во время сбора данных магнитометр необходимо хаотично вращать,​ стараясь повернуть его во все возможные стороны. По умолчанию магнитометр не откалиброван,​ т.е. выдает неточные значения. Уточненные значения можно получить из сырых данных путем калибровки,​ которая заключается в нахождении матрицы преобразования и вектора смещения. Сырые данные с магнитометра можно получить,​ выполнив код на языке Python, представленный ниже. Во время сбора данных магнитометр необходимо хаотично вращать,​ стараясь повернуть его во все возможные стороны.
  
-<code python>+Код на Python. 
 +<file python ​raw_data.py>
  
 def control(): #​Основная программы,​ в которой вызываем остальные функции def control(): #​Основная программы,​ в которой вызываем остальные функции
Строка 231: Строка 279:
  sleep(0.05) #​Задержка пять сотых секунды  sleep(0.05) #​Задержка пять сотых секунды
  ​ magnetometer_turn_off(num) #​Выключение магнитометра  ​ magnetometer_turn_off(num) #​Выключение магнитометра
-</code>+</file> 
 + 
 +Код на С. 
 +<file c raw_data.c>​ 
 +#include <​stdio.h>​ 
 +#include <​stdint.h>​ 
 +#include "​libschsat.h"​ 
 +#define LSS_OK 0  
 +#define LSS_ERROR 1  
 +#define LSS_BREAK 2 
 + 
 + 
 +void control(void){ //​Основная программа,​ в которой вызываем остальные функции 
 +/*Для вывода данных необходимость в объявлении массива отпадает*/​ 
 + int16_t mgn_result[] = {0, 0, 0, 0}; //​Инициализируем mgn_result 
 + uint16_t num = 1; 
 + magnetometer_turn_on(num);​ //​Включаем магнитометр 
 + Sleep(1);​ 
 + int i; 
 + for (i = 0; i < 1000; i++) //​Выполним 500 измерений 
 +
 + mgn_result[0] = magnetometer_request_raw(num,​ &​mgn_result[1],&​mgn_result[2],&​mgn_result[3]);​ 
 + if(!mgn_result[0]){ //Если датчик не вернул сообщение об ошибке 
 + printf("​%d,​ %d, %d\n", mgn_result[1],​ mgn_result[2],​ mgn_result[3]);​ 
 +
 + Sleep(0.5);​ //​Задержка пять сотых секунды 
 +
 + magnetometer_turn_off(num);​  
 +
 +</file>
  
 Соедините БКУ с СЭП и магнитометром. Не прикрепляйте магнитометр к пластине,​ чтобы его было удобно вращать. Загрузите программу в Орбикрафт и запустите ее. Хаотично вращайте магнитометр,​ чтобы собрать сырые данные со всех возможных вариантов его ориентации. Соедините БКУ с СЭП и магнитометром. Не прикрепляйте магнитометр к пластине,​ чтобы его было удобно вращать. Загрузите программу в Орбикрафт и запустите ее. Хаотично вращайте магнитометр,​ чтобы собрать сырые данные со всех возможных вариантов его ориентации.
lesson5.txt · Последние изменения: 2020/03/25 16:28 (внешнее изменение)

Инструменты страницы