Робот-тележка на ROS. Часть 8. Управляем с телефона-ROS Control, GPS-нода

  • Tutorial
Продолжение цикла статей.

Посты серии:
8. Управляем с телефона-ROS Control, GPS-нода
7. Локализация робота: gmapping, AMCL, реперные точки на карте помещения
6. Одометрия с энкодеров колес, карта помещения, лидар
5. Работаем в rviz и gazebo: xacro, новые сенсоры.
4. Создаем симуляцию робота, используя редакторы rviz и gazebo.
3. Ускоряемся, меняем камеру, исправляем походку
2. Софт
1. Железо

При построении карт на роботе в рамках ограниченного пространства проблем не возникает. Управляя роботом с клавиатуры со станции-управления или на самом роботе, можно визуально наблюдать его перемещения и вовремя избегать нежелательные препятствия. Ситуация осложняется, если помещений несколько. И здесь есть несколько вариантов как наблюдать за роботом, строящим карту, если он покинул помещение оператора:
— подключить к непосредственно к роботу камеру;
— воспользоваться существующей системой видеонаблюдения вне робота;
— управлять с wi-fi, bluetooth клавиатуры, находясь рядом с роботом
— «поносить робота на руках», чтобы лидар собрал данные;
— поуправлять роботом с телефона.

Последний вариант может показаться удобным. Управлять роботом с телефона, просто наклоняя его (телефон) в нужную сторону, пока робото строит карту. Такая миссия возможна.
Рассмотрим как порулить роботом с телефона, отправляя соответствующие сообщения в топики ROS на роботе.

Писать отдельное приложение на телефоне для заявленных целей нет необходимости. Чтобы воспользоваться уже существующими наработками достаточно скачать на телефон и установить android приложение с маркета — «ROS Control».

Настроим приложение ROS Control на телефоне.


Приложение интуитивно понятно — знаком "+" добавляется робот, задается его ip:
картинка


Далее выбираем «Show advanced options» и прописываем топики для робота-тележки:
картинка


картинка


В эти топики будут улетать сообщения с телефона, а также приниматься в формате, который понимает ROS.
В приложении нам доступны топики:
— joystick topic — управление с телефона;
— laser scan topic — данные с лидара;
— nav sat topic — данные gps робота;
— odom — одометрия (все, что туда попадает с энкодеров и/или imu и/или лидара);
— pose — «позиция», расположение робота.

Освоим joystick topic.


Сам по себе робот не поедет, поэтому запустим на роботе топик с драйвером движения, который неоднократно уже фигурировал в предыдущих постах:
1-й терминал:
rosrun rosbots_driver part2_cmr.py

На телефоне в приложении ROS Control нажмем на строку с названием робота и провалимся в меню управления роботом:
картинка


Теперь, если потянуть пальцем джойстик (в любом направлении) тележка поедет.Здесь все просто.
Если посмотреть, что происходит с топиком драйвера двигателя, запущенном на raspberry, то увидим, что телефон публикует, а драйвер принимает сообщения в соответствующем формате:


По такому же принципу работают все остальные топики.

*Если все же, что-то пошло не так, то необходимо, находясь в режиме управления роботом, нажать на три параллельные полоски слева вверху экрана приложения. Провалиться в «Preferences» и далее выбрать «Topics»:

картинка


картинка


Далее, нажимая на соответствующий топик, прописать пути (Value):
картинка



Посмотрим, что представляет из себя лидар в приложении.


На роботе запустим ноду-лидар:
roslaunch rplidar_ros rplidar.launch
Если перезайти в приложение, то на экране управления роботом увидим характерные точки и синюю стрелку:
картинка



*Можно также поездить просто наклоняя телефон в разные стороны и выбрав режим управления (Control Mode) Tilt:
картинка


Существуют и другие режимы «езды», даже с возможностью указать точку на карте, прямо на телефоне, но так как карта весьма условна, так же условна будет и поездка, то есть в никуда.

C топиками движения, как и камеры (ее рассматривать не будем) все более-менее понятно, разберемся с gps.


В помещении от gps толку мало, но посмотреть как он работает, интересно.
Для тестов подойдет любой gps-свисток. Мой вариант следующий —
картинка


Чтобы все заработало, надо для начала установить ноду gps на raspberry.
Но для начала проверим, работает ли gps-свисток, иначе все остальные разговоры будут в пользу бедных.
Поставим пакеты на raspberry:
sudo apt-get install gpsd
sudo apt-get install gpsd-clients

Проверим, что gps-свисток определился среди устройств usb:
lsusb


Теперь, проверим, что gps что-то принимает:
gpscat -s 9600 /dev/ttyACM1
*Вместо ttyACM1 могут быть иные значения (ttyACM0, ttyUSB0, ttyAMA0) в зависимости, на какой порту gps-свисток.
В терминал посыпятся сообщения gps:
картинка


Более структурированные (приятные глазу) данные можно получить так:
gpsmon /dev/ttyACM1
картинка


*координаты не мои, что странно. Пока не ясно, с чем это связано.

Установим ноду gps на raspberry:
sudo apt-get install libgps-dev
cd catkin_ws/src
git clone https://github.com/ros-drivers/nmea_navsat_driver
git clone https://github.com/ros/roslint
cd /home/pi/rosbots_catkin_ws
catkin_make


Теперь, когда собрали gps-ноду, запустим ее (на роботе):
rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyACM1 _baud:=9600

Если взглянуть на топики (в другом терминале робота), то можно увидеть, что телефон подписан на один топик, а публикация gps-ноды идет в другой:
картинка


Поменяем принимающий топик на телефоне на топик /fix через настройки как было указано выше.
После изменения публикация и прием в одном топике:
картинка


А на телефоне можно наблюдать координаты:
картинка



Одометрия (топик /odom).


Если запустить ноду одометрии из предыдущих постов то, при движении робота, можно получить на телефоне также линейную и угловую скорости робота (скорости рассчитываются не с помощью gps).
На роботе:
cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver
python diff_tf.py

На телефоне:
картинка

Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое