Свяжитесь с TurtleBot

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

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

Предпосылки: Запуск с Gazebo и моделируемым TurtleBot или Запуск с действительным TurtleBot

Пакет аппаратной поддержки для TurtleBot

Этот пример дает обзор работы с TurtleBot с помощью его нативного интерфейса ROS. Пакет Поддержки Robotics System Toolbox™ для Роботов TurtleBot®-Based обеспечивает более оптимизированный интерфейс к TurtleBot. Это позволяет вам:

  • Получите данные о датчике и отправьте команды управления, явным образом не вызывая команды ROS

  • Свяжитесь прозрачно с моделируемым роботом в Gazebo или с физическим TurtleBot

Чтобы установить пакет поддержки, откройтесь, Дополнения> Получают Пакеты Аппаратной поддержки на вкладке MATLAB Home и выбирают "TurtleBot-Based Robots". Также используйте roboticsAddons команду.

Соединитесь с TurtleBot

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

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

ipaddress = '192.168.203.129';
rosinit(ipaddress)
Initializing global node /matlab_global_node_43053 with NodeURI http://192.168.203.1:55724/

Если сеть, которую вы используете, чтобы соединиться с 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 путем публикации сообщения к теме /mobile_base/commands/velocity. Сообщение должно иметь тип geometry_msgs/Twist и содержит данные, задающие, желал линейных и угловых скоростей. Перемещениями TurtleBot можно управлять через два различных значения: линейная скорость вдоль средств управления Осью X прямое и обратное движение и угловая скорость вокруг оси Z контролирует скорость вращения основы робота.

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

velocity = 0.1;     % meters per second

Создайте издателя для темы /mobile_base/commands/velocity и соответствующего сообщения, содержащего скоростные значения.

robot = rospublisher('/mobile_base/commands/velocity') ;
velmsg = rosmessage(robot);

Установите прямую скорость (вдоль Оси X) робота на основе переменной velocity и опубликуйте команду к роботу. TurtleBot продвинется маленькое расстояние и затем остановится.

velmsg.Linear.X = velocity;
send(robot,velmsg);

Из соображений безопасности будет только продолжать движение TurtleBot, если он постоянно получит скоростные данные по теме /mobile_base/commands/velocity.

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

rostopic type /mobile_base/commands/velocity
geometry_msgs/Twist

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

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

  rostopic info /mobile_base/commands/velocity
Type: geometry_msgs/Twist
 
Publishers:
* /matlab_global_node_43053 (http://192.168.203.1:55724/)
* /mobile_base_nodelet_manager (http://192.168.203.129:45425/)
 
Subscribers:
* /gazebo (http://192.168.203.129:40018/)

OPTIONAL: Если вы используете действительный TurtleBot, можно отправить звуковые команды в него.

  soundpub = rospublisher('/mobile_base/commands/sound', 'kobuki_msgs/Sound')
  soundmsg = rosmessage('kobuki_msgs/Sound');
  soundmsg.Value = 6;      % Any number 0-6
  send(soundpub,soundmsg);

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

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

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

odom = rossubscriber('/odom');

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

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

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

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

[x,y,z]
ans = 1×3

    1.8626   -0.0309         0

Ориентация TurtleBot хранится как кватернион в переменной pose.Orientation. Используйте quat2eul, чтобы преобразовать в более удобное представление Углов Эйлера. Чтобы отобразить текущую ориентацию, theta, робота в градусах, выполняют следующие строки.

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

Получите данные изображения

Убедитесь, что ваша камера Kinect® запускается. Если вы перечисляете темы снова с rostopic list, вы видите, что перечислены много тем, начинающихся /camera. С действительным оборудованием TurtleBot можно найти следующую тему:

/camera/rgb/image_color/compressed

Подпишитесь на сжатую тему изображений.

if ismember('/camera/rgb/image_color/compressed', rostopic('list'))
    imsub = rossubscriber('/camera/rgb/image_color/compressed');
end

Если вы используете Gazebo, список тем отличается. Используйте следующую тему вместо этого:

/camera/rgb/image_raw

Подпишитесь на тему сырых данных изображений.

if ismember('/camera/rgb/image_raw', rostopic('list'))
    imsub = rossubscriber('/camera/rgb/image_raw');
end

После подписки на тему изображений ожидайте данных и затем отобразите его с imshow.

img = receive(imsub);
figure
imshow(readImage(img));

Пример изображения реального мира от камеры Kinect выглядит так:

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

tic;
while toc < 20
  img = receive(imsub);
  imshow(readImage(img))
end

Отключитесь от робота

Очистите рабочую область издателей, подписчиков и других СВЯЗАННЫХ С ROS объектов, когда вы будете закончены с ними:

clear

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

rosshutdown
Shutting down global node /matlab_global_node_43053 with NodeURI http://192.168.203.1:55724/

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

Обратитесь к следующему примеру: Исследуйте Основное Поведение TurtleBot