Свяжитесь с TurtleBot

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

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

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

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

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

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

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

Чтобы установить пакет поддержки, откройтесь, Дополнения> Получают Пакеты Аппаратной поддержки на вкладке MATLAB Home и выбирают основанных на ROS Toolbox™ Support Package for TurtleBot Роботов. В качестве альтернативы используйте rosAddons команда.

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

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

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

ipaddress = "http://192.168.233.133:11311"
ipaddress = 
"http://192.168.233.133:11311"
rosinit(ipaddress)
Initializing global node /matlab_global_node_83565 with NodeURI http://192.168.233.1:53035/

Если сеть, которую вы используете, чтобы соединиться с 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_83565 (http://192.168.233.1:53035/)
* /mobile_base_nodelet_manager (http://192.168.233.133:38305/)
 
Subscribers:
* /gazebo (http://192.168.233.133:42482/)

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');

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

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

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

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

Убедитесь, что ваша камера 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 на 20 второго времени, используйте следующий цикл с условием продолжения:

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

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

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

clear

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

rosshutdown
Shutting down global node /matlab_global_node_83565 with NodeURI http://192.168.233.1:53035/

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

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