В этом примере описывается платформа TurtleBot ® и способы взаимодействия с ней пользователей MATLAB ®. В частности, код в этом примере демонстрирует, как публиковать сообщения в 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
Подпишитесь на тему лидара:
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