exponenta event banner

Связь с TurtleBot

В этом примере описывается платформа TurtleBot ® и способы взаимодействия с ней пользователей MATLAB ®. В частности, код в этом примере демонстрирует, как публиковать сообщения в TurtleBot (например, скорости) и как подписываться на темы, которые публикует TurtleBot (например, одометрия).

Для работы этого примера должен быть запущен TurtleBot.

Предпосылки: Начало работы с беседкой и смоделированным TurtleBot или Начало работы с реальным TurtleBot

Подключение к TurtleBot

Должен быть запущен TurtleBot. Если вы используете настоящий TurtleBot и следовали шагам настройки оборудования в разделе Начало работы с реальным TurtleBot, робот работает. Если вы используете TurtleBot в моделировании и выполняете шаги настройки в разделе Начало работы с Gazebo и Simulated TurtleBot, запустите один из миров Gazebo ® с рабочего стола (Gazebo Office, например).

В экземпляре MATLAB на хост-компьютере выполните следующую команду. Заменить ipaddress с IP-адресом TurtleBot. Эта линия инициализирует ROS и подключается к TurtleBot.

ipaddress = "http://192.168.178.132:11311";
rosinit(ipaddress)
Initializing global node /matlab_global_node_00696 with NodeURI http://192.168.178.1:64340/

Если сеть, используемая для подключения к TurtleBot, не является сетевым адаптером по умолчанию, можно вручную указать IP-адрес адаптера, используемого для подключения к роботу. Это может произойти, если вы используете беспроводную сеть, но также имеете активное соединение Ethernet. Заменить IP_OF_TURTLEBOT с IP-адресом TurtleBot и IP_OF_HOST_COMPUTER с IP-адресом хост-адаптера, который используется для подключения к роботу:

rosinit("IP_OF_TURTLEBOT","NodeHost","IP_OF_HOST_COMPUTER");

Просмотрите все доступные разделы ROS, используя:

rostopic list

Если вы не видите никаких разделов, сеть не была настроена должным образом. Шаги настройки сети см. в начале этого документа.

Переместить робота

Можно управлять перемещением TurtleBot, публикуя сообщение в /cmd_vel тема. Сообщение должно иметь тип geometry_msgs/Twist, которая содержит данные, определяющие желаемые линейные и угловые скорости. Движениями TurtleBot можно управлять с помощью двух различных значений: линейная скорость вдоль оси X управляет движением вперед и назад, а угловая скорость вокруг оси Z управляет скоростью вращения базы робота.

Установка переменной velocity для использования для краткого движения TurtleBot.

velocity = 0.1;     % meters per second

Создание издателя для /cmd_vel и соответствующее сообщение, содержащее значения скорости.

robotCmd = rospublisher("/cmd_vel") ;
velMsg = rosmessage(robotCmd);

Задайте скорость вперед (вдоль оси X) робота на основе velocity и опубликуйте команду на роботе. Дайте ему ненадолго сдвинуться с места, а затем остановите его.

velMsg.Linear.X = velocity;
send(robotCmd,velMsg)
pause(4)
velMsg.Linear.X = 0;
send(robotCmd,velMsg)

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

rostopic type /cmd_vel
geometry_msgs/Twist

В разделе ожидаются сообщения типа geometry_msgs/Twist, который является именно типом velMsg создан выше.

Чтобы просмотреть, какие узлы публикуют и подписываются на данный раздел, используйте команду: rostopic info TOPICNAME. Следующая команда содержит список издателей и подписчиков для раздела скорости. MATLAB указан как один из издателей.

  rostopic info /cmd_vel
Type: geometry_msgs/Twist
 
Publishers:
* /matlab_global_node_00696 (http://192.168.178.1:64340/)
 
Subscribers:
* /gazebo (http://192.168.178.132:41095/)

Положение и ориентация робота-получателя

TurtleBot использует /odom тема для публикации ее текущей позиции и ориентации (совместно обозначается как pose). Поскольку TurtleBot не оборудован системой GPS, поза будет относительно позы, которая была у робота при его первом включении.

Создание абонента для сообщений одометрии

odomSub = rossubscriber("/odom");

Дождитесь возврата данных абонентом, а затем извлеките данные и присвойте их переменным. x, y, и z:

odomMsg = receive(odomSub,3);
pose = odomMsg.Pose.Pose;
x = pose.Position.X;
y = pose.Position.Y;
z = pose.Position.Z;

Примечание: Если вы видите ошибку, то вероятно, что receive истекло время ожидания команды. Убедитесь, что одометрия опубликована и сеть настроена правильно.

Отображение значений x, y и z

[x y z]
ans = 1×3

    0.3883    0.0003   -0.0010

Ориентация TurtleBot хранится как кватернион в Orientation имущество pose. Использовать quat2eul (Robotics System Toolbox) для преобразования в более удобное представление углов Эйлера. Для отображения текущей ориентации theta, робота в градусах, выполните следующие строки.

quat = pose.Orientation;
angles = quat2eul([quat.W quat.X quat.Y quat.Z]);
theta = rad2deg(angles(1))
theta = -0.0274

Получение данных Lidar

Подпишитесь на тему лидара:

lidarSub = rossubscriber("/scan");

Подписавшись на тему лидара, дождитесь получения данных, а затем выведите их на экран с помощью графика.

scanMsg = receive(lidarSub);
figure
plot(scanMsg)

Для непрерывного отображения обновленных сканирований lidar во время вращения робота на короткое время используйте следующую команду while loop:

velMsg.Angular.Z = velocity;
send(robotCmd,velMsg)
tic
while toc < 20
  scanMsg = receive(lidarSub);
  plot(scanMsg)
end

velMsg.Angular.Z = 0;
send(robotCmd,velMsg)

Отсоединение от робота

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

clear

Использовать rosshutdown после завершения работы с сетью ROS. Завершите работу глобального узла и отключитесь от TurtleBot.

rosshutdown
Shutting down global node /matlab_global_node_00696 with NodeURI http://192.168.178.1:64340/

Следующие шаги

См. следующий пример: Изучение основного поведения TurtleBot