getTransform

Получите преобразование между двумя координатными системами координат

Описание

tf = getTransform(tftree,targetframe,sourceframe) возвращает последнее известное преобразование между двумя координатными системами координат в tftree. Создайте tftree объект с помощью rostf, который требует связи с сетью ROS.

Преобразования структурированы как 3-D перевод (трехэлементный вектор) и 3-D вращение (кватернион).

tf = getTransform(tftree,targetframe,sourceframe,sourcetime) возвращает преобразование в tftree в данное исходное время. Если преобразование не доступно в то время, ошибка отображена.

пример

tf = getTransform(___,"Timeout",timeout) также задает период тайм-аута, в секундах, чтобы ожидать преобразования, чтобы быть доступным. Если преобразование не становится доступным в период тайм-аута, функция возвращает ошибку. Эта опция может быть объединена с предыдущими синтаксисами.

пример

tf = getTransform(bagSel,targetframe,sourceframe) возвращает последнее преобразование между двумя системами в rosbag в bagSel. Получить bagSel введите, загрузите rosbag использование rosbag.

tf = getTransform(bagSel,targetframe,sourceframe,sourcetime) возвращает преобразование в заданном sourcetime в rosbag в bagSel.

Примеры

свернуть все

В этом примере показано, как настроить дерево преобразования ROS и преобразовать системы координат на основе информации о дереве преобразования. Это использует преобразования с буфером времени, чтобы получить доступ к преобразованиям в разное время.

Создайте дерево преобразования ROS. Используйте rosinit соединяться с сетью ROS. Замените ipaddress с вашим адресом сети ROS.

ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/
tftree = rostf;
pause(1)

Посмотрите на доступные системы координат на дереве преобразования.

tftree.AvailableFrames
ans = 36×1 cell
    {'base_footprint'            }
    {'base_link'                 }
    {'camera_depth_frame'        }
    {'camera_depth_optical_frame'}
    {'camera_link'               }
    {'camera_rgb_frame'          }
    {'camera_rgb_optical_frame'  }
    {'caster_back_link'          }
    {'caster_front_link'         }
    {'cliff_sensor_front_link'   }
    {'cliff_sensor_left_link'    }
    {'cliff_sensor_right_link'   }
    {'gyro_link'                 }
    {'mount_asus_xtion_pro_link' }
    {'odom'                      }
    {'plate_bottom_link'         }
    {'plate_middle_link'         }
    {'plate_top_link'            }
    {'pole_bottom_0_link'        }
    {'pole_bottom_1_link'        }
    {'pole_bottom_2_link'        }
    {'pole_bottom_3_link'        }
    {'pole_bottom_4_link'        }
    {'pole_bottom_5_link'        }
    {'pole_kinect_0_link'        }
    {'pole_kinect_1_link'        }
    {'pole_middle_0_link'        }
    {'pole_middle_1_link'        }
    {'pole_middle_2_link'        }
    {'pole_middle_3_link'        }
      ⋮

Проверяйте, доступно ли желаемое преобразование теперь. В данном примере проверяйте на преобразование от 'camera_link' к 'base_link'.

canTransform(tftree,'base_link','camera_link')
ans = logical
   1

Получите преобразование в течение 3 секунд с этого времени. getTransform функция будет ожидать, пока преобразование не становится доступным с заданным тайм-аутом.

desiredTime = rostime('now') + 3;
tform = getTransform(tftree,'base_link','camera_link',...
                     desiredTime,'Timeout',5);

Создайте сообщение ROS, чтобы преобразовать. Сообщения могут также быть получены от сети ROS.

pt = rosmessage('geometry_msgs/PointStamped');
pt.Header.FrameId = 'camera_link';
pt.Point.X = 3;
pt.Point.Y = 1.5;
pt.Point.Z = 0.2;

Преобразуйте сообщение ROS к 'base_link' система координат с помощью желаемого времени, ранее сохраненного.

tfpt = transform(tftree,'base_link',pt,desiredTime);

Дополнительный: можно также использовать apply с сохраненным tform применять это преобразование к pt сообщение.

tfpt2 = apply(tform,pt);

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/

В этом примере показано, как к преобразованиям с буфером времени доступа в сети ROS. Доступ к преобразованиям в течение определенных времен и изменяет BufferTime свойство на основе ваших желаемых времен.

Создайте дерево преобразования ROS. Используйте rosinit соединяться с сетью ROS. Замените ipaddress с вашим адресом сети ROS.

ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/
tftree = rostf;
pause(2);

Получите преобразование от 1 секунду назад.

desiredTime = rostime('now') - 1;
tform = getTransform(tftree,'base_link','camera_link',desiredTime);

Буферное время преобразования составляет 10 секунд по умолчанию. Измените BufferTime свойство дерева преобразования увеличить буферное время и ожидать того буфера, чтобы заполнить.

tftree.BufferTime = 15;
pause(15);

Получите преобразование от 12 секунд назад.

desiredTime = rostime('now') - 12;
tform = getTransform(tftree,'base_link','camera_link',desiredTime);

Можно также получить преобразования за один раз в будущем. getTransform функция будет ожидать, пока преобразование не доступно. Можно также задать тайм-аут к ошибке, если никакое преобразование не найдено. Этот пример ожидает 5 секунд преобразования в 3 секунды с этого времени, чтобы быть доступным.

desiredTime = rostime('now') + 3;
tform = getTransform(tftree,'base_link','camera_link',desiredTime,'Timeout',5);

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/

Получите преобразования от rosbag (.bag) файлы путем загрузки rosbag и проверки доступных систем координат. От этих систем координат используйте getTransform запрашивать преобразование между двумя координатными системами координат.

Загрузите rosbag.

bag = rosbag('ros_turtlesim.bag');

Получите список доступных систем координат.

frames = bag.AvailableFrames;

Получите последнее преобразование между двумя координатными системами координат.

tf = getTransform(bag,'world',frames{1});

Проверяйте на преобразование, доступное в определенное время, и получите преобразование. Используйте canTransform проверять, доступно ли преобразование. Задайте время с помощью rostime.

tfTime = rostime(bag.StartTime + 1);
if (canTransform(bag,'world',frames{1},tfTime))
    tf2 = getTransform(bag,'world',frames{1},tfTime);
end

Входные параметры

свернуть все

Дерево преобразования ROS в виде TransformationTree указатель на объект. Можно создать дерево преобразования путем вызова rostf функция.

Выбор rosbag обменивается сообщениями в виде BagSelection указатель на объект. Чтобы создать выбор сообщений rosbag, используйте rosbag.

Целевая координатная система координат в виде строкового скаляра или вектора символов. Можно просмотреть доступные системы координат для преобразования путем вызова tftree.AvailableFrames.

Начальная координатная система координат в виде строкового скаляра или вектора символов. Можно просмотреть доступные системы координат для преобразования путем вызова tftree.AvailableFrames.

ROS или системное время в виде Time указатель на объект. По умолчанию, sourcetime время симуляции ROS, опубликованное на clock тема. Если use_sim_time Параметр ROS устанавливается на true, sourcetime возвращает системное время. Можно создать Time объект с помощью rostime.

Тайм-аут для получения преобразовывает в виде скаляра в секундах. Функция возвращает ошибку, если тайм-аут достигнут, и никакое преобразование не становится доступным.

Выходные аргументы

свернуть все

Преобразование между координатными системами координат, возвращенными как TransformStamped указатель на объект. Преобразования структурированы как 3-D перевод (трехэлементный вектор) и 3-D вращение (кватернион).

Вопросы совместимости

развернуть все

Изменение поведения в будущем релизе

Смотрите также

| | | |

Введенный в R2019b