Оглавление:

Роботизированный контроллер ROS на базе Matlab: 9 шагов
Роботизированный контроллер ROS на базе Matlab: 9 шагов

Видео: Роботизированный контроллер ROS на базе Matlab: 9 шагов

Видео: Роботизированный контроллер ROS на базе Matlab: 9 шагов
Видео: Программирование робототехники: знакомство с Генрихом IX | Потенциальные поля | СЛЭМ | Лидар 2024, Июль
Anonim
Image
Image
Роботизированный контроллер ROS на основе Matlab
Роботизированный контроллер ROS на основе Matlab

С детства я всегда мечтал стать Железным Человеком и до сих пор продолжаю. Железный Человек - один из тех персонажей, которые реально возможны, и, проще говоря, я стремлюсь когда-нибудь стать Железным Человеком, даже если люди смеются надо мной или говорят, что это невозможно, потому что «это невозможно, пока кто-то не сделает это», - Арнольд Шварценеггер.

ROS - это новая платформа, которая используется для разработки сложных робототехнических систем. Его приложения включают в себя: автоматизированные сборочные системы, телеоперации, протезы и тяжелое машинное оборудование в промышленном секторе.

Исследователи и инженеры используют ROS для разработки прототипов, в то время как разные поставщики используют ее для создания своих продуктов. У нее сложная архитектура, из-за которой хромому человеку трудно управлять ею. Использование MATLAB для создания связи интерфейса с ROS - это новый подход, который может помочь исследователям, инженерам и поставщикам в разработке более надежных решений.

Итак, это руководство о том, как создать роботизированный контроллер ROS на основе Matlab, это будет один из очень немногих руководств по этому вопросу и среди немногих инструкций по ROS. Цель этого проекта - разработать контроллер, который сможет управлять любым ROS-роботом, подключенным к вашей сети. Итак, приступим!

Авторы редактирования видео: Аммар Ахер, на [email protected]

Запасы

Для проекта требуются следующие компоненты:

(1) ROS ПК / робот

(2) Маршрутизатор

(3) ПК с MATLAB (версия: 2014 или выше)

Шаг 1. Начинаем все настраивать

Получение всего настройки
Получение всего настройки

Для этого я использую Ubuntu 16.04 для своего компьютера с Linux и ros-kinetic, поэтому, чтобы избежать путаницы, я рекомендую использовать ros kinetic и ubuntu 16.04, поскольку он лучше всего поддерживает ros-kinetic. Для получения дополнительной информации о том, как установить ros kinetic, перейдите на https://wiki.ros.org/kinetic/Installation/Ubuntu. Для MATLAB вы либо покупаете лицензию, либо загружаете пробную версию отсюда.

Шаг 2: понимание того, как работает контроллер

Понимание того, как работает контроллер
Понимание того, как работает контроллер

ПК запускает роботизированный контроллер на MATLAB. Контроллер принимает IP-адрес и порт компьютера / робота ros.

Тема ros используется для связи между контроллером и ПК / роботом ros, которая также принимается контроллером в качестве входных данных. Модем необходим для создания LAN (локальной сети), и именно он назначает IP-адреса всем устройствам, подключенным к его сети. Следовательно, компьютер ros / robot и компьютер, на котором запущен контроллер, должны быть подключены к одной и той же сети (т. Е. К сети модема). Итак, теперь, когда вы знаете, «как это работает», давайте перейдем к «как это устроено»…

Шаг 3: Создание интерфейса ROS-MATLAB

Создание интерфейса ROS-MATLAB
Создание интерфейса ROS-MATLAB
Создание интерфейса ROS-MATLAB
Создание интерфейса ROS-MATLAB
Создание интерфейса ROS-MATLAB
Создание интерфейса ROS-MATLAB

ROS-MATLABInterface - это полезный интерфейс для исследователей и студентов для создания прототипов своих алгоритмов роботов в MATLAB и тестирования их на ROS-совместимых роботах. Этот интерфейс может быть создан с помощью набора инструментов системы робототехники в Matlab, и мы можем создать прототип нашего алгоритма и протестировать его на робот с поддержкой ROS или в симуляторах роботов, таких как Gazebo и V-REP.

Чтобы установить набор инструментов системы робототехники на ваш MATLAB, просто перейдите к опции надстройки на панели инструментов и найдите роботизированный набор инструментов в проводнике надстроек. Используя роботизированный набор инструментов, мы можем опубликовать или подписаться на тему, например узел ROS, и сделать его мастером ROS. Интерфейс MATLAB-ROS имеет большинство функций ROS, которые могут потребоваться для ваших проектов.

Шаг 4: Получение IP-адреса

Получение IP-адреса
Получение IP-адреса
Получение IP-адреса
Получение IP-адреса

Для работы контроллера обязательно, чтобы вы знали IP-адрес вашего робота / ПК ROS и ПК, на котором запущен контроллер на MATLAB.

Чтобы получить ip вашего компьютера:

В Windows:

Откройте командную строку, введите команду ipconfig и запишите IPv4-адрес.

Для Linux:

Введите команду ifconfig и запишите inet-адрес. Теперь, когда у вас есть IP-адрес, пришло время создать графический интерфейс…

Шаг 5: Создайте графический интерфейс для контроллера

Создайте графический интерфейс для контроллера
Создайте графический интерфейс для контроллера
Создайте графический интерфейс для контроллера
Создайте графический интерфейс для контроллера
Создайте графический интерфейс для контроллера
Создайте графический интерфейс для контроллера

Чтобы создать графический интерфейс, откройте MATLAB и введите руководство в командном окне. Это откроет приложение-руководство, через которое мы будем создавать наш графический интерфейс. Вы также можете использовать конструктор приложений в MATLAB для разработки своего графического интерфейса.

Всего мы создадим 9 кнопок (как показано на рис.):

6 кнопок: вперед, назад, влево, вправо, подключиться к роботу, отключить

3 редактируемые кнопки: Ros pc ip, порт и название темы.

Редактируемые кнопки - это кнопки, которые будут принимать IP-адрес компьютера ROS, его порт и имя темы в качестве входных данных. Название темы - это то, через что обмениваются данными контроллер MATLAB и робот / компьютер ROS. Чтобы отредактировать строку на редактируемой кнопке, щелкните правой кнопкой мыши по кнопке >> перейдите в Свойства инспектора >> Строка и отредактируйте текст кнопки.

Как только ваш графический интерфейс будет готов, вы можете запрограммировать кнопки. Здесь начинается самое интересное …

Шаг 6: Программирование редактируемых кнопок графического интерфейса пользователя

Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя
Программирование редактируемых кнопок графического интерфейса пользователя

Графический интерфейс пользователя сохраняется как файл.fig, но функции кода / обратного вызова сохраняются в формате.m. Файл.m содержит код для всех ваших кнопок. Чтобы добавить функции обратного вызова к вашим кнопкам, щелкните кнопку правой кнопкой мыши> > Просмотреть обратные вызовы >> обратный вызов. Это откроет файл.m для вашего графического интерфейса, где определена эта конкретная кнопка.

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

функция edit1_Callback (hObject, eventdata, дескрипторы)

глобальный ros_master_ip

ros_master_ip = получить (hObject, 'Строка')

Здесь функция определена как edit1_Callback, что относится к первой редактируемой кнопке. Когда мы вводим IP-адрес из сети ROS в эту редактируемую кнопку, он сохраняет IP-адрес в виде строки в глобальной переменной ros_master_ip.

Затем прямо под _OpeningFcn (hObject, eventdata, handles, varargin) определите следующее (см. Рис):

глобальный ros_master_ip

глобальный ros_master_port

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Вы просто глобально жестко запрограммировали ip ros-pc (ros_master_ip), порт (ros_master_port) и имя темы Teleop. Это означает, что если вы оставите редактируемые кнопки пустыми, эти предопределенные значения будут использоваться при подключении.

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

Под функцией edit2_Callback напишите следующий код:

функция edit2_Callback (hObject, eventdata, дескрипторы)

глобальный ros_master_port

ros_master_port = получить (hObject, 'Строка')

Здесь функция определена как edit2_Callback, что относится ко второй редактируемой кнопке. Когда мы вводим здесь порт ros pc / robot из сети ROS с помощью этой редактируемой кнопки, он сохранит порт в виде строки в глобальной переменной ros_master_port.

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

Под функцией edit3_Callback напишите следующий код:

функция edit3_Callback (hObject, eventdata, дескрипторы)

global teleop_topic_name

teleop_topic_name = get (hObject, 'Строка')

Подобно ros_master_port, он также сохраняется в виде строки в глобальной переменной.

Далее мы рассмотрим функции обратного вызова для кнопок…

Шаг 7: Программирование кнопок графического интерфейса пользователя

Программирование кнопок графического интерфейса пользователя
Программирование кнопок графического интерфейса пользователя
Программирование кнопок графического интерфейса пользователя
Программирование кнопок графического интерфейса пользователя

Кнопки, которые мы создали ранее, мы будем использовать для перемещения, подключения и отключения робота от контроллера. Обратные вызовы кнопки определяются следующим образом:

например. функция pushbutton6_Callback (hObject, eventdata, дескрипторы)

Примечание: в зависимости от порядка, в котором вы создавали свои кнопки, они будут нумероваться соответственно. Поэтому функция pushbutton6 в моем файле.m может быть для Forward, тогда как в вашем.m файле она может быть для Backwards, так что имейте это в виду. Чтобы узнать, какая точная функция для вашей кнопки, просто щелкните правой кнопкой мыши >> Просмотреть обратные вызовы >> обратные вызовы, и она откроет функцию для вашей кнопки, но для этой инструкции я предполагаю, что она такая же, как у меня.

Для кнопки Подключиться к роботу:

Под функцией pushbutton6_Callback (hObject, eventdata, handles):

функция pushbutton6_Callback (hObject, eventdata, handles) global ros_master_ip

глобальный ros_master_port

global teleop_topic_name

глобальный робот

глобальный велмсг

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

канифоль

робот = rospublisher (teleop_topic_name, 'geometry_msgs / Twist');

velmsg = rosmessage (робот);

Этот обратный вызов установит переменную ROS_MASTER_URI путем объединения ros_master_ip и порта. Затем команда rosinit инициализирует соединение. После подключения он создаст издателя geometry_msgs / Twist, который будет использоваться для отправки команды скорости. Название темы - это имя, которое мы даем в поле редактирования. После успешного подключения мы сможем использовать кнопки «Вперед», «Назад», «Влево» и «Вправо».

Прежде чем добавлять обратные вызовы к кнопкам прямого и обратного нажатия, нам необходимо инициализировать скорости линейной и угловой скорости.

Поэтому ниже _OpeningFcn (hObject, eventdata, handles, varargin) определите следующее (см. Рис):

global left_spinVelocity global right_spinVelocity

global forwardVelocity

глобальная обратная скорость

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Примечание: все скорости указаны в рад / с.

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

Для кнопки Вперед:

функция pushbutton4_Callback (hObject, eventdata, handles) глобальный velmsg

глобальный робот

global teleop_topic_name

global forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

отправить (робот, велмсг);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', истина);

Аналогично для кнопки «Назад»:

функция pushbutton5_Callback (hObject, eventdata, дескрипторы)

глобальный велмсг

глобальный робот

глобальная обратная скорость

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

отправить (робот, велмсг);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', истина);

Аналогично для левой кнопки: функция pushbutton3_Callback (hObject, eventdata, дескрипторы)

глобальный робот global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

отправить (робот, велмсг);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', истина);

Аналогично для правой кнопки:

глобальный велмсглобальный робот

global right_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

отправить (робот, велмсг);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', истина);

После добавления всех функций обратного вызова и сохранения файлов мы можем протестировать наш контроллер.

Шаг 8: Настройка конфигурации сети на ПК с ROS (Linux)

Настройка конфигурации сети на ПК с ROS (Linux)
Настройка конфигурации сети на ПК с ROS (Linux)
Настройка конфигурации сети на ПК с ROS (Linux)
Настройка конфигурации сети на ПК с ROS (Linux)

Мы будем тестировать контроллер на ПК ros (Linux), что потребует настройки конфигурации сети. Если вы также используете контроллер на ПК с Linux, вам также придется настроить конфигурацию сети там.

Конфигурация сети:

Откройте окно терминала и введите gedit.bashrc.

После открытия файла добавьте следующее:

#Robot Machine Configuration

экспорт ROS_MASTER_URI = https:// localhost: 11311

#IP-адрес главного узла ROS

экспорт ROS_HOSTNAME =

экспорт ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

эхо "ROS_MASTER_URI:" $ ROS_MASTER_URI

Вы должны выполнять этот шаг каждый раз из-за динамического назначения IP.

Шаг 9: Запустите контроллер

Запустите контроллер
Запустите контроллер

Мы собираемся протестировать наш контроллер на боте Turtle в Gazebo.

Чтобы установить Gazebo, перейдите по ссылке

Чтобы установить бота Turtle, перейдите по ссылке

Откройте папку, в которой вы сохранили файлы.fig и.m на MATLAB, и нажмите Run (как показано на рисунке). Это откроет контроллер на ПК. Перед тем, как нажать кнопку подключения, убедитесь, что ваш симулятор черепахи-бота работает.

Чтобы проверить симуляцию TurtleBot:

Откройте Терминал на ПК Ros и введите: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Это откроет имитацию Turtlebot на этом ПК. Название темы TurtleBot - / cmd_vel_mux / input / teleop, которое мы уже предоставили в приложении. Введите IP-адрес ros pc, порт и название темы в редактируемых кнопках и нажмите кнопку. Подключиться к роботу. Ваш бот-черепаха должен начать двигаться, когда вы нажимаете "Вперед", "Назад" и т. Д.

Чтобы просмотреть линейную и угловую скорости:

Откройте новый терминал и введите команду: $ rostopic echo / cmd_vel_mux / input / teleop

И вот, у вас есть собственный роботизированный контроллер ROS на базе Matlab. Если вам понравился мой наставник, пожалуйста, проголосуйте за него на Конкурсе авторов, впервые получивший его, и поделитесь им с как можно большим количеством людей. Спасибо.

Рекомендуемые: