Main Content

BagSelection

rosbag 선택 항목을 저장하기 위한 객체

R2019b 이후

설명

BagSelection 객체는 rosbag 내 메시지의 인덱스입니다. 이 객체를 사용하여 rosbag에서 메시지 데이터를 추출하거나, 특정 기준에 따라 메시지를 선택하거나, 메시지 속성의 timeseries를 만들 수 있습니다.

rosbag을 사용하여 rosbag을 불러오고 BagSelection 객체를 만듭니다.

select를 사용하여 시간, 토픽 등을 기준으로 rosbag을 필터링합니다.

생성

설명

bag = rosbag(filename)은 인덱싱 가능한 BagSelection 객체인 bag을 만듭니다. 이 객체는 입력 경로 filename의 rosbag에 있는 모든 메시지의 인덱스를 포함합니다. 데이터에 액세스하려면 readMessages 함수 또는 timeseries 함수를 호출하여 관련 데이터를 추출합니다.

기타 구문은 rosbag 항목을 참조하십시오.

예제

bagsel = select(bag)BagSelection 객체 bag의 모든 메시지를 포함하는 객체 bagsel을 반환합니다.

이 함수는 BagSelection 객체의 원래 내용을 변경하지 않습니다. 반환 객체 bagsel은 지정에 따라 선택된 메시지가 포함된 새 객체입니다.

기타 구문을 확인하거나 시간 및 토픽과 같은 기준으로 필터링하는 방법을 알아보려면 select 항목을 참조하십시오.

속성

모두 확장

읽기 전용 속성입니다.

rosbag 파일의 절대 경로로, 문자형 벡터로 지정됩니다.

데이터형: char

읽기 전용 속성입니다.

선택한 부분에 포함된 첫 번째 메시지의 타임스탬프로, 스칼라로 지정됩니다(단위: 초).

데이터형: double

읽기 전용 속성입니다.

선택한 부분에 포함된 마지막 메시지의 타임스탬프로, 스칼라로 지정됩니다(단위: 초).

데이터형: double

읽기 전용 속성입니다.

선택한 부분에 포함된 메시지의 개수로, 스칼라로 지정됩니다. 처음 rosbag을 불러오면 이 속성에는 rosbag에 포함된 메시지의 개수가 있습니다. select로 메시지의 일부를 선택하면 이 속성은 이 서브셋에 포함된 메시지의 개수를 표시합니다.

데이터형: double

읽기 전용 속성입니다.

선택한 부분에 포함된 토픽의 테이블로, 테이블로 지정됩니다. 테이블의 각 행에는 하나의 토픽, 해당 토픽에 대한 메시지 개수, 메시지 유형, 유형 정의가 나열됩니다. 예를 들면 다음과 같습니다.

             NumMessages       MessageType                              MessageDefinition                       
             ___________    _________________    _______________________________________________________________

    /odom    99             nav_msgs/Odometry    '# This represents an estimate of a position and velocity in …'

데이터형: table

읽기 전용 속성입니다.

사용 가능한 좌표 프레임 목록으로, 문자형 벡터로 구성된 셀형 배열로 반환됩니다. canTransform을 사용하여 프레임 간의 특정 변환을 사용할 수 있는지 확인하거나 getTransform을 사용하여 변환을 쿼리합니다.

데이터형: cell array

읽기 전용 속성입니다.

선택한 부분에 포함된 메시지의 목록으로, 테이블로 지정됩니다. 테이블의 각 행에는 하나의 메시지가 나열됩니다.

데이터형: table

객체 함수

canTransform사용 가능한 변환 확인
getTransform두 좌표 프레임 간의 변환 가져오기
readMessagesrosbag에서 메시지 읽기
selectrosbag에서 메시지의 일부 선택
timeseriesCreate time series object for selected message properties
timetableCreate timetable for selected message properties in ROS bag file

예제

모두 축소

rosbag 로그 파일을 불러오고 선택 기준에 따라 특정 메시지를 구문 분석합니다.

rosbag 로그 파일에 있는 모든 메시지의 BagSelection 객체를 만듭니다.

bagMsgs = rosbag('ex_multiple_topics.bag');

타임스탬프와 토픽을 기준으로 메시지의 일부를 선택합니다.

bagMsgs2 = select(bagMsgs,'Time',...
           [bagMsgs.StartTime bagMsgs.StartTime + 1],'Topic','/odom');

선택한 부분의 메시지를 셀형 배열로 가져옵니다.

msgs = readMessages(bagMsgs2);

특정 메시지 속성을 시계열로 반환합니다.

ts = timeseries(bagMsgs2,'Pose.Pose.Position.X', ...
           'Twist.Twist.Angular.Y');

rosbag에서 정보를 가져옵니다. MATLAB® 경로에 rosbag이 아직 없는 경우 rosbag에 대한 전체 경로를 지정합니다.

bagselect = rosbag('ex_multiple_topics.bag');

시간별, 토픽별로 필터링하여 메시지의 일부를 선택합니다.

bagselect2 = select(bagselect,'Time',...
    [bagselect.StartTime bagselect.StartTime + 1],'Topic','/odom');

rosbag 로그 파일에 대한 정보를 보기 위해 rosbag info filename을 사용합니다. 여기서 filename은 rosbag(.bag) 파일입니다.

rosbag info 'ex_multiple_topics.bag'
Path:     /tmp/Bdoc24a_2550221_3944133/tp247a0d88/ros-ex32890909/ex_multiple_topics.bag
Version:  2.0
Duration: 2:00s (120s)
Start:    Dec 31 1969 19:03:21.34 (201.34)
End:      Dec 31 1969 19:05:21.34 (321.34)
Size:     23.6 MB
Messages: 36963
Types:    gazebo_msgs/LinkStates [48c080191eb15c41858319b4d8a609c2]
          nav_msgs/Odometry      [cd5e73d190d741a2f92e81eda573aca7]
          rosgraph_msgs/Clock    [a9c97c1d230cfc112e270351a944ee47]
          sensor_msgs/LaserScan  [90c7ef2dc6895d81024acba2ac42f369]
Topics:   /clock               12001 msgs  : rosgraph_msgs/Clock   
          /gazebo/link_states  11999 msgs  : gazebo_msgs/LinkStates
          /odom                11998 msgs  : nav_msgs/Odometry     
          /scan                  965 msgs  : sensor_msgs/LaserScan 

rosbag을 불러온 다음 사용할 수 있는 프레임을 확인하여 rosbag (.bag) 파일에서 변환을 가져옵니다. 이 프레임에서 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('ros_turtlesim.bag');

특정 토픽을 선택합니다.

bSel = select(bag,'Topic','/turtle1/pose');

메시지를 구조체로 읽어옵니다. 메시지를 읽을 때 DataFormat 이름-값 쌍을 지정합니다. 반환된 구조체의 셀형 배열에서 첫 번째 구조체를 검사합니다.

msgStructs = readMessages(bSel,'DataFormat','struct');
msgStructs{1}
ans = struct with fields:
        MessageType: 'turtlesim/Pose'
                  X: 5.5016
                  Y: 6.3965
              Theta: 4.5377
     LinearVelocity: 1
    AngularVelocity: 0

메시지에서 xy 점을 추출하고 로봇 궤적을 플로팅합니다.

구조체에서 모든 X 필드와 Y 필드를 추출하기 위해 cellfun을 사용합니다. 이 필드는 rosbag을 기록할 동안의 로봇의 xy 위치를 나타냅니다.

xPoints = cellfun(@(m) double(m.X),msgStructs);
yPoints = cellfun(@(m) double(m.Y),msgStructs);
plot(xPoints,yPoints)

버전 내역

R2019b에 개발됨