Этот пример вводит платформу TurtleBot® и пути, которыми пользователи MATLAB® могут взаимодействовать с ним. А именно, код в этом примере демонстрирует, как опубликовать сообщения к TurtleBot (такие как скорости) и как подписаться на темы, которые TurtleBot публикует (такие как одометрия).
TurtleBot должен запускаться для этого примера, чтобы работать.
Необходимые условия: Начало работы с Gazebo и симулированным TurtleBot или Начало работы с действительным TurtleBot
TurtleBot должен запускаться. Если вы используете действительный TurtleBot и выполнили шаги настройки оборудования в Начало работы с Действительным TurtleBot, робот запускается. Если вы используете TurtleBot в симуляции и выполнили шаги настройки в Начало работы с Gazebo и Симулированным TurtleBot, запустите один из миров Gazebo® с рабочего стола (Gazebo Office
, например).
В вашем экземпляре MATLAB на хосте - компьютере запустите следующую команду. Замените ipaddress
с IP-адресом TurtleBot. Эта линия инициализирует ROS и соединяется с TurtleBot.
ipaddress = "http://192.168.178.133:11311";
rosinit(ipaddress)
Initializing global node /matlab_global_node_88195 with NodeURI http://192.168.178.1:59934/
Если сеть, которую вы используете, чтобы соединиться с 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","DataFormat","struct") ; 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_88195 (http://192.168.178.1:59934/) Subscribers: * /gazebo (http://192.168.178.133:39227/)
TurtleBot использует /odom
тема, чтобы опубликовать ее текущее положение и ориентацию (коллективно обозначенный как положение). Поскольку TurtleBot не оборудован системой GPS, положение будет относительно положения, которое имел робот, когда это было сначала включено.
Создайте подписчика для сообщений одометрии
odomSub = rossubscriber("/odom","DataFormat","struct");
Ожидайте подписчика, чтобы возвратить данные, затем извлечь данные и присвоить его переменным 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
-2.6176 1.0007 -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.1556
Подпишитесь на тему лидара:
lidarSub = rossubscriber("/scan","DataFormat","struct");
После подписки на тему лидара ожидайте данных и затем отобразите его с rosPlot.
scanMsg = receive(lidarSub); figure rosPlot(scanMsg)
Чтобы постоянно отображать обновляющиеся сканы лидара в то время как повороты робота для короткой продолжительности, используйте следующий цикл с условием продолжения:
velMsg.Angular.Z = velocity; send(robotCmd,velMsg) tic while toc < 20 scanMsg = receive(lidarSub); rosPlot(scanMsg) end
velMsg.Angular.Z = 0; send(robotCmd,velMsg)
Очистите рабочую область издателей, подписчиков и других СВЯЗАННЫХ С ROS объектов, когда вы будете закончены с ними.
clear
Используйте rosshutdown
если вы сделаны, работая с сетью ROS. Закройте глобальный узел и отключитесь от TurtleBot.
rosshutdown
Shutting down global node /matlab_global_node_88195 with NodeURI http://192.168.178.1:59934/
Обратитесь к следующему примеру: Исследуйте Основное Поведение TurtleBot