설치 환경

OS : Ubuntu 23.10

GPU : NVIDIA GeForce RTX 4080 Laptop GPU

ROS version: ROS1 Noetic



ROS Noetic install

1. Ubuntu Repository 설정 확인

Screenshot from 2024-04-02 14-31-22

  • Software & Updates 들어가서 main, universe, restricted, multiverse 모두 check 되어 있는지 확인


2. ROS 설치

  • packages.ros.org에서 소프트웨어 다운로드를 할 수 있도록 sources.list 설정

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'xxxxxxxxxx sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    
  • ROS 설치

    sudo apt install ros-noetic-desktop-full
    


2.1 Docker를 이용한 ROS (2번으로 설치가 되지 않는 경우)

Ubuntu 23.10에서는 noetic이 설치가 되지 않는 것 같아 Docker Image를 이용하여 실행

  • Docker Image를 이용하여 Docker container 생성
# <DISTRO> :  indigo / kinetic / melodic / noetic 등등...
docker run -it \
    --env="DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    osrf/ros:<DISTRO>-desktop-full
  • Docker Image를 이용하여 Docker container 생성


3. ROS 환경 구축

ROS는 설치를 한 후, 사용 중인 터미널에서 ROS는 사용하기 위한 방법은 환경 설정은 위한 셋업 파일을 실행

  • 일시적 실행을 위한 명령

    source /opt/ros/noetic/setup.bash
    
  • 영구적인 방법

    echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    


4. 의존 패키지 설치

  • 의존 패키지 설치

    sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
    
  • terminator (다중 터미널 창 관리 위함)

    sudo apt install terminator
    


5. rosdep 초기화

sudo rosdep init
rosdep update


이 때, sudo rosdep init 하는데 아래와 같은 error가 발생한다면

ERROR: default sources list file already exists:
	/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize

아래와 같은 명령어로 파일을 제거하고 다시 명령어 사용

sudo rm /etc/ros/rosdep/sources.list.d/20-default.list



ROS 삭제

삭제가 필요한 경우

wget -c https://raw.githubusercontent.com/qboticslabs/ros_install_noetic/master/ros_uninstall_noetic.sh && chmod +x ./ros_uninstall_noetic.sh && ./ros_uninstall_noetic.sh



ROS workspace 구성

ROS 기반의 프로젝트는 별도의 workspace 폴더를 만들어 구성

아래와 같은 폴더로 구성이 됨

  • src
  • devel
  • build
  • logs


ROS workspace 빌드를 하기 위해서는 catkin 사용


ROS 빌드

  • ROS workspace를 위하여 아래와 같이 폴더 구성

    mkdir -p ~/catkin_ws/src
    
    • catkin_ws가 workspace의 root 폴더
    • 필요한 소스 코드는 src 폴더 아래에 저장
  • 전체 workspace 빌드

    catkin_make
    
    • root 폴더에서 실행

    • 빌드가 되면 build, devel 폴더 생성

  • 소스 코드 사용위한 환경 설정

    source devel/setup.bash
    



ROS Node

ROS에서 node는 어떤 프로그램이 실행하는 하나하나의 단위

즉 실행 가능한 최소 단위의 프로세스를 의미


ROS NODE 실습

  • terminator 실행

    exec dbus-run-session -- bash
    terminator
    
  • 튜토리얼 실습을 위한 ROS 패키지 설치

    sudo apt install ros-noetic-ros-tutorials
    
  • roscore 실행

    roscore
    
    • ROS 기반 시스템에서 전제 조건으로 여겨지는 일부 노드와 프로그램의 집합
    • ROS를 사용할때 가장 먼저 실행해야 함
    • terminal에서 항상 실행하고 있어야 함
  • node list 확인

    rosnode list
    
    • roscore만 실행한 경우에는 /rosout 만 결과로 나옴
  • 예제 노드 (프로그램) 실행

    rosrun [package_name] [node_name]
    rosrun turtlesim turtlesim_node
    

    Screenshot from 2024-04-03 19-52-29

    • 실행 하면 위와 같은 결과 출력
  • node list 확인

    rosnode list
    
    • 위의 거북이 그림을 출력하면 /rosout/turtlesim, 2개의 결과 출력



ROS Topic

ROS TOPIC, Message

간단하게 말하면 어떤 데이터의 단위

Node안에서 데이터를 다른 node와 주고 받을 때, 그 단위를 topic이라고 생각할 수 있음

A node 에서 B node로 ‘helllo’ 라는 라는 문장을 전달하면

A node는 publish 라는 행위를 통해 topic을 보냄

B node는 subscribe라는 행위를 통해 topic을 받음

이 때 message 라는 개념이 등장하는데 topic을 publish, subscribe 할 때 사용되는 ROS의 자료형이라고 생각하면 되고, ROS에서 노드들끼리 서로 topic에 message 발행하여 통신을 주고 받음

node는 topic에 message를 publish, subscribe하여 message 주고 받음



ROS TOPIC 실습

  • roscore와 turtlesim이 실행된 상태로 새로운 터미널에서 키보드로 turtlesim을 조작할 수 있는 node 실행

    rosrun turtlesim turtle_teleop_key
    
    • 위의 명령어를 실행한 터미널에서 화살표로 조작 가능
  • node list 확인

    rosnode list
    
    • /rosout, /teleop_turtle, /turtlesim
  • ROS topic 확인

    • rostopic 명령어를 통한 확인

      rostopic list
      
      • 현재 활성화된 node로 부터 얻을 수 있는 모든 topic 확인 가능
      • /rosout, /rosout_agg , /turtle1/cmd_vel, /turtle1/color_sensor , /turtle1/pose
      rostopic echo /turtle1/cmd_vel
      
      • echo를 통하여 해당 topic으로부터 나오는 값 실시간 확인 가능
    • 시각화를 통한 확인

      sudo apt install ros-noetic-rqt
      sudo apt install ros-noetic-rqt-common-plugins
          
      
      • 시각화를 위함 rqt-graph 설치
      rosrun rqt_graph rqt_graph
      

      Screenshot from 2024-04-03 20-39-15


위의 실습으로 다시 정리를 하자면

ROS topic은 서로 다른 노드 간에 데이터 등의 정보를 주고받을 때 쓰이는 단위라고 생각하는 것이 좋음



ROS bag

ROS bag 실습 1

  • 실습 파일 다운로드

    • https://www.dropbox.com/s/9gofcgfzaa8oyft/ouster_example.bag?dl=0
  • 해당 파일을 실행하기 위해 ouster ros package 설치하여 환경 구성

    mkdir -p ouster_ws/src && cd ouster_ws/src
    git clone https://github.com/ouster-lidar/ouster_example
    cd ..
    catkin_make
    
    • rosbag 파일이 ouster LiDAR를 기준으로 제작이 되어 ouster ros package가 설치되어야 함
  • rosbag 파일 실행

    rosbag play -l ouster_example.bag
    
    • -l : 무한하게 재생하고 싶은 경우, loop를 의미
  • rosbag 파일 정보 확인

    rosbag info 
    
  • rosbag 파일 시각화

    rviz
    
    • rviz는 ROS에서 제공하는 시각화 툴 중 하나



ROS bag 실습 2

  • 실습 파일 다운로드

    • https://ndownloader.figshare.com/files/15571046
  • 다운받은 rosbag 실행

    rosbag play -l lobby_lidar.bag
    
  • bag 파일 정보 확인

    rosbag info lobby_lidar.bag
    
  • VLP16 드라이버 설치

    sudo apt install ros-noetic-velodyne
    mkdir -p velo_ws/src && cd velo_ws/src
    git clone https://github.com/ros-drivers/velodyne.git
    cd ..
    rosdep install --from-paths src --ignore-src --rosdistro noetic -y
    catkin_make
    
    • velodyne을 기반으로 데이터를 취득했기 때문에
  • rosbag 파일 시각화

    rviz
    
    • rosbag이 실행되고 있는 상태에서 rviz를 실행하여 시각화
  • launch 파일 사용을 위한 환경 설정

    source devel/setup.bash 
    roslaunch velodyne_pointcloud VLP16_points.launch 
    
    • velo_ws에서 진행



참고

  1. https://help.ubuntu.com/community/Repositories/Ubuntu
  2. https://wiki.ros.org/ROS/Tutorials/BuildingPackages
  3. https://conceptbug.tistory.com/entry/ROS-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-115-ROS%EC%9D%98-%EB%85%B8%EB%93%9Cnode%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4

  4. https://pcl.gitbook.io/tutorial/part-0/part00-chapter03

카테고리:

업데이트: