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 array
    {'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