주요 콘텐츠

rosbagreader

rosbag 로그 파일 정보 액세스

R2021b 이후

    설명

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

    생성

    설명

    bagreader = rosbagreader(filepath)는 인덱싱 가능한 rosbagreader 객체인 bagreader를 만듭니다. 이 객체는 입력 경로 filepath의 rosbag 로그 파일에 있는 모든 메시지를 포함합니다. filepath 입력 인수는 FilePath 속성을 설정합니다. 데이터에 액세스하려면 readMessages 함수 또는 timeseries 함수를 호출하여 관련 데이터를 추출합니다.

    예제

    속성

    모두 확장

    읽기 전용 속성입니다.

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

    데이터형: char

    읽기 전용 속성입니다.

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

    데이터형: double

    읽기 전용 속성입니다.

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

    데이터형: double

    읽기 전용 속성입니다.

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

    데이터형: double

    읽기 전용 속성입니다.

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

    데이터형: table

    읽기 전용 속성입니다.

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

    데이터형: cell

    읽기 전용 속성입니다.

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

    데이터형: table

    객체 함수

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

    예제

    모두 축소

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

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

    bagMsgs = rosbagreader("ex_multiple_topics.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/tmp/Bdoc25a_2974004_1599981/tp214450ba/ros-ex26633229/ex_multiple_topics.bag'
              StartTime: 201.3400
                EndTime: 321.3400
            NumMessages: 36963
        AvailableTopics: [4×3 table]
        AvailableFrames: {0×1 cell}
            MessageList: [36963×4 table]
    
    

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

    bagMsgs2 = select(bagMsgs,...
        Time=[bagMsgs.StartTime bagMsgs.StartTime + 1],...
        Topic='/odom')
    bagMsgs2 = 
      rosbagreader with properties:
    
               FilePath: '/tmp/Bdoc25a_2974004_1599981/tp214450ba/ros-ex26633229/ex_multiple_topics.bag'
              StartTime: 201.3400
                EndTime: 202.3200
            NumMessages: 99
        AvailableTopics: [1×3 table]
        AvailableFrames: {0×1 cell}
            MessageList: [99×4 table]
    
    

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

    msgs = readMessages(bagMsgs2)
    msgs=99×1 cell array
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
        {1×1 Odometry}
          ⋮
    
    

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

    ts = timeseries(bagMsgs2,...
        'Pose.Pose.Position.X', ...
        'Twist.Twist.Angular.Y')
      timeseries
    
      Timeseries contains duplicate times.
    
      Common Properties:
                Name: '/odom Properties'
                Time: [99x1 double]
            TimeInfo: [1x1 tsdata.timemetadata]
                Data: [99x2 double]
            DataInfo: [1x1 tsdata.datametadata]
    
      More properties, Methods
    

    rosbag을 불러온 다음 사용할 수 있는 프레임을 확인하여 rosbag (.bag) 파일에서 변환을 가져옵니다. 이 프레임에서 getTransform 함수를 사용하여 두 좌표 프레임 간의 변환을 쿼리합니다.

    rosbag을 불러옵니다.

    bagMsgs = rosbagreader("ros_turtlesim.bag")
    bagMsgs = 
      rosbagreader with properties:
    
               FilePath: '/tmp/Bdoc25a_2974004_1605174/tp9e8ec0e6/ros-ex81142742/ros_turtlesim.bag'
              StartTime: 1.5040e+09
                EndTime: 1.5040e+09
            NumMessages: 6089
        AvailableTopics: [6×3 table]
        AvailableFrames: {2×1 cell}
            MessageList: [6089×4 table]
    
    

    사용할 수 있는 프레임의 목록을 가져옵니다.

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

    두 좌표 프레임 간의 최근 변환을 가져옵니다.

    tf = getTransform(bagMsgs,'world',frames{1})
    tf = 
      ROS TransformStamped message with properties:
    
         MessageType: 'geometry_msgs/TransformStamped'
              Header: [1×1 Header]
           Transform: [1×1 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

    버전 내역

    R2021b에 개발됨