преобразовать

Преобразуйте сущности сообщения в целевой координатный кадр

Синтаксис

tfentity = transform(tftree,targetframe,entity)
tfentity = transform(tftree,targetframe,entity,"msgtime")
tfentity = transform(tftree,targetframe,entity,sourcetime)

Описание

пример

tfentity = transform(tftree,targetframe,entity) получает последнее преобразование между targetframe и координатным кадром entity и применяет его к entity, сообщению ROS определенного типа. tftree является полным деревом преобразования, содержащим известные преобразования между сущностями. Если преобразование от entity до targetframe не существует, MATLAB® выдает ошибку.

tfentity = transform(tftree,targetframe,entity,"msgtime") использует метку времени в заголовке сообщения, entity, как исходное время, чтобы получить и применить преобразование.

tfentity = transform(tftree,targetframe,entity,sourcetime) использует данное исходное время, чтобы получить и применить преобразование к сообщению, entity.

Примеры

свернуть все

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

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

ipaddress = '192.168.203.129';
rosinit(ipaddress)
tftree = rostf;
pause(1)
Initializing global node /matlab_global_node_60416 with NodeURI http://192.168.203.1:53781/

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

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'        }
    {'pole_top_0_link'           }
    {'pole_top_1_link'           }
    {'pole_top_2_link'           }
    {'pole_top_3_link'           }
    {'wheel_left_link'           }
    {'wheel_right_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_60416 with NodeURI http://192.168.203.1:53781/

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

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

ipaddress = '192.168.203.129';
rosinit(ipaddress)
tftree = rostf;
pause(2);
Initializing global node /matlab_global_node_29163 with NodeURI http://192.168.203.1:53691/

Получите преобразование от 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_29163 with NodeURI http://192.168.203.1:53691/

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

свернуть все

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

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

Начальная сущность сообщения, заданная как указатель на объект Message.

Поддерживаемые сообщения:

  • geometry_msgs/PointStamped

  • geometry_msgs/PoseStamped

  • geometry_msgs/QuaternionStamped

  • geometry_msgs/Vector3Stamped

  • sensor_msgs/PointCloud2

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

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

свернуть все

Преобразованная сущность, возвращенная как указатель на объект Message.

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

|

Представленный в R2015a