Skip to content

ulstu/robocross

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

robocross2021

Папка sdgazelle - ROS package для управления автомобилем.

Для запуска необходимо или скопировать папку sdgazelle в ~/catkin_ws/src или создать символическую ссылку командой

sudo ln -s /media/nvidia/data/repositories/robocross/sdgazelle ~/catkin_ws/src/sdgazelle

нужно прописать правильно пути, первая папка - что, вторая - куда.

Перед каждым запуском

cd ~/catkin_ws
source devel/setup.bash
source venv/bin/activate

Обобщенная архитектура системы

ROS nodes:

webdisplaynode.py

Отображение текущего состояния робота в web-среде cherrypy (http://localhost:8800/static):

  • Глобальная карта openstreetmap и положение на этой карте (готово +-): subscribe ROS topic "gpspos"
  • Путь (начальная, конечная и промежуточные точки) (готово +-): список GPS координат из файла gpspath.csv
  • Текущая скорость (готово): subscribe ROS topic "gpspos", "carstate"
  • Текущие обороты двигателя: subscribe ROS topic "carstate"
  • Текущая передача (1, 0, -1): subscribe ROS topic "carstate"
  • Текущее значение педали газа (1, 0, -1): subscribe ROS topic "carstate"
  • Текущее положение руля (вектор направления на карте): subscribe ROS topic "carstate"
  • Локальная карта (линии дорожной разметки, распознанный знак, сигнал светофора, границы отбойников, препятствия-бочки): subscribe ROS topic "roadlane", "roadsign", "lightswitch", "obstaclepos", "roadfrontier"

gpsnode.py

Определение положения автомобиля по GPS. Фильтрация данных publisher ROS topic "gpspos": текущая позиция автмобиля, после калмановской фильтрации, а также скорость в формате "lat: {}; lon: {}; klat: {}; klon: {}; velocity: {}". lat, lon - значения координат без фильтрации, klat, klon - значения координат после фильтрации. Перед запуском нужно разрешить доступ скрипту к серийному порту, например, так "sudo chmod 666 /dev/ttyS11".

car.py

Публикация состояния автомобиля, прием сигналов об управлении и передача этих сигналов в управляющие контроллеры

  • публикация состояния автомобиля: publish ROS topic "carstate" в формате: "rpm:{0-6000};transmission:{-1,0,1};throttle:{0-255?};velocity:{0-160};wheel:{-100?-100?}". Знаками вопроса помечены значения, которые требуют уточнения
  • прием сигналов для управления автомобилем: subscribe ROS topic "carcontrol": "velocity:{0:15};transmission:{-1,0,1};wheel:{-100? - 100?}" контроль и проверка значений, исходя из физических возможностей автомобиля и передача сигналов в контроллеры. Необходимо прописать логику контроля значений.
  • хранение текущих и предыдущих значений параметров автомобиля: rpm:{0-6000}; transmission:{-1,0,1}; throttle:{0-255?}; velocity:{0-160}; wheel:{-100?-100?}
  • Контроль безопасности на основе датчиков:
  • Обработка сигналов кнопки стопа
  • Начальная инициализация автомобиля в режиме автономного управления и ручного управления

visualrecognizer.py

Распознавание объектов дороги нейронными сетями

  • публикация сообщений о распознавании дорожных знаков: publisher ROS topic "roadsign" со значениями: "time:{время};position:{lon,lat};type:{stop, forward, left, right, forwardleft, forwardright и др}". Для получения GPS координат нужно слушать топик "gpspos" для получения отфильтрованных значений klat, klon.
  • публикация сообщений о распознавании линий дорожной разметки: publisher ROS topic "roadlane" со значениями: "time:{время};position:{lon,lat};angle:{-180 - 180}". Angle - угол отклонения продольной горизонтальной оси автомобиля от направления, заданного двумя точками: центр автомобиля и точка на горизонте, где встречаются линии дорожной разметки.
  • публикация сообщений о распознавании сигналов светофора: publisher ROS topic "lightswitch" со значениями: "time:{время};position:{lon,lat};value:{red, green, yellow}"
  • публикация необходимых сообщений для управления автомобилем (Канин, Волков): publisher ROS topic "carcontrol". Нужно решить задачу в динамике: расчет изменения поворота руля для движения вдоль линий дорожной разметки.

stereorecognizer.py

Распознавание препятствий, отбойников, ограничивающих движение

  • публикация 2D локальной карты: publisher ROS topic "localmap":
  • включается после публикации в topic "carcmd" значения параметра cmd "start"
  • двумерный массив значений, в котором разными типами значений помечены: позиция автомобиля (координаты, ориентация в пространстве), позиция границ дороги, заданная отбойниками, препятствия (бочки)
  • целевая точка на границе карты. Определяется как пересечение с границей локальной карты линии, заданной двумя точками: автомобиль и целевая точка на глобальной карте, до которой нужно доехать. Для этого нужно определить соответствие положения локальной карты и GPS координатам (позиция и ориентация).
  • размер карты соответствует области видимости стереокамеры.
  • публикация необходимых сообщений для управления автомобилем (Акимов, Волков): publisher ROS topic "carcontrol". Нужно решить задачу в динамике: расчет изменения поворота руля для объезда препятствия в текущей локальной карте с учетом того, что на локальной карте отображаются зашумленные данные.

carstatecontrol.py

Управление перемещением автомобиля по глобальной карте.

  • Хранение координат ключевых точек: старт, разворот, финиш.
  • Мониторинг положения автомобиля, определение действия и публикация в ROS topic "carcmd" соответствующих действиям сообщений для старта, разворота, остановки автомобиля в формате "time:{time};lat:{latitude}; lon:{longitude};cmd:{init,start,stop,turn,finish}".

Вспомогательные скрипты и классы

  • gpsreader.py (Святов) - класс, позволяющий считывать значения из GPS сенсора
  • rpmreader.py (Святов, Волков) - простой скрипт, который позволяет считывать показания оборотов двигателя по OBD протоколу
  • sdgazelle.launch - файл для запуска ROS nodes. Каждому разработчику лучше создать свой файл, а не править чужие. При переносе решения нужно подправить пути.

Полезные ссылки

Полезная информация

  • Перед запуском нужно разрешить доступ на все устройства, которые подключаются по USB: "sudo chmod 777 /dev/ttyACM0" (GPS) и "sudo chmod 777 /dev/ttyUSB0" (OBD)
  • При запуске C++ компонент может появиться ошибка "Couldn't find an AF_INET address for []". Для ее устранения нужно в ~/.bashrc прописать в конце machine_ip=(hostname -I) export ROS_IP=${machine_ip[0]} =======

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •