devskim blog
Search
🐢

ROS 환경 구축 & 기본 정리

sections
Tags
ROS
Created
Mar 27, 2023 06:08 AM
Last Updated
Jul 30, 2023 09:49 AM
 
 
 

1. ROS

1. 개념

  • 로봇 소프트웨어를 개발하는데 필요한 소프트웨어의 집합체
  • 각종 센서와 모터를 프로그래머가 편하게 사용할 수 있도록 지원
  • 표준화된 통신 프로토콜을 따르는 이기종간의 메시지 교환이 가능
  • 통신은 토픽의 발행 및 구독 기반의 메시지 교환 형식으로 진행
 

2. 용어

  • 마스터 노드 사이의 통신을 총괄 관리(ROS Core)
  • 노드(node) 실행 가능한 최소 단위의 프로세스으로서 토픽을 주고 받는 통신 주체
  • 토픽(topic) 노드간에 통신할 수 있는 채널 (일방적이거나 지속적, 1:1과 N:N 통신 가능)
  • 메시지(message) 통신되는 실제 데이터
  • 발행자 토픽을 만들어 보내는 노드
  • 구독자 토픽을 받는 노드
  • 패키지(package) 하나 이상의 노드와 노드실행을 위한 정보 등을 묶어놓은 것
 
 

2. ROS 설치

  • 설치 이후에 roscore를 입력하여 정상적으로 작동하는지 확인해본다
    • notion image
 
 

3. 워크스페이스 생성

  • 원하는 이름으로 워크스페이스를 생성 후 빌드한다
    • 코드를 불러오는 중 입니다 ...
      notion image
  • .bashrc 파일에 다음의 내용을 추가해준 뒤, source ~/.bashrc로 설정을 업데이트한다
    • 코드를 불러오는 중 입니다 ...
  • 환경변수 목록을 확인하기 위해 printenv | grep ROS을 입력한다
    • notion image
 
 

4. turtle_sim 예제 실행

  • 터미널은 4개의 영역으로 나눈 뒤에, 각각 다음의 명령어를 실행한다
    • notion image
  • roscore 마스터의 실행
  • rosrun turtlesim turtlesim_node turtlesim 노드 실행
  • rosrun turtlesim turtle_teleop_key 키보드로 turtlesim를 제어할 수 있는 노드 실행
  • 다음의 명령어를 실행할 수 있다
    • rqt_graph 시각적으로 노드 및 토픽 흐름 확인하기
      • notion image
    • rosnode list 노드 목록 확인
      • notion image
    • rostopic list 토픽 목록 확인
      • notion image
    • rostopic list -v 토픽 목록 자세히 보기
      • notion image
    • rostopic echo /turtle1/cmd_vel 특정 토픽의 메시지 리스닝하기
      • notion image
    • rostopic type /turtle1/cmd_vel 특정 토픽의 메시지 타입 보기
      • notion image
    • rosmsg show geometry_msgs/Twist 특정 메시지의 형식 보기
      • notion image
    • rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 1회성으로 토픽을 발행해보기
      • notion image
    • rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 지속적으로 토픽을 발행해보기
      • notion image
 
 

5. 커스텀 패키지 제작

1. 패키지 생성

  • 아래의 명령어로 새로운 패키지를 생성한다
    • 코드를 불러오는 중 입니다 ...
  • 아래의 명령어로 패키지가 제대로 생성되었는지 확인한다
    • rospack list | grep init_pkg
      • notion image
    • rospack find init_pkg
      • notion image
    • rospack depends1 init_pkg
      • notion image

2. 파일 작성

  • ~/ros_ws/src/init_pkg/src 폴더 하위에 talker.pylistener.py 작성
    • 코드를 불러오는 중 입니다 ...코드를 불러오는 중 입니다 ...
  • cpp 관련 코드는 다음과 같이 작성하면 된다
    • 코드를 불러오는 중 입니다 ...코드를 불러오는 중 입니다 ...
  • 스크립트를 실행해서 정상적으로 진행하는지 확인한다
    • python talker.py
      • notion image
    • python listener.py
      • notion image
 
 

6. 실행

1. rosrun를 통한 실행

  • chmod +x *.py로 해당 파일에 실행권한을 추가한 후, ll 명령어로 확인한다
    • notion image
  • 위에 한 것과 같이, 터미널을 4개 영역으로 나누어 실행한 뒤 각각 명령어를 입력한다.
    • roscore 마스터의 실행
    • rosrun turtlesim turtlesim_node turtlesim 노드 실행
    • rosrun init_pkg talker.py 거북이를 회전하게 만드는 노드 실행행
    • rosrun init_pkg listener.py /turtle1/pose 정보를 받아오는 노드 실행행

2. roslaunch를 통한 실행

  • ~/ros_ws/src/init_pkg/launch 폴더 생성 후 talk-listen.launch 작성
    • 코드를 불러오는 중 입니다 ...
  • roslaunch init_pkg talk-listen.launch로 실행
    • notion image

3. param를 적용한 roslaunch 실행

  • ~/ros_ws/src/init_pkg/launch 폴더 하위에 talk-listen-param.launch 작성
    • 코드를 불러오는 중 입니다 ...
  • ~/ros_ws/src/init_pkg/src 폴더 하위에 talk_param.py 작성
    • 코드를 불러오는 중 입니다 ...
  • chmod +x talk_param.py로 실행 권한 주기
  • roslaunch init_pkg talk-listen-param.launch로 실행
    • notion image
 
 
NEXTROS 관련 명령어