Skip to content

Dokumentacja

eatrunner edited this page Jun 7, 2016 · 20 revisions

Symulacja ruchu drogowego

Autorzy:
Koordynator:

  • Karol Niedzielewski
    Moduł Car:
  • Aleksander Brzozowski
  • Mateusz Koroś
  • Ksawery Pasikowski
  • Paweł Rybak Moduł NodesAndRoutes:
  • Michał Pilarek
  • Kacper Szczypior
    Moduł MapOfCity i Model:
  • Kamil Gabryjelski
  • Antek Różański
  • Konrad Sobolewski
    Serwisy:
  • Daniel Giełdowski

Zadanie:

Model "autonomicznych" samochodzików jeżdżących po trasie. Trasa zawiera skrzyżowania, na których ruch jest organizowany poprzez światła drogowe.


Instalacja i uruchamianie:

Do instalacji służy skrypt Installation.sh, który należy uruchomić w katalogu */catkin_ws. Do uruchamiania programu służy skrypt RunProjekt.sh, który należy uruchomić w katalogu */catkin_ws.


Wykonanie:

Projekt został podzielony na 5 modułów:

  • MapOfCity
  • NodesAndRoutes
  • Car
  • Model
    Każdy moduł pełni funkcję ROS Node, czyli może nasłuchiwać i nadawać na ROS Topic.

Schemat modułów z nazwami Topic na które nadają Msg:


Opis modułów:

1. MapOfCity

Map pobiera informacje o mapie z pliku "mapa1.txt" i wysyła te informacje do węzła Model, NodesAndRoutes oraz sposób wyświetlania do RVIZA. Trasa składa się z dróg dwukierunkowych o różnej ilości pasów, z których można skręcać tylko w określonych kierunkach. Jeżeli mapa wykryje subskrybentów na Topic'u "map_info_nodes" jednorazowo wysyła informacje o każdym zakręcie i skrzyżowaniu w kolejności ich występowania na mapie na ten Topic. Nadaje je w postaci mapNodeMessage. Po zakończeniu kończy swoje działanie.

2. NodesAndRoutes

Pobiera informacje o mapie od MapOfCity. Na jej podstawie generuje skrzyżowania i światła, które zmieniają się automatycznie. Wysyła informacje o tym jak należy wyświetlić światła do modelu poprzez light.msg. Do samochodów wysyła na Topic'u "nodes_info".

3. Car

Uruchamianie: rosrun anro1 Car [nazwa samochodu] Obsługuje każdy samochód z osobna. Jeżeli chcemy uruchomić kolejny samochód należy otworzyć nowy terminal i włączyć tam nowy węzeł Car podając id nowego samochodu jako argument. Jeżeli chcemy dodać samochód o id już istniejącego samochodu to stary samochód zostanie wyłączony i nowy zostanie wstawiony. Nasłuchuje Topic'ów "nodes_info" i "car_info". Wyszukuje accespoint(wjazdy na skrzyżowanie), na które się kieruje na podstawie jego położenia. Gdy samochód dojeżdża do krzyżówki wybiera stronę, z której jedzie i przeszukuje te stronę tak długo, aż jego koordynaty się pokryją z którymś punktem wjazdowym, jeśli się aktualnie żaden nie pokrywa to jedzie dalej. Gdy tak się stanie (jest w tym punkcie) to sprawdza światło. Jeśli samochód ma zielone to losuje jedną ze stron, której vector.size jest różny od 0 (jest więc co najmniej jedna możliwość jazdy w tym kierunku z tego pasa), a następnie losuje element z tego vectora- punkt jest punktem, do którego teraz będzie zmierzał. Na tej podstawie wyliczają sobie trajektorię i jadą. Każdy uruchomiony węzeł Car nadaje na Topic "car_info" informacje o swoim położeniu i rozmiarze. Pozwala to uniknąć kolizji pomiędzy poszczególnymi pojazdami.

Po odpaleniu pliku .launch na serwer parametrów (param server) ładowany jest plik car.urdf.xacro, który odpowiada za model URDF samochodu. W pliku .launch również uruchamiamy 5 różnych przestrzeni nazw (po jednej na każdy samochód). W każdej przestrzeni nazw uruchamiany robot_state_publisher, które odpowiadają za publikowanie (dla każdego robota osobno) transformat między poszczególnymi układami linków w urdfie załadowanym na serwer jak i między układem współrzednych danego robota a globalnym ('/my_frame'). Drugim node, który odpalamy w każdej przestrzeni nazw (namespace) jest JointStatePublisher: odpowiada on za publikowanie na topic /sensor_msgs/JointState ruchomych jointów (polączeń) każdego robota.

Same obiekty Car nalezy oddzielnie uruchomić z terminala, a następnie dodać do Rviza RobotModel or odpowiedni dla niego prefix /tf (zarówno pierwsze litery nazw samochodów oraz prefix tf muszą być takie same i dla kolejnych samochodów są kolejnymi literami alfabetu).

4. Model

Odpowiada za przekazywanie informacji do RVIZ o tym ja wyświetlać obiekty dynamiczne (światła). Światła są wyświetlane jako zwykłe "Marker'y" o zmiennym kolorze.