[voxblox] voxblox_ros/launch/rgbd_dataset.launch

About_work·2024년 9월 3일
0

voxblox

목록 보기
5/10

0. 사용법

0.1. 코드 돌리기

roslaunch voxblox_ros rgbd_dataset.launch

roslaunch voxblox_ros rgbd_dataset.launch voxel_size:=0.15

0.2. 구체적

  • launch 파일은 먼저 ROSBAG 파일을 재생하여 기록된 데이터를 불러옵니다.
    • 그런 다음, voxblox_ros의 TSDF 서버 노드를 실행하여 포인트 클라우드 데이터를 처리하고, TSDF 기반의 3D 지도를 생성
      • 이 과정에서 특정 파라미터와 설정들이 사용되어 복셀 크기, 메시 생성 주기 등을 제어
  • launch 파일은 두 개의 주요 노드를 실행하는 데 사용됩니다:

1. 파라미터

1.1. tsdf_voxel_size

  • 설명:
    • 이 파라미터는 TSDF(Truncated Signed Distance Function)에서 사용되는 복셀의 크기를 설정
    • 기본적으로 $(arg voxel_size)에서 가져온 값을 사용
    • TODO: 0.05m로 설정해야함

1.2. tsdf_voxels_per_side

  • 설명: TSDF를 저장하는 각 블록의 한 변에 있는 복셀의 개수를 설정 (여기서는 16으로 설정)
    • TODO:
      • TSDF에서 block이라는 개념이 무엇일까?
      • 전후좌우 4m를 보려면 8 / 0.05 = 160으로 해야하나?
  • 상세 설명:
    • TSDF 블록:
      • TSDF 데이터는 여러 개의 블록으로 나누어 저장
      • 각 블록은 동일한 크기의 복셀로 이루어져 있으며,
        • 이 파라미터는 한 블록의 한 변에 몇 개의 복셀이 포함되는지를 결정
    • 예시:
      • tsdf_voxels_per_side가 16이라면, 한 블록은 (16 \times 16 \times 16) 복셀로 구성됩니다.
      • 이 값이 크면 더 큰 공간을 하나의 블록으로 처리할 수 있지만, 그만큼 블록 내에서의 해상도가 낮아집니다.
      • 반면, 작은 값은 더 정밀한 데이터를 저장할 수 있지만, 메모리 사용량과 계산 시간이 증가합니다.

1.3. voxel_carving_enabled

  • 설명:
    • 복셀 카빙(voxel carving) 기능을 활성화하는 파라미터
    • 카빙은 빈 공간(즉, 물체가 없는 공간)을 제거하는 기능
    • TODO:
      • mapping을 할 때, 빈공간을 제거해도 될거같은데 -> 진짜 그런지 확인해보기
  • 상세 설명:
    • 복셀 카빙:
      • 복셀 카빙은 TSDF에서 물체의 표면만 남기고 나머지 빈 공간을 제거하는 과정
      • 예를 들어, 라이다(LiDAR) 데이터에서 물체와 물체 사이의 빈 공간을 명확히 구분할 수 있음
    • 장점:
      • 카빙을 통해 메모리 사용량을 줄이고, 필요한 데이터만 남길 수 있습니다.
      • 이는 특히 대규모 3D 맵핑 작업에서 효율성을 높입니다.

1.4. color_mode

  • 설명: TSDF 맵에서 색상을 사용하는 모드를 설정하는 파라미터

  • 상세 설명:

    • 컬러 모드:
      • color_mode는 복셀에 색상 정보를 포함할지 여부를 결정
      • 예를 들어, RGBD 카메라 데이터를 사용하면,
        • 각 복셀에 RGB 색상 값을 저장할 수 있음

1.5. use_tf_transforms

  • 설명:
    • TF 변환을 사용할지 여부를 설정하는 파라미터
    • 여기서는 false로 설정되어 있어, TF 변환을 사용하지 않습니다.
  • 상세 설명:
    • TF 변환:
      • ROS에서 TF(Transform) 변환: 서로 다른 좌표 프레임 간의 관계를 나타내는 정보를 관리
      • 예를 들어, 로봇의 기본 프레임에서 카메라나 센서의 위치와 방향을 나타낼 수 있습니다.
    • 활성화 여부:
      • use_tf_transformstrue로 설정되면, TSDF 맵 생성 과정에서 TF 프레임 간의 변환 정보를 이용하여 포인트 클라우드를 올바르게 정렬
      • false로 설정된 경우, 사용자가 명시적으로 지정한 좌표 변환만을 사용
    • TODO: True로 해야할 거 같은데, 구체적으로 어떻게 해야할지 확인해보기
      • 알아서 realsense의 tf를 찾아주려나?


  • use_tf_transformsTrue로 설정하여 로봇 중심 좌표계에서 RealSense 카메라의 장착 위치를 고려하려면, 다음 단계를 따르면 됩니다:

1.5.1. use_tf_transforms 파라미터 설정

roslaunch voxblox_ros rgbd_dataset.launch use_tf_transforms:=true

1.5.2. TF 트리 설정

카메라와 로봇의 좌표계 변환 정보를 제공해야 합니다. 이는 보통 URDF 파일 또는 TF broadcaster를 통해 이루어집니다.



1.5.2.0. 요약

  • URDF 파일 작성 및 저장:

    • robot_description.urdf 파일을 작성하여 /home/user/urdf/ 경로에 저장합니다.
  • ROS 파라미터 서버에 업로드:

    • rosparam load 명령어를 사용하여 URDF 파일을 ROS 파라미터 서버에 업로드
  • TF 트리 생성:

    • robot_state_publisher 노드를 실행하여 TF 트리를 생성하고 ROS 시스템에 게시
  • TF 트리 확인:

    • rqt_tf_tree 또는 rviz를 사용하여 TF 트리를 확인
  • 이 단계를 따르면, 로봇 중심 좌표계에서 realsense 센서의 위치와 방향을 고려한 TF 트리가 생성됩니다.

1.5.2.1. URDF 파일 작성 및 저장

  1. URDF 파일 작성:

    • 아래와 같은 내용을 가진 URDF 파일을 작성
    <?xml version="1.0"?>
    <robot name="my_robot">
      <!-- Base link -->
      <link name="base_link"/>
    
      <!-- Realsense link -->
      <link name="realsense_link"/>
    
      <!-- Joint between base_link and realsense_link -->
      <joint name="base_to_realsense" type="fixed">
        <parent link="base_link"/>
        <child link="realsense_link"/>
        <origin xyz="0.1 0.0 0.1" rpy="0 0 0"/>
        <!-- xyz: 장착 위치, rpy: 회전 (롤, 피치, 요) -->
      </joint>
    </robot>
  2. 파일 저장:

    • 이 파일을 robot_description.urdf라는 이름으로 저장합니다.
    • 예를 들어, 이 파일을 홈 디렉터리 아래의 urdf 폴더에 저장한다고 가정합니다.
    mkdir -p ~/urdf
    nano ~/urdf/robot_description.urdf

1.5.2.2. URDF 파일을 ROS 파라미터 서버에 업로드

  1. ROS 파라미터 서버에 업로드:

    • rosparam load 명령어를 사용하여 URDF 파일을 ROS 파라미터 서버에 업로드
    rosparam load ~/urdf/robot_description.urdf robot_description
    • 이 명령어는 robot_description이라는 이름으로 URDF 파일의 내용을 ROS 파라미터 서버에 업로드

1.5.2.3. robot_state_publisher 노드를 실행하여 TF 트리 생성

  1. robot_state_publisher 노드 실행:

    • robot_state_publisher는 로봇의 상태를 기반으로 TF 트리를 생성하고, 이를 ROS 시스템에 게시하는 역할을 합니다.
    rosrun robot_state_publisher robot_state_publisher
    • 이 명령어를 실행하면 robot_state_publisher가 로봇의 상태를 읽고, base_linkrealsense_link 사이의 TF 변환을 포함한 TF 트리를 생성하여 ROS 시스템에 게시

1.5.2.4. TF 트리 확인

  1. TF 트리 확인:

    • rviz 또는 rqt_tf_tree를 사용하여 TF 트리가 올바르게 게시되었는지 확인할 수 있습니다.
    rosrun rqt_tf_tree rqt_tf_tree
    • rqt_tf_tree를 실행하면, TF 트리의 구조를 시각적으로 확인할 수 있습니다.
    • base_linkrealsense_link 사이의 변환이 올바르게 표시되어야 합니다.


  • TF broadcaster 사용 방법:
    노드를 통해 직접 TF broadcaster를 작성하여, 카메라와 로봇 사이의 변환을 실시간으로 게시할 수도 있습니다.

    #include <ros/ros.h>
    #include <tf/transform_broadcaster.h>
    
    int main(int argc, char** argv){
      ros::init(argc, argv, "my_tf_broadcaster");
      ros::NodeHandle node;
    
      tf::TransformBroadcaster br;
      tf::Transform transform;
    
      ros::Rate rate(10.0);
      while (node.ok()){
        transform.setOrigin( tf::Vector3(0.1, 0.0, 0.1) );
        tf::Quaternion q;
        q.setRPY(0, 0, 0);
        transform.setRotation(q);
        br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "base_link", "realsense_link"));
        rate.sleep();
      }
      return 0;
    }
    • 이 코드를 컴파일하고 실행하면, base_linkrealsense_link 사이의 TF 변환이 실시간으로 게시됩니다.

1.5.3. 런치 파일 실행

  • 이제 설정이 완료되었으므로, roslaunch 명령어를 사용해 런치 파일을 실행합니다.
roslaunch voxblox_ros rgbd_dataset.launch use_tf_transforms:=true

이 명령어는 use_tf_transformstrue로 설정하여 실행합니다.

  • 이제 voxblox_nodecamera/depth/points와 함께 제공되는 TF 변환을 이용하여 카메라의 위치와 방향을 반영할 수 있습니다.


1.6. update_mesh_every_n_sec

  • 설명:

    • 메쉬를 생성하거나 업데이트하는 주기를 설정하는 파라미터
    • 여기서는 1초로 설정
  • 상세 설명:

    • 메쉬 업데이트 주기:
      • TSDF 맵으로부터 3D 메쉬(즉, 표면을 나타내는 삼각형 형태의 폴리곤 네트워크)를 생성하는 작업은 계산 비용이 큽니다.
      • 이 파라미터는 메쉬 업데이트가 얼마나 자주 이루어질지를 결정

1.7. verbose

  • 설명: 자세한 로그 출력을 활성화하는 파라미터입니다.

1.8. min_time_between_msgs_sec

  • 설명: 두 메시지 사이의 최소 시간 간격을 설정하는 파라미터로, 여기서는 0.2초로 설정되어 있습니다.

    • TODO:
      • 아마 RGBD 와 pose 데이터 각각에 대한 최소 시간 간격을 의미하는 것 같은데,
      • 이를 줄이면 어떻게 되는지 확인해보자.
  • 상세 설명:

    • 메시지 처리 간격:
      • TSDF 서버가 메시지를 처리할 때, 너무 자주 데이터를 갱신하면 시스템에 부담이 될 수 있음
      • 이 파라미터는 두 메시지 사이의 최소 간격을 설정해 과도한 메시지 처리로 인한 성능 저하를 방지
    • 효과:
      • 간격을 길게 설정하면 메시지 처리 빈도가 줄어들어 자원 소모가 줄어들지만, 실시간성은 떨어짐
      • 반면, 간격을 짧게 설정하면 실시간성이 향상되지만 시스템 자원 사용이 늘어남

1.9. max_ray_length_m

  • 설명:
    • 레이 길이의 최대 값을 설정하는 파라미터로, 여기서는 2.0미터로 설정되어 있음
    • TODO: 4m로 해야할 것 같음. 확인 필요
  • 상세 설명:
    • 레이 트레이싱:
      • TSDF 맵을 생성할 때, 센서에서 출발한 레이가 물체와 충돌하는 위치까지의 거리를 계산
      • 이 레이 길이의 최대 값을 제한하여, 매우 먼 거리의 데이터를 무시할 수 있습니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글