[자율주행] ROS 공부

­윤다빈·2022년 8월 9일
1

[Devlog] - 자율주행

목록 보기
5/6

참고 자료
https://www.youtube.com/watch?v=5RBqGt1hvpM&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=5


ROS 용어 정리

  1. master
    노드와 노드 사이의 연결과 메시지 통신을 위한 네임버서와 같은 역할
    master 없이는 노드 간의 접속, 토픽과 서비스 같은 메시지 통신 불가
    ROS_MASTER_URI 변수에 기재된 URI 주소와 포트를 가짐
    기본 값으로 URI 주소는 현재 로컬 IP, 포트는 11311
  2. 노드
    ROS에서 실행되는 최소 단위의 프로세서
    하나의 목적에 하나의 노드가 가장 적합함
    재사용이 쉽게 구성하여 개발하기를 추천 (각 프로그램을 최대한 세분화 시켜서 작은 노드들을 이용하기)
    노드는 구동과 함께 마스터에 노드 이름과 publisher, subscriber, service server, service client에서 사용하는 토픽 및 서비스 이름, 메시지 형태, URI 주소와 포트를 등록
    이 정보들을 기반으로 각 노드는 노드끼리 토픽과 서비스를 이용하여 메시지를 주고받음
  3. 패키지
    ROS를 구성하는 기본 단위
    ROS의 응용 프로그램은 패키지 단위로 개발됨
    패키지는 최소한 하나 이상의 노드를 포함하거나 다른 패키지의 노드를 실행하기 위한 설정 파일들을 포함함
    각종 프로세스를 구동하기 위한 ROS 의존성 라이브러리, 데이터셋, 설정 파일 등 패키지에 필요한 모든 파일을 포함
  4. 메타패키지
    공통된 목적을 지닌 패키지들의 집합
    (ex. Navigation 메타 패키지 : AMCL, DWA, EKF, map_server 등의 패키지로 구성)
  5. 메시지
    노드는 메시지를 통해 노드 간 데이터를 주고받음
    메시지는 integer, floating, point, boolean과 같은 변수 형태
    메시지 안에 메시지를 품고 있는 간단한 데이터 구조나 메시지들이 나열된 배열과 같은 구조도 사용할 수 있음
    단방향 메시지 송수신 방식의 토픽과, 양방향 메시지 요청/응답 방식의 서비스를 이용
  6. 토픽
    publisher 노드가 하나의 이야깃거리에 대해서 토픽으로 마스터에 등록한 후, 토픽에 대한 이야기를 메시지 형태로 publish함
    이 토픽을 수신받기를 원하는 subscriber 노드는 마스터에 등록된 토픽의 이름에 해당하는 publisher 노드의 정보를 받음
    이 정보를 기반으로 subscriber 노드는 publisher 노드와 직접 연결하여 메시지를 토픽으로 송수신함
  7. publish / publisher
    publish는 토픽의 내용에 해당하는 메시지 형태의 데이터를 송신하는 것
    publisher 노드는 publish를 수행하기 위하여 토픽을 포함한 자신의 정보들을 마스터에 등록
    subscribe를 원하는 subscriber 노드에 메시지 보냄
    publisher는 이를 실행하는 개체로써 노드에서 선언하며 하나의 노드에서 복수로 선언할 수도 있음
  8. subscribe / subscriber
    subscribe는 토픽의 내용에 해당하는 메시지 현태의 데이터를 수신하는 것
    subscriber 노드는 subscribe를 수행하기 위하여 토픽을 포함한 자신의 정보들을 마스터에 등록, 구독하고자 하는 토픽을 publish하는 publisher 노드의 정보를 마스터로부터 받음
    (=> 마스터에서 정보를 주고받는 노드들의 정보를 확인할 수 있음)
    subscriber는 이를 실행하는 개체로써 노드에서 선언하며 하나의 노드에서 복수로 선언할 수도 있음

publish와 subscirbe 개념의 토픽 통신 방식은 비동기 방식
-> 필요에 따라서 주어진 데이터를 송수신하기에 적합
한 번의 접속으로 지속적인 메시지를 송수신함 -> 지속해서 메시지를 발송해야하는 센서 데이터에 적합

  1. service
    서비스 메시지 통신은 특정 목적의 작업에 해당되는 서비스를 요청하는 서비스 클라이언트와 서비스 응답을 담당하는 서비스 서버 간의 동기적 양방향 서비스 메시지 통신임
  2. service server
    서비스 서버는 요청을 입력으로 받고, 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할
    요청과 응답은 모두 메시지로 되어 있음
    서비스 요청을 받으면 지정된 서비스를 수행한 다음 그 결과를 서비스 클라이언트에 전달
    서비스 서버는 정해진 명령을 받아 수행하는 노드에 사용됨
  3. 파라미터
    ROS에서의 파라미터는 노드에서 사용되는 파라미터를 말함
    ex. 윈도우 프로그램에서 *ini 설정 파일과 같다고 생각하면 됨
    디폴트로 설정값들이 지정되어 있고, 필요에 따라 외부에서 읽거나 쓸 수 있음
    특히 외부에서 쓰기 기능을 이용하여 상황에 따라 설정갑을 실시간으로 바꿀 수 있음
    예를 들어 외부 장치와 연결되는 PC의 USB 포트나 카메라 캘리브레이션 값, 모터 속도나 명령어들의 최댓값과 최솟값 등의 설정을 지정할 수 있음
  4. 파라미터 서버
    파라미터 서버는 패키지에서 파라미터를 사용할 때, 각 파라미터를 등록하는 서버를 말함
    파라미터 서버는 마스터의 한 기능이기도 함

ROS 명령어

ROS 셸 명령어

(터미널에 쓰면서 사용할 수 있는 명령어)

  1. roscd
    ros+cd(changes directory)
    : 지정한 ros 패키지의 디렉토리로 이동
  2. rosls
    ros+ls(lists files)
    : ros 패키지의 파일 목록 확인

ROS 실행 명령어 !!중요

  1. roscore
    : master (ROS 네임 서비스)
    rosout (로그 기록)
    parameter server (파라미터 관리)

  2. rosrun
    : 노드 실행

  3. roslaunch
    : 노드를 여러 개 실행 및 실행 옵션 설정

  4. rosclean
    : ROS 로그 파일을 검사하거나 삭제

ROS 정보 명령어 !!중요

  1. rostopic
    : ROS 토픽 정보 확인

  2. rosservice
    : ROS 서비스 정보 확인

  3. rosnode
    : ROS 노드 정보 확인

  4. rosparam
    : ROS 파라미터 정보 확인, 수정

  5. rosbag
    : ROS 메시지 기록, 재생

  6. rosmsg
    : ROS 메시지 정보 확인

  7. rossrv
    : ROS 서비스 정보 확인

  8. rosversioin
    : ROS 패키지 및 배포 릴리즈 버전 정보 확인

  9. roswtf
    : ROS 시스템 검사

catkin 명령어

: ros의 컴파일, 빌드와 관련된 시스템
catkin 명령어를 통해 실행하고

  1. catkin_create_pkg
    : 패키지 자동 생성

  2. catkin_make
    : catkin 빌드 시스템에 기반을 둔 빌드

ROS 패키지 명령어

  1. rospack
    : ROS 패키지와 관련된 정보 보기
  2. rosinstall
    : ROS 추가 패키지 설치
  3. rosdep
    : 해당 패키지의 의존성 파일 설치

ROS 도구

  1. RViz (ROS Visualization Tool)
    : ROS의 3D 시각화 툴
    - 센서 데이터의 시각화 (레이저 거리 센서의 거리 데이터)
    - Depth Camera의 포인트 클라우드 데이터
    - 카메라의 영상 데이터
    : 내비게이션, 매니퓰레이션, 원격 제어 ...

ROS 기본 프로그래밍

기본 규칙

catkin 프로그램 만든 후 package.xml 수정

<?xml version="1.0"?>
<package format="2">
  <name>detect_stopLines</name>
  <version>0.1.0</version>
  <description>The detecting system to stop the car when detects the stop line</description>
  <maintainer email="dabeen@todo.todo">dabeen</maintainer>
  <license>Apache License 2.0</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="dabeen@todo.todo">dabeen</author>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>
profile
Web-Front / SW-AI 개발자

0개의 댓글