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)

Проверьте преобразование, которое вы хотите отправить по сети, уже не существует. 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 секунд с этого времени. 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