Управление самобалансирующим роботом EduMip с помощью джойстика PS4 dualshock 4 через ROS


    Это простой пример про то, как с помощью ROS можно связать несколько устройств по сети и пересылать данные управления.

    Под катом в конце — видеодемонстрация управления роботом с джойстика.

    Нам понадобится сам джойстик, можно взять от своей ps4 или купить в магазине. Я купил dualshock 4 v2, первой версии тоже должен работать.

    Также нужен блютус на вашем компьютере с ROS, в документации к драйверам рекомендуют usb blutooth адаптеры версии 2.1+. У меня прекрасно заработал со встроенным в ноутбук адаптером. Также можно подключить джойстик и просто usb кабелем.

    Затем в Ubuntu c ROS нужно установить драйвер по инструкции.

    После установки драйверов и соединения джойстика по блютус, запускаем графическую утилиту jstest-gtk и видим что у нас два джойстика, нам нужен второй, так как на нем есть все кнопки и стики.



    Так как по умолчанию ROS работает с joy0, то нам это надо переопределить на joy1:

    sudo chmod a+rw /dev/input/js1
    rosparam set joy_node/dev "/dev/input/js1"

    Теперь нам нужно соединить это все в единую сеть. Ноутбук с ROS будет master, а EduMip с BeagleBone Blue ROS соединяться по wifi к ноутбуку. Оба устройства находятся в локальной сети wifi роутера.

    На вашем ПК установите переменные среды ROS для поиска мастера ros (roscore) на ПК с команд .bashrc (добавьте эти команды в конец вашего файла .bashrc ):

    “export ROS_MASTER_URI=http://192.168.10.101:11311” <- это сообщает ROS IP-адрес машины, на которой выполняется мастер ros (roscore).
    “export ROS_IP=192.168.10.101” <- это сообщает ROS IP-адрес этой машины (вашего ПК).

    На вашем EduMIP установите переменные среды ROS чтобы он нашел мастер ros (roscore) на ПК с команд .bashrc (добавьте эти команды в конец вашего файла .bashrc ):

    “export ROS_MASTER_URI=http://192.168.10.101:11311” <- это сообщает ROS IP-адрес машины, на которой выполняется мастер ros (roscore).
    “export ROS_IP=192.168.10.102” <- это говорит ROS IP-адрес этой машины (Ваш EduMIP).

    Осталось только написать программу которая будет читать положение стика с джойстика и отправлять в топик, а робот этот топик читать.

    // Callback function for joystick pessaged
    void joyCallback(const sensor_msgs::Joy::ConstPtr& joy)
    {
      // X vel driven by left joystick for and aft
      command_velocity_twist.linear.x = joy->axes[1];
      // heading driven by left joysticj left and right
      command_velocity_twist.angular.z = joy->axes[0];
    }
    
    // this function gets called at 10Hz to publish the command_velocity array of 2 floats
    void timerCallback(const ros::TimerEvent& event)
    {
      cmd_vel_publisher.publish(command_velocity_twist);
    }
    

    На вашем ПК вы можете визуально посмотреть nodes и topics, запустив «rqt_graph»:



    Демонстрация управления роботом с помощью джойстика:


    Резюме: С помощью ROS можно построить систему для работа распределенную на несколько устройств и например большие вычисления производить на основном компьютере, на самом же роботе оставить только то что нужно для быстрого реагирования. На BeagleBone Blue стоит программируемая подсистеме реального времени (PRU‐ICSS).

    PRU-ICSS состоит из микропроцессора на двух 32-битных ядрах, имеющих RISC-архитектуру и работающих на частоте 200МГц. Каждое ядро имеет свою область памяти, а также совместную с Linux область памяти, может использовать выводы общего назначения, расположенные на разъемах P8-P9, и формировать прерывания.

    Кроме этого установленный на BeagleBone Blue датчик MPU9250 при изменении положения может формировать прерывание на которой можно повесить свою функцию, так собственно и сделано в EduMip.

    Если говорить про следующий шаг эволюции то это ROS2, где одним из отличий является DDS (Data Distribution Service) позволяющий построить сеть разных взаимодействующих роботов и устройств на которых ROS не запущен.
    • +16
    • 2,1k
    • 2
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 2
    • +1
      Уже пробовали запустить что-то сложнее джойстика? Алгоритм движения какой хитрый или датчик один-другой какой навесить и его обыграть?
      • 0
        пока только алгоритм баланса в общих чертах разобрал, покрутил параметры. пытался разобраться с компасом, но не понимаю какие он данные выдает. датчики присмотрел, лазерный дальномер буду брать, пока придет пока соберу думаю не раньше чем через пару месяцев статью напишу. но пока и без этого хватает что изучить и поэксперементировать, в ros еще много возможностей не раскрытых.

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

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