canTransform

Проверьте, доступно ли преобразование

Описание

пример

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

isAvailable = canTransform(tftree,targetframe,sourceframe,sourcetime) проверяет, доступно ли преобразование для исходного времени. Если sourcetime находится вне буферного окна, функция возвращается false.

пример

isAvailable = canTransform(bagSel,targetframe,sourceframe) проверяет, доступно ли преобразование в rosbag bagSel. Чтобы получить bagSel введите, загрузите rosbag, используя rosbag.

isAvailable = canTransform(bagSel,targetframe,sourceframe,sourcetime) проверяет, доступно ли преобразование в rosbag для исходного времени. Если sourcetime находится вне буферного окна, функция возвращается false.

Примеры

свернуть все

В этом примере показано, как создать преобразование и отправить его по сети ROS.

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

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

Проверьте, что преобразование, которое вы хотите отправить по сети, еще не существует. The canTransform функция возвращает false, если преобразование не сразу доступно.

canTransform(tftree,'new_frame','base_link')
ans = logical
   0

Создайте TransformStamped сообщение. Заполните поля сообщения информацией о преобразовании.

tform = rosmessage('geometry_msgs/TransformStamped');
tform.ChildFrameId = 'new_frame';
tform.Header.FrameId = 'base_link';
tform.Transform.Translation.X = 0.5;
tform.Transform.Rotation.Z = 0.75;

Отправьте преобразование по сети ROS.

sendTransform(tftree,tform)

Проверьте, что преобразование находится в сети ROS.

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

Завершите работу сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_33798 with NodeURI http://192.168.17.1:56771/

В этом примере показано, как настроить дерево преобразования 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 секунды с этого момента. The 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/

Получите преобразования из 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 или bagSel.AvailableFrames.

Исходная система координат координат, заданный как строковый скаляр или вектор символов. Вы можете просмотреть доступные системы координат для преобразования, позвонив tftree.AvailableFrames или bagSel.AvailableFrames.

ROS или системное время, заданное как скаляр или Time указатель на объект. Скалярный вход преобразуется в Time использование объекта rostime.

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

свернуть все

Индикатор, если преобразование существует, возвращается как логический. Функция возвращается false, если:

  • sourcetime находится вне буферного окна для tftree объект.

  • sourcetime находится вне времени bagSel объект.

  • sourcetime в будущем.

  • Преобразование пока не опубликовано.

Введенный в R2019b