Привет, дорогие друзья!
Небольшой оффтоп. Теперь можно подписаться на обновления блога с помощью push-уведомлений. Я постарался сделать этот механизм как можно менее надоедающим, типа нет так нет. Также, хочу отметить, что весь этот функционал находится в режиме тестирования, поэтому в случае каких либо проблем я заранее прошу прощения.
Сегодня мы попробуем поднять Robot Operating System на тазике из призмы (конечно, нет).
На самом деле мы будем поднимать ROS на raspberry pi zero w. В моем блоге мы уже устанавливали данный фреймворк на RPi, почитать об этом можно тут:
https://yungvldai.ru/article/praktika-2-ustanovka-ros-na-raspberry-pi-zero-w
Можно даже считать, что статья по ссылке выше это первая часть, а эта статья - вторая. В цикле ROS для raspberry pi.
Весь код, как обычно, можно посмотреть на гитхабе:
Хотя кодом сегодня мы не будем особо заниматься. В этой статье нас интересует вопрос настройки всего-всего.
Итак, мы поставили ros на RPi и с того момента прошло уже ~2 месяца. Однако, давайте подключимся по ssh к RPi, введем roscore и увидим, что все работает:
Терминал зависнет в таком состоянии, это нормально, нужно открыть новый.
Если нет, то попробуйте
source /opt/ros/kinetic/setup.bash
(вместо kinetic можно вставить свой дистрибутив)
Если даже это Вам не помогло, то, возможно, вам придется проделать все пункты из этого туториала.
Если же все хорошо, то идем дальше.
Пока что я предлагаю не парится с настройкой собственных пакетов и сделать следующее:
%lang(bash)% sudo apt-get install autoconf pip install eventlet python-socketio RPi.GPIO cd ~ git clone https://github.com/sarfata/pi-blaster/ && cd pi-blaster ./autogen.sh ./configure make sudo make install git clone https://github.com/pomirs-workers/pomirs_catkin_ws app && cd app cd src/runner/src/lib rm catch_bot && git clone https://github.com/pomirs-workers/catch_bot cd catch_bot/lib rm pi_pwm && git clone https://github.com/pomirs-workers/pi_pwm cd ~/app catkin_make_isolated source ./devel_isolated/setup.bash
Этот набор команд установит зависимости, склонит все репозитории, установит все сабмодули и соберет catkin workspace. После этого мы готовы к дальнейшей работе
Эти команды склонят вам мою репу. Там есть два пакета: connector и runner
Пакет connector требует кое какие дополнительные зависимости (eventlet, python-socketio).
pip install eventlet python-socketio
(Мы уже делали это)
После разрешения зависимостей запустить пакет можно так
rosrun connector __init__.py
Если выпадет ошибка нужно сделать
sudo chmod +x ./src/connector/src/__init__.py
Если все хорошо мы увидим:
Вывод говорит нам, что мы слушаем 8765 порт, по которому нам будут приходить команды.
Теперь нам опять нужно открыть новый терминал.
Пакету runner нужен только RPi.GPIO
pip install RPi.GPIO
(Мы уже делали это)
После этого пакет даже должен запуститься. Кстати, запускается он так:
rosrun runner node.py
Если выпадет ошибка нужно сделать
sudo chmod +x ./src/runner/src/node.py
Тогда пакет должен запуститься и мы увидим:
Таким образом в трех терминалах на RPi у нас запущен ROS мастер и 2 ноды, что же нам с этим делать?
** Команды далее нужно выполнять на вашем компьютере **
Возьмем код из этой статьи
cd ~ git clone https://github.com/yungvldai-practice-2020/web-bot-controller webapp cd webapp npm install && npm run serve
немного его переделаем, чтобы можно было отправлять point событие с таким пейлоадом: <x>;<y>;<z> (обычная строка)
На localhost:8080 у нас открылось приложение
(если порт занят, откроется на 8081, потом на 8082 и т.д.)
Откроем веб приложение из браузера
Нажимаем на стрелочки и вуаля:
Тазик теперь подчиняется нам! УРА
В этой статье мы научили тазик из призмы слушаться нас, в следующей статье мы доделаем крепления для электроники робота, дособерем его и попробуем ехать в конкретную точку, если мои коллеги успеют сделать алгоритм движения.
Спасибо за внимание!