canTransform

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

Описание

TransformationTree Объект

пример

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

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

BagSelection Объект

пример

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

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

rosbagreader Объект

isAvailable = canTransform(bagreader,targetframe,sourceframe) проверяет, доступно ли преобразование в rosbag в bagreader.

пример

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

Примеры

свернуть все

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

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

rosinit;
Launching ROS Core...
....Done in 4.1192 seconds.
Initializing ROS master on http://192.168.125.1:56090.
Initializing global node /matlab_global_node_16894 with NodeURI http://HYD-KVENNAPU:63122/
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.X = 0.5;
tform.Transform.Rotation.Y = 0.5;
tform.Transform.Rotation.Z = 0.5;
tform.Transform.Rotation.W = 0.5;

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

sendTransform(tftree,tform)

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

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

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

rosshutdown
Shutting down global node /matlab_global_node_16894 with NodeURI http://HYD-KVENNAPU:63122/
Shutting down ROS master on http://192.168.125.1:56090.

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

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

Загрузите rosbag.

bagMsgs = rosbagreader("ros_turtlesim.bag")
bagMsgs = 
  rosbagreader with properties:

           FilePath: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook4/tp81864dc2/ros-ex81142742/ros_turtlesim.bag'
          StartTime: 1.5040e+09
            EndTime: 1.5040e+09
        NumMessages: 6089
    AvailableTopics: [6x3 table]
    AvailableFrames: {2x1 cell}
        MessageList: [6089x4 table]

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

frames = bagMsgs.AvailableFrames
frames = 2x1 cell
    {'turtle1'}
    {'world'  }

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

tf = getTransform(bagMsgs,'world',frames{1})
tf = 
  ROS TransformStamped message with properties:

     MessageType: 'geometry_msgs/TransformStamped'
          Header: [1x1 Header]
       Transform: [1x1 Transform]
    ChildFrameId: 'turtle1'

  Use showdetails to show the contents of the message

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

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

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

свернуть все

Дерево преобразования ROS в виде TransformationTree объект. Создайте дерево преобразования путем вызова rostf функция.

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

Индекс сообщений в rosbag в виде rosbagreader объект.

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

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

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

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

свернуть все

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

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

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

  • sourcetime находится в будущем.

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

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

| | | | |

Введенный в R2019b