Свяжитесь с TurtleBot

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

TurtleBot должен запускаться для этого примера, чтобы работать.

Необходимые условия: Начало работы с Gazebo и симулированным TurtleBot или Начало работы с действительным 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");

Ожидайте подписчика, чтобы возвратить данные, затем извлечь данные и присвоить его переменным xY, и 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