-
Notifications
You must be signed in to change notification settings - Fork 1
Dokumentacja
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
Model "autonomicznych" samochodzików jeżdżących po trasie. Trasa zawiera skrzyżowania, na których ruch jest organizowany poprzez światła drogowe.
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.
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.
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.
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".
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).
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.