2주차 스터디 내용으로 3개의 강의 chapter 4. ROS의 중요컨셉, chapter 5. ROS 명령어, chapter 6. ROS 도구를 수강하였다.
https://youtube.com/playlist?list=PLX-Ur4rl2-qwNB3cD5UAGo-RPe5IBw1pu&feature=shared
[chapter 4 ROS의 중요 컨셉]
-ROS 용어-
Node - 최소 단위의 실행 가능한 프로세서를 말한다.
Package - 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것을 말한다.
Message - 메시지를 이용하여 노드간의 데이터를 주고 받는다.
Topic - 단방향, 연속성을 가진 통신 방법 중 하나.(1:1 통신 이외에도 목적에 따라1:N, N:1, N:N 통신도 가능하다)
Publisher - message를 보내는 주체
Subscriber - message를 수신하는 주체
Service - 양방향, 일회성 통신 방법 (다시 통신하기 위해서는 재접속을 해야함)
Service server - service 응답을 하는 주체
Service client - service 요청을 하는 주체
Action - 중간 피드백이 있는 특징을 가짐, 복잡한, 장시간 걸리는 테스크를 수행할 때 종종 사용함.
Action server - Action 피드백, 결과 전달
Action clinet - Action 목표 전달
-메시지 통신-
메시지 통신은 아래 그림과 같은 동작을 수행한다. 자세한 내용은 아래에서 다루겠다.
마스터 - 각 실행 되는 노드 정보들을 관리하여 노드들의 통신을 관리하는 역할을 함. ($roscore)
서브스크라이버 노드 - 수신 노드, 노드의 이름, Topic의 이름, 정보의 형태, 네트워크 정보등을 마스터에게 전송함. ($rosrun)
퍼블리셔 노드 - 송신 노드, 노드의 이름, Topic의 이름, 정보의 형태, 네트워크 정보등을 마스터에게 전송함.($rosrun)
퍼블리셔 정보 알림 - 마스터를 통해 서브스크라이버 노드에 퍼블리셔 노드의 정보를 보낸다.
퍼블리셔 노드에 접속 요청 - 마스터로부터 받은 퍼블리셔 노드 정보를 이용하여 TCPROS 접속을 요청.
서브스크라이버 노드에 접속 응답 - 접속 응답에 해당하는 자신의 TCP URI 주소와 포트번호를 전송.
TCP 접속 - TCPROS를 이용하여 퍼블리셔 노드와 직접 연결
메시지 전송 - 퍼블리셔 노드는 서브스크라이버 노드에게 메시지를 전송(Topic)
서비스 요청 및 응답 - 1회에 한해 전속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.
예시로 turtlesim package의 경우는 아래와 같다.
-ROS 메시지-
메시지 통신은 토픽, 서비스, 액션, 파라미터라고 말할 수 있다.
토픽, 서비스 액션은 모두 메세지를 사용한다.
단순 자료형이다.(integer, floating point, boolean)
메시지 안에 메시지를 품고 있는 단순한 데이터 구조이다.
메시지들이 나열된 배열과 같은 구조이다.
예시로 아래는 geometry_msgs/Twist에 해당하는 그림이다.
-네임(Name)-
노드, 메시지(토픽, 서비스, 액션, 파라미터)가 가지는 고유의 식별자.
ROS는 그래프라는 추상 데이터 형태를 지원.
글로벌(global) - 문자 없이 네임을 바로 쓰거나 네임 앞에 /를 붙인다.
프리베이트(private) - 네임 앞에 ~를 붙인다.
[chapter 5 ROS 명령어]
ROS 셸 명령어
roscd - changes directory, 지정한 ROS 패키지의 디렉터리로 이동
rosls - lists flies, ROS 패키지의 파일 목록 확인
rosed - editor, ROS 패키지의 파일 편집
roscp - copies files, ROS 패키지의 파일 복사
rospd - ROS 디렉터리 인덱스에 디렉터리 추가
rosd - ROS 디렉터리 인덱스 확인
ROS 실행 명령어
roscore - master(ROS 네임 서비스), rosout(로그 기록), parameter server(파라미터 관리) 3가지 기능 모두 수행
rosrun - 노드 실행
roslaunch - 노드 여러개 실행 및 실행 옵션 설정
rosclean - ROS 로그 파일을 검사하거나 삭제
ROS 정보 명령어
rostopic - ROS 토픽 정보 확인
rosservice - ROS 서비스 정보 확인
rosnode - ROS 노드 정보 확인
rosparam - ROS 파라미터 정보 확인, 수정
rosbag - ROS 메시지 기록, 재생
rosmsg - ROS 메시지 정보 확인
rossrv - ROS 서비스 정보 확인
rosversion - ROS 패키지 및 배포 릴리즈 버전 정보 확인
roswtf - ROS 시스템 검사
ROS catkin 명령어
catkin_create_pkg - 패키지 자동 생성
catkin_make - 캐킨 빌드 시스템에 기반을 둔 빌드
catkin_eclipse - 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경
catkin_prepare_release - 릴리즈 할때 사용되는 로그 정리 및 버전 태깅
catkin_generate_changelog - 릴리즈 할 때 CHANGELOG.rst 파일 생성 또는 업데이트
catkin_init_workspace - 캐킨 빌드 시스템의 작업 폴더 초기화
catkin_find - 캐킨 검색
ROS 패키지 명령어
rospack - ROS 패키지와 관련된 정보 보기
rosinstall - ROS 추가 패키지 설치
rosdep - 해당 패키지의 의존성 파일 설치
roslocate - ROS 패키지 정보 관련 명령어
roscreate-pkg - ROS 패키지 자동 생성
rosmake - ROS 패키지를 빌드
[chapter 6 ROS 도구]
RViz
-ROS의 3D시각화 툴
-로봇 외형 표시와 동작을 표현
-내비게이션
-매니퓰레이션
-원격 제어
아래는 RViz로 로봇이 활동하는 공간을 모델링 한 예시이다.
RViz 설치 및 실행
$sudo apt-get install ros-kinetic-rviz 명령어를 통해 RViz를 설치해주고,
$rivz 명령어를 통해 아래와 같이 RViz를 실행시켜 보았다.
아래 그림은 Rivz화면 구성을 간략하게 나타낸 그림이다.
Rviz를 이용하면 센서 및 로봇 관련 데이터 시각화가 매우 편리하다.
RQT
플러그인 방식의 ROS의 종합 GUI툴
$sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-commom-plugins 명령어를 이용하여 RQT를 설치 및 실행 시켜보았다.
다음은 RQT에 대한 간단한 실습 예시이다.
이전 시간에 실습했던 turtlesim을 통한 rqt_graph 명령어를 이용해 노드간에 어떤 메시지를 주고 받는지 확인해보았다.
이는 아래 그림과 같다. 노드가 많아 졌을 때 유용하다.
아래는 $rqt_plot /turtle1/pose/ 명령어를 이용하여 하여 거북이의 움직임을 그래프로 그리는 것이다.
RQT를 이용하면 GUI 형태로 ROS 이용이 가능하고, GUI Tool 제작이 간단해진다.
3D Simulator: Gazebo
로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터이다. ROS와 연동하기 쉽다는 장점도 있다.
아래는 Gazebo 예시이다.
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] 이하람 #2주차 - ROS 명령어 및 도구 (0) | 2024.02.04 |
---|---|
[2024 ROS 스터디] 박재훈 #2주차 - ROS 명령어 및 도구 (0) | 2024.02.04 |
[2024 ROS 스터디] 민경서 #2주차 - ROS 명령어 및 도구 (0) | 2024.02.04 |
[2024 ROS 스터디] 이준호 #2주차 - ROS 명령어 및 도구 (0) | 2024.02.04 |
[2024 ROS 스터디] 성창엽 #2주차 - ROS 명령어 및 도구 (0) | 2024.02.04 |