close

Вход

Забыли?

вход по аккаунту

файл vf4cfbb9d5c1ef9_201012518125;doc

код для вставкиСкачать
GNSSToolkit
Руководство программиста
Версия 0.001
Оглавление
Общее описание ...................................................................................................................................... 3
Особенности разработки ........................................................................................................................ 5
Классы конфигураций ............................................................................................................................. 6
SolutionConfiguration ........................................................................................................................... 6
HardwareConfiguration......................................................................................................................... 7
IOPortConfiguration .............................................................................................................................. 8
Классы контроллеров .............................................................................................................................. 9
ReceiverController ................................................................................................................................ 9
DataController .....................................................................................................................................11
PostProcessingSolutionController .......................................................................................................13
IOController .........................................................................................................................................16
2
Общее описание
GNSS Toolkit - универсальная программная библиотека, позволяющая решать типовые задачи
спутниковой навигации. Библиотека GNSS Toolkit позволяет строить одночастотное навигационное
решение в трех режимах: автономный кодовый, дифференциальный кодовый и фазовый, вне
зависимости от конфигурации наблюдаемых спутников (ГЛОНАСС, GPS, ГЛОНАСС+GPS). Кроме этого,
она содержит ряд механизмов сглаживания и фильтрации для построения оптимального решения
(фильтр Калмана, сглаживание кодовых данных по фазе, RAIM, оптимизация набора спутников для
решения и др.).
Основная функциональность библиотеки содержится в наборе так называемых
контроллеров, каждый из которых решает определенную задачу. Всего есть пять контроллеров.
Общая схема их взаимодействия представлена на рисунке 1.
3
ReceiverController предоставляет механизм универсального подключения к спутниковым
приемникам различных производителей для управления ими и получения с них данных.
Подключение происходит по одному из доступных аппаратных интерфейсов (в бета-версии
поддерживается только подключение по последовательному порту). Контроллер принимает на
вход байтовый поток данных с приемника, а после их конвертации генерирует набор сигналов, к
которым при необходимости могут быть подключены другие контроллеры. Подробное описание
сигналов можно найти в описании класса ReceiverController.
Похожую функциональность реализует IOController. Данный класс отвечает за
взаимодействие с «внешним миром» - прием и выдачу корректирующих навигационных данных
(поправок). Данный класс поддерживает работу с произвольным количеством аппаратных портов,
по каждому из которых идет независимый поток данных.
Данные, получаемые через ReceiverController и IOController могут быть использованы для
построения решения с помощью RealTimeSolutionController-а. Этот класс строит решение задачи
спутникового позиционирования с установленными настройками, а затем генерирует сигнал с
результатами решения, к которому может быть подключен соответствующий обработчик.
Еще одна возможность использования данных, поступающих через ReceiverController –
сохранение (сбор) этих данных в файл. Эту задачу выполняет класс DataController.
Последний контроллер – PostProcessingSolutionController. Он позволяет строить решение
задачи позиционирования в режиме постобработки. В качестве входных данных используются
файлы с измерениями для ровера и (при использовании любого режима позиционирования
кроме автономного) для базы. На основании данных из этих файлов строится решение, в ходе
чего,
как
и
в случае с
RealTimeSolutionController-ом,
генерируются
сигналы.
4
Особенности разработки
В данном разделе описывается ряд стандартных приемов, использованных при разработке
библиотеки.
1. Сигнал-слот ориентированная архитектура – вся система построена с использованием
идеи сигналов и слотов. Это означает, что большинство объектов системы представляют
собой «черные ящики», которые извещают внешний мир о произошедших событиях и
внутренних изменениях состояния посредством генерации соответствующих сигналов. Для
получения информации от таких объектов требуется подключение к этим сигналам
пользовательских слотов-обработчиков. Для реализации механизма сигналов и слотов
использовалась легковесная библиотека Signals. Полный код этой библиотеки содержится
в header файлах, что существенно облегчает перенос системы на разные платформы.
2. Умные указатели – в большинстве случаев, если требовалось работать с указателями на
объекты, использовались умные указатели shared_ptr из библиотеки Boost. В системе
умный указатель на объект с именем SomeObject описан как SomeObjectPtr. Примеры
использования умных указателей можно найти в секции описания классов контроллеров.
5
Классы конфигураций
SolutionConfiguration
#include <SolutionConfiguration.h>
Общее описание
Данный класс описывает параметры решения задачи спутникового позиционирования. Он
содержит информацию о режиме решения, спутниковых системах, а также значения различных
масок и флагов активности механизмов фильтрации/улучшения качества решения.
Публичные функции
SolutionConfiguration() – создает SolutionConfiguration.
SolutionConfiguration(GpsTime ref_time) – создает SolutionConfiguration с меткой
времени ref_time.
int GetElevationMask() – возвращает значение маски угла возвышения.
double GetPdopMask() – возвращает значение маски PDOP.
SolutionSystem GetSolutionSystem() – возвращает информацию о спутниковых
системах, используемых в решении.
PositioningType GetPositioningType() – возвращает информацию о режиме
решения (типе позиционирования – автономный, кодовый дифференциальный, фазовый).
bool GetIsKalmanFilterOn()
фильтрация, и false в противном случае.
– возвращает true, если включена калмановская
bool GetIsPhaseSmoothingOn() – возвращает true, если включено сглаживание
кодовых данных по фазе, и false в противном случае.
void SetMasks(int elevation, double pdop) – устанавливает значения масок угла
возвышения и PDOP в значения elevation и pdop соответственно.
void
SetBasicParams(SolutionSystem
ss,
PositioningType
pos_type,
SatelliteFreqType freq) – устанавливает значение ss в качестве используемых в решении
спутниковых систем, значение pos_type в качестве режима позиционирования и freq в качестве
частоты, по которой строится решение. На данный момент в системе поддерживается только
частота L1.
void SetFiltering(bool is_kalman_on, bool is_phase_smoothing_on) –
устанавливает параметры использования калмановской фильтрации и сглаживания кодовых
данных по фазе.
6
HardwareConfiguration
#include <HardwareConfiguration.h>
Общее описание
Данный класс описывает параметры произвольного аппаратного интерфейса (это может
быть последовательный порт, USB, ethernet-клиент или ethernet-сервер).
Публичные функции
HardwareConfiguration() – создает HardwareConfiguration.
HardwareConfiguration(HardwareType type, std::string name, int option,
int parity) – создает HardwareConfiguration с заданными параметрами type, name, option и
parity.
HardwareConfiguration(GpsTime time, HardwareType type, std::string name,
int option, int parity) – создает HardwareConfiguration с заданными параметрами и
меткой времени time.
GpsTime GetRefTime() – возвращает метку времени.
HardwareType GetType() – возвращает тип аппаратного соединения.
std::string GetName() – возвращает имя аппаратного соединения.
int GetOption() – возвращает параметр option соединения. Данный параметр имеет
разное значение для разных видов соединений. В случае с последовательным портом он
представляет BaudRate.
int GetParity() – возвращает значение параметра четности.
void SetType(HardwareType value) – устанавливает тип аппаратного соединения.
void SetName(std::string value) – устанавливает имя аппаратного соединения.
void SetOption(int value) – устанавливает значение option для соединения.
void SetParity(int value) – устанавливает значение четности для соединения.
7
IOPortConfiguration
#include <IOPortConfiguration.h>
Общее описание
Данный класс описывает параметры отдельного порта ввода-вывода IOController-a.
Публичные функции
IOPortConfiguration() – создает IOPortConfiguration.
IOPortConfiguration(std::string port_name, DataStreamType stream_type,
IOStreamDirection
flow_dir,
HardwareConfiguration
hw_conf)
– создает
IOPortConfiguration для порта ввода-вывода с именем port_name, типа stream_type, направлением
flow_dir и аппаратным интерфейсом hw_conf.
IOPortConfiguration(GpsTime
ref_time,
std::string
port_name,
DataStreamType stream_type, IOStreamDirection flow_dir, HardwareConfiguration
hw_conf) – создает IOPortConfiguration для порта ввода-вывода с вышеперечисленными
значениями и меткой времени ref_time.
GpsTime GetRefTime() – возвращает метку времени.
std::string GetPortName() – возвращает имя порта ввода-вывода.
DataStreamType GetDataStreamType() – возвращает тип данных порта ввода-вывода.
IOStreamDirection GetIOFlowDirection() – возвращает направление потока данных
порта ввода-вывода.
HardwareConfiguration GetHardwareConfiguration() – возвращает конфигурацию
аппаратного интерфейса порта ввода-вывода.
void SetRefTime(GpsTime value) – устанавливает метку времени в значение ref_time.
void SetPortName(std::string value) – устанавливает value в качестве имени порта
ввода-вывода.
void SetDataStreamType(DataStreamType value) – устанавливает value в качестве
типа данных порта ввода-вывода.
void SetIOFlowDirection(IOStreamDirection
качестве направления потока данных порта.
value
value)
– устанавливает value в
void SetHardwareConfiguration(HardwareConfiguration value) – устанавливает
в
качестве
аппаратного
интерфейса
порта.
8
Классы контроллеров
ReceiverController
#include <ReceiverController.h>
Общее описание
Данный класс представляет собой средство для единообразоного управления
навигационными приемниками различных производителей, а также получения данных с этих
приемников. При получении данных контроллер генерирует соответствующий сигнал, к которому
может быть подключен слот-обработчик. Связь с приемником осуществляется по одному из
поддерживаемых аппаратных каналов (Serial, USB, Ethernet).
Публичные функции
ReceiverControllerPtr
CreateController(ReceiverType
rcv_type,
HardwareConfiguration hw_conf) – создает ReceiverController типа rсv_type, который
подключается к приемнику по аппаратному каналу с параметрами hw_conf.
GpsTime GetCurrentTime() – возвращает GPS время на данный момент.
virtual bool InitController() = 0 – запускает работу контроллера.
virtual void DeinitController() = 0 – останавливает работу контроллера.
virtual void LogReceiverVersion(int ontime = 0) = 0 – запрашивает выдачу
версии приемника (разово или каждые ontime секунд).
virtual void LogReceiverGeoPosition(int ontime = 0) = 0 – запрашивает
выдачу географической позиции приемника (разово или каждые ontime секунд).
virtual void LogReceiverEcefPosition(int ontime = 0) = 0 – запрашивает
выдачу позиции приемника в системе ECEF (разово или каждые ontime секунд).
virtual void LogGpsEphem(bool onchange = false) = 0 – запрашивает выдачу
эфемерид видимых GPS спутников (разово или при каждом изменении).
virtual void LogGloEphem(bool onchange = false) = 0 – запрашивает выдачу
эфемерид видимых ГЛОНАСС спутников (разово или при каждом изменении).
virtual void LogRange(int ontime = 0) = 0 – запрашивает выдачу сырых
спутниковых измерений (разово или каждые ontime секунд).
9
virtual void LogIonosphere(bool onchange = false) = 0 – запрашивает выдачу
данных ионосферы (разово или при каждом изменении).
virtual void LogTimeParams(bool onchange = false) = 0 – запрашивает выдачу
параметров времени (разово или при каждом изменении).
virtual void UnlogAll() = 0 – отменяет все запросы на выдачу.
virtual void ResetReceiver() = 0 – выполняет перезагрузку приемника.
virtual void ResetReceiverToDefaultState() = 0 – выполняет hard reset
приемника.
void SendCommand(std::string command) – посылает команду command на приемник.
void SendCommand(ByteArray command, int len) – посылает команду command
длины len на приемник.
Публичные сигналы
SatelliteGeoPositionSignal SatelliteGeoPositionReceived – сигнал о получении
географической позиции спутника.
RangeSignal RangeReceived – сигнал о получении сырых спутниковых измерений.
ReceiverGeoPositionSignal ReceiverGeoPositionReceived – сигнал о получении
географической позиции приемника.
ReceiverEcefPositionSignal ReceiverEcefPositionReceived – сигнал о получении
позиции приемника в системе ECEF.
ReceiverVersionSignal ReceiverVersionReceived – сигнал о получении версии
приемника.
GpsEphemSignal GpsEphemReceived – сигнал о получении эфемерид GPS спутника.
GloEphemSignal GloEphemReceived – сигнал о получении эфемерид ГЛОНАСС спутника.
SolutionInformationSignal SolutionInformationReceived – сигнал о получении
информации о решении.
IonosphereSignal IonosphereReceived – сигнал о получении данных ионосферы.
TimeParamsSignal TimeParamsReceived – сигнал о получении параметров времени.
Пример использования
См. в описании класса IOController.
10
DataController
#include <DataController.h>
Общее описание
Данный класс предназначен для организации записи в файлы сырых спутниковых данных,
поступающих от класса ReceiverController. Собранные данные хранятся в файлах GTK (внутренний
формат GNSSToolkit), которые затем могут быть сконвертированы в RINEX.
Публичные функции
DataController(ReceiverController* controller) – создает объект DataController,
который будет записывать данные, поступающие из передаваемого в параметрах controller-а.
bool Start() – запускает запись данных в файл.
bool Stop() – останавливает запись данных в файл.
void SetBaseName(std::string value) – устанавливает имя базовой станции в value,
в дальнейшем это значение используется для именования файлов данных.
void SetDestinationFolder(std::string value) – устанавливает путь к папке, в
которую будут записываться файлы данных, в value.
std::string GetCurrentFileName() – возвращает имя файла, в который в данный
момент записывается информация.
Публичные сигналы
RawFileStartedSignal
нового файла данных для записи.
RawFileStarted
– сигнал, посылаемый при открытии
RawFileFinishedSignal
RawFileFinished – сигнал, посылаемый при закрытии
файла, в который происходит запись данных.
11
Пример использования
Данный пример демонстрирует создание объекта класса DataController, подключение его к
соответствующему ReceiverController-y и запуск сбора сырых спутниковых измерений в GTF файл.
DataControllerPtr
data_cn;
ReceiverControllerPtr rcv_cn;
HardwareConfiguration hw_conf(SerialPortType, "COM4", 115200, 0);
rcv_cn = ReceiverController::CreateController(NovAtel, hw_conf);
data_cn = boost::make_shared<DataController>(rcv_cn);
data_cn->SetBaseName("base_name");
data_cn->SetDestinationFolder("dest_folder_path");
rcv_cn->InitController();
data_cn->Start();
12
PostProcessingSolutionController
#include <SolutionControllers.h>
Общее описание
Данный класс предназначен для построения решения задачи позиционирования в режиме
постобработки. В качестве входных данных используются файлы сырых измерений ровера и (при
необходимости) базовой станции. При получении решения генерируется сигнал, к которому
может быть подключен слот-обработчик. Требуемые параметры решения задаются классом
SolutionConfiguration.
Публичные функции
PostProcessingSolutionController(SolutionConfiguration
conf,
EcefPosition
rover
=
EcefPosition(1,1,1),
EcefPosition
base
=
EcefPosition(1,1,1)) – создает объект PostProcessingSolutionController для построения
решения с параметрами conf, устанавливает позицию ровера в rover и позицию базовой станции в
base.
void LoadDataFromFile(bool rover, std::string file_name, ReceiverType
rcv_type) – загружает из файла file_name данные спутниковых измерений в формате rcv_type. В
зависимости от параметра rover, данные из файла интерпретируются как данные ровера или
базовой станции.
Публичные сигналы
SolutionComputedSignal SolutionComputed – сигнал о получении решения задачи
позиционирования.
ComputationFinishedSignal ComputationFinished – сигнал об окончании процесса
постобработки файла.
13
Пример использования
Данный пример демонстрирует процесс создания объекта класса
PostProcessingSolutionController, добавления в него спутниковых измерений и последующего
запуска вычислений.
PostProcessingSolutionControllerPtr sol_cnt;
SolutionConfiguration sol_conf;
sol_conf.SetBasicParams(GPS, PositionAutonom, FreqTypeL1);
sol_conf.SetMasks(5, 5);
sol_conf.SetFiltering(false, false);
sol_cnt = boost::make_shared<PostProcessingSolutionController>(sol_conf);
sol_cnt->SolutionComputed.Connect(this,&SomeSolutionComputedSlot);
sol_cnt->ComputationFinished.Connect(this,&SomeComputationFinishedSlot);
sol_cnt->FileLoaded.Connect(this, &SomeFileLoadedSlot);
sol_cnt->SetDataFile(true, "rover_file_path", NovAtel);
sol_cnt->Start(true, true);
14
RealTimeSolutionController
#include <SolutionControllers.h>
Общее описание
Данный класс предназначен для построения решения навигационной задачи в режиме
реального времени. В качестве входных данных используются сырые измерения, поступающие от
ReceiverController-a и (при необходимости) IOController-a. Требуемые параметры решения
задаются классом SolutionConfiguration.
Публичные функции
RealTimeSolutionController(ReceiverControllerPtr
rcv_cont,
IOControllerPtr io_cont, SolutionConfiguration conf, EcefPosition rover =
EcefPosition(1,1,1), EcefPosition base = EcefPosition(1,1,1)) – создает объект
типа RealTimeSolutionController, который может строить решение на основании данных от rcv_cont
и io_cont. Конфигурация решения задается параметром conf. В качестве начальной
инициализации позиции используется точка rover. Если решение строится не в автономном
режиме, требуется задание позиции base базовой станции.
void
SetBasePosition(EcefPositionPtr
положение базовой станции в значение base_position.
base_position)
–
устанавливает
void Start() – начинает работу контроллера.
void Stop() – останавливает работу контроллера.
Публичные сигналы
SolutionComputedSignal SolutionComputed – сигнал о получении решения задачи
позиционирования.
Пример использования
См. в описании класса IOController.
15
IOController
#include <IOController.h>
Общее описание
Данный класс предназначен для формирования/получения извне RTK поправок. Класс
содержит набор аппаратных соединений, эмулирующих порты ввода-вывода приемника, через
которые происходит передача коррекций. Разные порты могут обрабатывать независимые потоки
данных, при этом в каждый момент времени может быть только один поток входных поправок и
неограниченное количество потоков выходных поправок. При получении поправок извне
происходит генерация соответствующего сигнала. Объект класса IOController соединяется с
ReceiverController-ом для формирования поправок из сырых данных и дальнейшей выдачи их на
необходимый порт.
Публичные функции
IOController(ReceiverControllerPtr contr) – создает объект класса IOController.
void AddIOPort(IOPortConfiguration conf) – добавляет IOController-у новый порт с
конфигурацией conf.
void RemoveIOPort(std::string port_name) – удаляет из IOController-а порт с
именем port_name.
void StartIOPort(std::string name) – активизирует работу порта с именем name.
void StopIOPort(std::string name) – останавливает работу порта с именем name.
void StartAllIOPorts()
IOController-е.
– активизирует работу всех портов, содержащихся в
void StopAllIOPorts()
IOController-е.
– останавливает работу всех портов, содержащихся в
Публичные сигналы
CorrectionReceivedSignal CorrectionReceived – сигнал о получении поправок
извне.
16
Пример использования
В данном примере создаются объекты классов ReceiverController и IOController с
соответствующими конфигурациями. Затем создается и запускается RealTimeSolutionController с
конфигурацией решения sol_conf. После этого ReceiverController настраивается на выдачу сырых
спутниковых данных. Далее активизируется IOController, содержащий в примере один входной
порт.
ReceiverControllerPtr rcv_cn;
IOControllerPtr io_cn;
HardwareConfiguration rover_hw, base_hw;
RealTimeSolutionControllerPtr sol_cn;
rover_hw.SetType(SerialPortType);
rover_hw.SetName("COM4");
rover_hw.SetOption(115200);
rcv_cn = ReceiverController::CreateController(NovAtel, rover_hw);
io_cn = boost::make_shared<IOController>(rcv_cn);
base_hw.SetType(SerialPortType);
base_hw.SetName(("COM5");
base_hw.SetOption(115200);
IOPortConfiguration port_conf("RCV_COM", NovAtel, IOFlowIn, base_hw);
io_cn->AddIOPort(port_conf);
SolutionConfiguration sol_conf;
sol_conf.SetBasicParams(GPS, PositionAutonom, FreqTypeL1);
sol_conf.SetMasks(5, 5);
sol_conf.SetFiltering(false, false);
sol_cn = boost::make_shared<RealTimeSolutionController>(rcv_cn, io_cn, sol_conf);
sol_cn->SolutionComputed.Connect(this, &SomeSlotFunction);
sol_cn->Start();
rcv_cn->InitController();
rcv_cn->UnlogAll();
rcv_cn->LogRange(1);
rcv_cn->LogGpsEphem(true);
rcv_cn->LogGloEphem(true);
rcv_cn->LogIonosphere(true);
io_cn->StartAllIOPorts();
17
1/--страниц
Пожаловаться на содержимое документа