• ROS1, ROS2 동시 사용
    ROS 2024. 11. 12. 07:17
    반응형

    ROS1이 설치된 상태에서 ROS2를 같이 설치해줘야 하는 경우에 대한 내용이다.

    설치는 그냥 각각 공식 문서 보고 똑같이 해주면 된다.

     

    단, 소스 코드를 실행하기 전에 각 코드에 맞게 ROS 버전을 적용을 해줘야 하는데,

    매번 source 시키기 번거로우므로 .bashrc(zshell일 경우 .zshrc) 파일 스위칭 함수 같은 걸 만들어서 넣어주면 편리하다.

     

    e.g. Ubuntu 18.04에 ROS1(melodic)과 ROS2(eloquent)를 설치한 경우

    # for ros1
    rosv1() {
      source /opt/ros/melodic/setup.bash
      source ~/ros1_ws/devel/setup.bash
    }
    
    # for ros2
    rosv2() {  
      source /opt/ros/eloquent/setup.bash
      source ~/ros2_ws/install/setup.bash
    }

    터미널 창에 rosv1을 입력할 경우 ros1 melodic 버전이, rosv2를 입력할 경우 ros2 eloquent 버전이 적용된다.

    (ros1_ws, ros2_ws에 각 워크스페이스 디렉토리 이름을 적어준다.)

     

    좀 더 편리하게 작성해보자.

    rosv1, rosv2를 입력했을 때 각 버전이 잘 적용되었다고 알려주는 메시지(echo)를 추가했다.

    # for ros1
    rosv1() {
      source /opt/ros/melodic/setup.bash
      source ~/ros1_ws/devel/setup.bash
      echo "ros1 melodic activated"
    }
    
    # for ros2
    rosv2() {
      # colcon_cd configuration
      source /usr/share/colcon_cd/function/colcon_cd.sh
      export _colcon_cd_root=~/ros2_ws
      
      # colorized terminal log
      export RCUTILS_COLORIZED_OUTPUT=1
      
      # auto-complete command line
      eval "$(register-python-argcomplete3 ros2)"
      eval "$(register-python-argcomplete3 colcon)"
      
      source /opt/ros/eloquent/setup.bash
      source ~/ros2_ws/install/setup.bash
      echo "ros2 eloquent activated"
    }

    하는 김에 colcon_cd 세팅 커맨드랑 커맨드 자동완성 시켜주는 커맨드도 같이 넣어준다.

    (eloquent colcon_cd 세팅 관련 설명은 여기서 볼 수 있다.)

     

    만약 colcon 관련해서 command not found 메시지가 뜰 경우 다음 명령어를 통해 관련 패키지를 설치해준다.

    sudo apt install python3-colcon-common-extensions

     

    source 하거나 새 터미널 창을 열어서 추가한 내용을 적용시켜준다.

    이후 데모 노드를 실행해보고, 잘 되는지 확인한다.

    $ source ~/.bashrc
    $ rosv2
    ros2 eloquent activated
    $ ros2 run demo_nodes_cpp talker
    [INFO] [talker]: Publishing: 'Hello World: 1'
    [INFO] [talker]: Publishing: 'Hello World: 2'
    [INFO] [talker]: Publishing: 'Hello World: 3'
    [INFO] [talker]: Publishing: 'Hello World: 4'
    ...

    잘 된다.

     

    이번에는 ros1으로 전환해보자.

    $ rosv1
    ROS_DISTRO was set to 'eloquent' before. Please make sure that the environment does not mix paths from different distributions.
    ros1 melodic activated

    잘 된다.

    중간에 뜨는 Please make sure~~ 메시지는 버전 변경에 대한 일종의 경고문이므로 무시해도 괜찮다.

     

    반응형

    댓글

ABOUT ME

공부한 것을 기록하기 위해 블로그를 개설했습니다.

VISIT

/