exponenta event banner

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

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

Описание

пример

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.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/

В этом примере показано, как получить доступ к преобразованиям с буферизацией по времени в сети ROS. Доступ к преобразованиям для определенного времени и изменение BufferTime в зависимости от желаемого времени.

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

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

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

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

свернуть все

Дерево преобразования 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 дескриптор объекта.

См. также

|

Представлен в R2019b