TriloBot Simulator (C++, Qt4, Flex, Readline, Boost)
File detail
Source code
% Definice stylu a použitých balíků
\documentclass[12pt,a4paper,final]{article}
\usepackage[utf8]{inputenc}
\usepackage{czech}
\usepackage{graphicx}
\usepackage{url}
\usepackage[colorlinks,plainpages=false,urlcolor=blue]{hyperref}
%\usepackage{float}
\begin{document}
% Titulní stránka
\begin{titlepage}
\begin{figure}[h]
\begin{center}\includegraphics*{fit-logo.jpg}\end{center}
\end{figure}
\vspace*{1cm}
\begin{sffamily}
\begin{center}
\begin{Huge}
\textbf{Simluátor Trilobota}\\[1cm](projekt do předmětu ROB)\\[3cm]
\end{Huge}
\begin{large}
\begin{tabular}{ll}
Kamil Dudka&\texttt{xdudka00}\\
Jakub Filák&\texttt{xfilak01}\\
\end{tabular}
\end{large}
\end{center}
\vfill
\begin{Large}BRNO 2008\end{Large}
\end{sffamily}
\vspace*{1cm}
\end{titlepage}
% Začátek textu
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Úvod}
Jako školní týmový projekt jsme si zvolili simulátor trilobota\footnote{
Trilobot je typ robota.} a jeho prostředí. Simulátor komunikuje s aplikacemi
pomocí virtuálního sériového portu. Komunikující aplikace na druhé straně portu
tedy neví, že komunikují se simulátorem místo skutečného robota. Tento přístup
má několik výhod:
\begin{itemize}
\item Práce se simulátorem je stejně \uv{jednoduchá} jako práce s robotem.
\item Není potřeba nijak zasahovat do kódu stávajících aplikací.
\item Aplikace používající simulátor mohou běžet na jiném operačním systému.
\end{itemize}
\noindent
Simulaci robota a jeho prostředí jsme se snažili udělat co nejvíce věrohodnou a
do simulace jsme záměrně zahrnuli některé chyby, které se vyskytují při~práci
se skutečným robotem (prokluz kol apod.).
\section{Návrh}
\begin{figure}[h]
\begin{center}\includegraphics[scale=0.5]{../conceptual.png}\end{center}
\caption{Konceptuální schéma simulátoru}\label{img_arch}
\end{figure}
Simulátor se skládá z několika částích, které jsou na sobě téměř nezávislé.
Klíčovým prvkem celého systému je virtuální sériový port zmíněný výše. Ten je
součásti linuxového (případně FreeBSD) jádra a v terminologii jádra se mu říká
pseudoterminál (PTY). Jeho úloha je znázorněna na obr. \ref{img_arch}.
Pseudoterminál vidí uživatelský proces jako pár zařízení. Na jedno zařízení
(master) je napojen \textit{proces simulátoru}, který řídí komunikaci. Na druhé
stranu (slave) se mohou připojovat aplikace pro řízení robota. Ty mohou se
zařízením pracovat přímo, pokud se jedná o linuxové aplikace. Aplikace, které
jsou původně napsané pro jiné platformy mohou se simulátorem komunikovat pomocí
emulace (wine) nebo virtualizace (VMware).
Speciálním typem klientské aplikace je \textit{terminál}, což je program
patřící k našemu projektu. Tento terminál umožňuje se simulátorem komunikovat
textem a to ve dvou módech. Prvním módem je skriptovací režim, který je vhodný
pro ovládání robota jednoduchými skripty -- např. skript \texttt{demo.sh}, který
je součástí projektu, také používá terminál a jeho skriptovací režim. Naopak
interaktivní režim je vhodný pro interakci s uživatelem. V tom případě je k
dispozici historie příkazů dříve zadaných, ve které je možné zpětně vyhledávat.
Poslední částí simulátoru je \textit{vizualizátor}, který je oddělený od
simulátoru naslouchajícího na virtuálním portu. Procesy simulátoru a
vizualizátoru tedy mohou např. běžet na různých strojích, přičemž je
zajišťována komunikace relativně úsporným protokolem -- posílají se pouze
inkrementální změny stavu robota (rychlost, poloměr zatáčky, stav odometru, ...)
a plánované události (srážka s překážkou, ...).
Princip simulace chování robota je založen na hierarchickém DEVS formalismu.
Rootkoordinátorem celého simulátoru je třída \texttt{Trilobot}. Tak jak ve~skutečnosti
se simulátor trilobota skládá z několika komponent, které ovlivňují trilobotovo
chování. Na~rozdíl od hierarchického DEVS v našem simulátoru neexistují žádné
viditelné propojení mezi komponentami. Komponenty však mohou s ostatními
komponentami komunikovat díky tomu, že simulátor má veřejnou množinu komponent.
Dalším rozdílem mezi naším simulátorem je to, že zpracování událostí se provádí
pouze při příchodu externí události. Náš simulátor tedy nikdy nevykonává interní
události, ale veškeré jeho chování, které je způsobeno externí událostí, se musí
vytvořit do budoucnosti. To znamená, že se musí vykonat všechny interní
události, naplánované po externí události, dokud jsou nějaké plánované. Model
simulátoru je znázorněn na obrázku \ref{devs}.
\begin{figure}[h]
\begin{center}\includegraphics[scale=0.5]{../simulator.png}\end{center}
\caption{Stručný náčrt modelu simulátoru}
\label{devs}
\end{figure}
Chování robota v prostředí simulátoru odpovídá chování robota v reálném
prostředí. Jednotlivé komponenty trilobota napodobují chyby, které se vyskytují
i ve skutečném trilobotovi. Odpovídající odchylky mezi tím, co bylo trilobotovi
zadáno, a tím, co skutečně vykonal, jsme změřili v laboratoři a~také jsme využili
výsledků z práce {\em Trilobot Control, František Zbořil}. Námi naměřené
výsledky jsou uvedeny v tabulce \ref{measure}.
\begin{table}[h]
%\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.4]{../measure.png}
% \floatstyle{ruled}
% \floatname{figure}{Tabulka měření}
\caption{Výsledky měření v laboratoři}
\label{measure}
\end{center}
%\end{figure}
\end{table}
\section{Sestavení a instalace}
Simulátor trilobota je implementován v jazyce C++ s využitím několika volně
dostupných knihoven. V aktuální verzi je přeložitelný na systémech GNU/Linux.
Pro jeho přeložení je nutné mít překladový systém CMake, program pro tvorbu
lexikálních analyzátorů GNU/Flex, vizuální toolkit Qt 4.4+ a C++ knihovnu Boost.
Pokud jsou splněny všechny podmínky stačí pro~přeložení spustit příkaz {\em make
}. Po úspěšném přeložení se nacházejí binární soubory v adresáři {\em build}.
Pro snadnost práce se systémem
jsou vytvořeny tři shellové skripty. Pro spuštění demo ukázky chování trilobota
v~simulátoru stačí spustit skript s~názvem {\tt demo.sh}. Skript spustí
simulátor, vizualizátor a terminál v příkazovém módu, do kterého pošle sadu
ukázkových příkazů. Pro přímé zasílání příkazů trilobotovi stačí spustit skript
s názvem {\tt terminal.sh}, který spustí simulátor, vizualizátor a terminál v
interaktivním módu. Poslední skript slouží pro spuštění vizuálního nástroje pro
řízení trilobota. Tento vizuální nástroj je aplikace vytvořená pro operační
systém MS Windows a je proto nutné mít nainstalován program {\em wine}. Nástroj
nese jméno {\em TrilobotGUI} a nebyl součástí tohoto projektu. Pro spuštění
stačí provést skript s názvem {\tt tg.sh}
%\section{Výsledky}
%Výsledkem projektu je komplexní systém umožňující snadnou simulaci
%chování trilobota.
%\begin{figure}[h]
%\begin{center}\includegraphics[scale=0.35]{../screenshot1.png}\end{center}
%\caption{Snímek okna vizualizace s Trilobot terminálem v pozadí}
%\label{screenshot}
%\end{figure}
\section{Závěr}
Původním cílem bylo zcela nahradit práci v laboratoři pomocí vyvinutého
simulátoru. Tento cíl se ukázal příliš optimistický a simulátor jej splnil jen
z~části. Plnohodnotná simulace robota a jeho prostředí překračuje rámec
školního projektu. Přesto je vzniklý simulátor užitečnou pomůckou pro vývoj
aplikací na~ovládání robota. Díky použité abstrakci sériového portu je možné jej
použít i na testování již hotových aplikacích. Není potřeba měnit zdrojový kód
aplikací ani je jinak upravovat. Navíc je simulace nezávislá na použitém
operačním systému. Objektový model simulátoru je od začátku navrhován, aby byl
co nejvíce rozšiřitelný podle potřeb konkrétní aplikace. Při~jeho návrhu byly
použity návrhové vzory a moderní programovací techniky. Pevně věříme, že bude
tento simulátor užitečný.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Konec textu
\end{document}