# ROS 2 Bridge를 통한 ROS(1)(사용 설명서)

이 항목에서는 ROS 2로 브리지하여, PX4와 함께 ROS(1)를 사용하는 방법을 설명합니다.

필요한 소프트웨어를 설치하고 ROS(1) 애플리케이션을 구축하는 방법과 ROS-ROS2-PX4 아키텍처에 대한 개요를 설명합니다. 또한, ROS 2 및 ROS 1 작업 공간을 동시에 설정하는 방법도 설명합니다.

Note

일반적으로 MAVLink에서 부여한 것보다 PX4에 더 깊이 액세스하려는 경우나 ROS2 및 ROS(1) 애플리케이션을 모두 사용하려는 경우 ROS(1)와 MAVROS를 연결하는 대신 이 설정을 사용할 수 있습니다.

Note

이 설정과 이 지침은 ROS 2의존합니다. 먼저 ROS 2를 읽어보는 것이 좋습니다.

WARNING

Note PX4 개발 팀은 모든 사용자가 ROS 2로 업그레이드할 것을 권장합니다.

# 개요

ROS 2를 통해 브리지된 ROS(1)의 애플리케이션 파이프라인은 다음과 같습니다.

ROS를 사용한 아키텍처

두 버전 간에 메시지를 번역하는 추가 ros1_bridge (opens new window) 패키지(Open Robotics 제공)가 있다는 점을 제외하면 기본적으로 ROS 2와 동일합니다. 이것은 ROS의 원래 버전이 RTPS를 지원하지 않기 때문에 필요합니다.

다른 주요 차이점은 px4_ros_compx4_msgs가 별도의 ros1 분기를 패키징한다는 것입니다. ros1_bridge함께 사용하기 위한 ROS 메시지 헤더와 소스 파일을 생성합니다. 이 분기에는 예제 리스너 및 광고주 노드도 포함됩니다.

# 설치 및 설정

ROS 2 사용자 가이드 > 설치 및 설정을 참고하여 ROS 2를 설치합니다.

# ROS (1) 작업 공간 빌드

ROS는 ROS2와 다른 환경이 필요하기 때문에 별도의 작업 공간을 만들어야 합니다. 여기에는 ros1_bridge와 함께 px4_ros_compx4_msgsros 분기가 포함됩니다.

작업 공간을 만들고 빌드합니다.

  1. ROS 1 작업 공간 디렉토리를 생성합니다.
    $ mkdir -p ~/px4_ros_com_ros1/src
    
  2. ROS 1 브리지 패키지 px4_ros_compx4_msgs/src 디렉토리(ros1 분기)에 복제합니다.
    $ git clone https://github.com/PX4/px4_ros_com.git ~/px4_ros_com_ros1/src/px4_ros_com -b ros1 # clones the 'ros1' branch
    $ git clone https://github.com/PX4/px4_msgs.git ~/px4_ros_com_ros1/src/px4_msgs -b ros1
    
  3. build_ros1_bridge.bash 스크립트를 사용하여 ROS 작업 공간(px4_ros_com, px4_msgsros1_bridge 포함)을 빌드합니다.
    $ git checkout ros1
    $ cd scripts
    $ source build_ros1_bridge.bash
    

TIP

또한 단일 스크립트(build_all.bash)로 ROS(1) 및 ROS 2 작업 공간을 모두 빌드할 수 있습니다. 이것을 사용하는 가장 일반적인 방법은 ROS(1) 작업 공간 디렉토리 경로와 PX4 Autopilot 디렉토리 경로를 전달하는 것입니다.

$ source build_all.bash --ros1_ws_dir <path/to/px4_ros_com_ros1/ws>

# 설치 상태 확인

ROS 2 사용자 가이드 > 설치 상태 확인 설치를 확인하는 방법은 브리지가 PX4 시뮬레이터에서 PX4와 통신 여부를 테스트하는 것입니다.

ROS(1) ROS 2를 사용하려면(둘 다 필요합니다!):

  1. PX4 Ubuntu Linux 개발 환경 설정 - 기본 지침은 최신 버전의 PX4 소스를 다운로드하고 필요한 도구들을 설치합니다.

  2. PX4 Autopilot 프로젝트의 루트에서 새 터미널을 열고, PX4 Gazebo 시뮬레이션을 실행합니다.

    make px4_sitl_rtps gazebo
    

    PX4가 시작되면, 터미널에 NuttShell/System Console이 표시됩니다.

  3. 다른 터미널에서 ROS 2 환경과 작업 공간을 소싱하고 ros1_bridge를 시작합니다(이렇게 하면 ROS 2와 ROS 노드가 서로 통신할 수 있음). 또한, roscore가 실행 중이거나 실행될 ROS_MASTER_URI를 설정합니다.

    $ source /opt/ros/dashing/setup.bash
    $ source ~/px4_ros_com_ros2/install/local_setup.bash
    $ export ROS_MASTER_URI=http://localhost:11311
    $ ros2 run ros1_bridge dynamic_bridge
    
  4. 다른 터미널에서 ROS 작업 공간을 소싱하고, sensor_combined 리스너 노드를 시작합니다. roslaunch를 통해 시작하므로, roscore도 자동으로 시작됩니다.

    $ source ~/px4_ros_com_ros1/install/setup.bash
    $ roslaunch px4_ros_com sensor_combined_listener.launch
    
  5. 다른 터미널에서 ROS 2 작업 공간을 소싱한 다음 UDP를 전송 프로토콜로 사용하여 micrortps_agent 데몬을 시작합니다.

    $ source ~/px4_ros_com_ros2/install/setup.bash
    $ micrortps_agent -t UDP
    
  6. NuttShell/System Console에서 UDP micrortps_client 데몬을 시작합니다.

    > micrortps_client start -t UDP
    

    브리지가 올바르게 작동하면, ROS 수신기를 시작한 터미널에서 데이터가 인쇄되는 것을 확일할 수 있습니다.

    RECEIVED DATA FROM SENSOR COMBINED
    ================================
    ts: 870938190
    gyro_rad[0]: 0.00341645
    gyro_rad[1]: 0.00626475
    gyro_rad[2]: -0.000515705
    gyro_integral_dt: 4739
    accelerometer_timestamp_relative: 0
    accelerometer_m_s2[0]: -0.273381
    accelerometer_m_s2[1]: 0.0949186
    accelerometer_m_s2[2]: -9.76044
    accelerometer_integral_dt: 4739
    

Note

build_all.bash 스크립트를 사용하면, 필요한 모든 터미널이 자동으로 열리고 소싱되므로 각 터미널에서 해당 앱을 실행하기만 하면 됩니다.

# ROS(1) 리스너 생성

ROS 노드 생성은 잘 알려져 있고 문서화된 프로세스이므로 이 섹션은 이 가이드에서 생략합니다. 다음 경로 src/listeners/ 아래에서 px4_ros_com 저장소의 ros1 분기 sensor_combined 메시지에 대한 ROS 리스너의 예를 찾을 수 있습니다.