본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 조성준 #2주차 - ROS 명령어 및 도구

반응형

이번 주차 과제는 4강 ROS의 중요컨셉, 5강 ROS 명령어, 6강 ROS도구를 듣고 공부하는 것이다. 시작을 활기차게 시작해야겠다.

Chapter 4. ROS의 중요컨셉

이번 강의에서는 ROS의 주요 개념(용어)들과 Message 통신의 개념들에 대해 배웠다.  

 Node : 최소 단위의 실행 가능한 프로세서를 가리키는 용어로 하나의 실행가능한 프로그램을 말한다. ROS에서는 최소한의 실행단위로 프로그램을 나누어 작업하게 되며, 각 노드는 메시지 통신으로 데이터를 주고받게 된다.

 Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것으로, 패키지의 묶음은 메타 패키지라고 하여 따로 분리한다.

 Message : 메시지를 통해 노드 간의 데이터의 송, 수신을 하게 된다. RAW 데이터의 송수신을 메시지를 통해 하게 되며, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.

 

Message 통신

 Topic : 단방향 통신으로 연속적인 통신이다. 1:1, 1:N, N:1, N:N의 통신들이 가능하다.

 

Publisher : 메시지를 보내는 노드   Subscriber : 메시지를 받는 노드

 Service : 양방향 통신이고 일회성이다. 한 번 통신이 종료되면 다시 시작해야 한다.

 

Service server : 서비스에 응답   Service client : 서비스를 요청

 

 Action : 자주 쓰이지는 않지만, 복잡한 테스트에서 사용할 수 있다. 중간 액션 피드백을 전달해 주기 때문에 테스트하기에 적합하다. 수행시간이 오래 걸린다는 단점이 있지만, 복잡하거나 중간 피드백 결과가 필요한 경우에 사용하면 좋다.

 

 

Message 통신의 개념

 ROS의 기본이 되는 기술적 포인트는 노드 간의 메시지 통신이 가능하다는 점이다. 메시지 통신 과정은 다음과 같다.

 1. 마스터 구동 : $ roscore : ros를 사용하기 위해서 꼭 실행 각 노드들의 정보를 관리한다. 노드들의 통신을 연결시켜 주는 역할을 한다. 서버 클라이언트 시스템의 구동 각 노드들을 매칭해서 정보의 전달을 가능하게 해 준다..

 2. 서브스크라이버 노드 구동 : $ rosrun 패키지이름 노드이름 서브스크라이버 구동 시 마스터에게 노드의 이름, 토픽의 이름, 메시지의 형태 (카메라, 모터 등), ip번호, 포트번호등의 정보를 전달한다.

 3. 퍼블리셔 노드 구동 : $ rosrun 패키지 이름 노드이름 서브스크라이버 구동 시와 같이 노드의 정보를 마스터에게 보낸다.

 4. 퍼블리셔 정보 알림 : 마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알린다.

 5. 퍼블리셔 노드에 접속 요청 : 마스터로부터 받은 퍼블리셔 정보를 이용하여, TCPROS 접속을 요청한다.

 6. 서브스크라이버 노드에 접속 응답 : 접속 응답에 해당되는 자신의 TCP URL 주소와 포트 번호를 전송한다.

 7. TCP접속 : TCPTOS를 이용해 퍼블리셔 노드와 직접 연결된다.

 8. 메시지 전송 : 발행자 노드는 서브스크라이버 노드에게 메시지를 전송 (마스터는 거의 필요가 없다.)

 9. 서비스 요청 및 응답 : 토픽방식에서는 접속을 따로 끊지 않으면  지속적으로 메시지를 전달한다. 서비스는 토픽과 달리 1회에 한해 접속하고 서비스 요청 및 서비스 응답을 수행한 후 서로 간의 접속을 끊는다.

 

말로만 봐서는 이해가 잘 안될 수 있지만, 강의를 보면 이미 실습해본 turtlesim 패키지를 바탕으로 설명해주시기 때문에 걱정할 것 없다. Master는 결혼정보회사 중개인 나머지 노드들은 그 사용자라고 생각하면 편하다. 서로 모르는 상태에서 중개인을 통해 알게 되고, 알게 된 이후에는 둘이서 따로 연락하는 그런 방식이다.

 

파라미터 서버 : 마스터의 한 기능으로 글로벌 변수 같은 거라고 하는데, 아직 잘 모르겠다.

 

네임(Names) : 같은 노드를 여러 번 사용하거나 할 때 노드의 이름, 메시지의 이름을 관리하기 위해 사용된다. 이름이 이미 정해진 노드나 메시지의 이름을 변경시켜서 보내거나 실행할 때 사용한다.

 

Chapter 5. ROS의 명령어

 ros의 명령어들은 Linux의 명령어들과 유사한 부분이 많아서 외워두면 도움이 될 것 같다.

▶ roscd : 지정한 ROS 패키지의 디렉터리로 이동한다.

▶ rorls : ROS 패키지의 파일 목록을 확인한다.

▶ rosed : ROS 패키지의 파일을 편집한다.

▶ roscp : ROS 패키지의 파일을 복사한다.

▶ rospd : ROS 디렉터리 인덱스에 디렉터리를 추가한다.

▶ rosd : ROS 디렉터리의 인덱스를 확인한다.

▶ roscore : master를 실행, 로그 기록을 확인, 파라미터를 관리한다.

▶ rosrun : 노드를 실행한다.

▶ roslaunch : 노드를 여러 개 실행 및 실행 옵션을 설정한다.

▶ rosclaen : ROS 로그 파일을 검사하거나 삭제한다.

▶ rostopic : ROS 토픽 정보를 확인한다.

▶ rosservice : ROS 서비스 정보를 확인한다.

▶ rosnode : ROS 노드 정보를 확인한다.

▶ rosparam : ROS 파라미터 정보를 확인하고 수정한다.

▶ rosbag : ROS 메시지를 기록, 재생한다.

▶ rosmsg : ROS 메시지 정보를 확인한다.

▶ rossrv : ROS서비스 정보를 확인한다.

▶ rosversion : ROS 패키지 및 배포 릴리즈 버전 정보를 확인한다.

▶ roswtf : ROS 시스템 검사

이외의 많은 명령어들이 있다. 

https://wiki.ros.org/ 에 가면 많은 정보를 찾을 수 있다.

 

Documentation - ROS Wiki

ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. ROS is licensed under

wiki.ros.org

 

Chapter 6. ROS 도구

이번 강의에서는 ROS개발에 효율성 향상에 도움이 되는 개발 도구들에 대해 배운다. 

Command-Line Tools

GUI 없이 ROS에서 제공되는 명령어로만 로봇 액세스 및 거의 모든 ROS 기능을 소화한다. 

 

Rviz (ROS Visualization Tool)

 로봇의 모델링 및 경로설정이 가능한 툴이다. ROS의 센서들의 값을 3D로 시각화할 수 있다.

3D 시각화, 로봇 외형의 표시와 계획된 동작을 표현, 내비게이션, 매니퓰레이션, 원격제어 등의 기능을 수행할 수 있다. 이미 갖춰진 매우 강력한 툴이다. 만약 좀 다른 방식을 원한다면, 이미 다 오픈소스기에 바꾸기에도 용이하다. 다른 시각화 툴과 달리 로봇에 특화되어 있어 사용하기 편한다.

 

 

RQT

 플러그인 방식의 ROS 종합 GUI 툴이다. 웹 브라우저 접속, 특정 메시지 보내기, 로봇의 병진, 회전 속도 등에 사용가능하다. 플러그인은 어떤 특정한 하나의 문제를 해결하기 위한 컴포넌트로 사람들이 자주 사용할 만한 기능들을 직접 일일이 구현할 필요 없이 필요한 기능만 그때그때 찾아서 사용할 수 있도록 만들어 놓은 것이라고 한다. RQT가 지원하는 플러그인들은 액션, 구성, 내성, 로깅 등 다양한 플러그인들이 있다. 오늘 실습은 rqt_image_view, rqt_graph를 사용해 보는 것이다.

왼쪽 상단은 rqt_plot 실습이다. - rqt_plot 실습은 오류없이 잘 진행되서 좋았다. 오른쪽 상단은 rqt_graph 실습인데, uvc_camera가 안되서 좀 힘들었다. 하단은 rqt_image_view 실습인데, 마찬가지로 uvc_camera가 안되서 고생좀 했다.

다른 실습에는 문제가 없었지만, uvc_camera 같은 경우에는 실행이 되지 않았다. 나의 경우에 다 깔려 있다는 강의자 님의 말씀과는 달리 uvc_camera와 joy패키지가 안 깔아져 있어서 문제가 발생했었다. 오류로그를 구글에 적어서 이것저것 살펴보다가 한 블로그를 발견하여 해결할 수 있었다. 아래의 블로그가 도움이 되었다. kinetic 버전 이후로는 따로 직접 설치를 진행해 줘야 하는 모양이다.

https://booiljung.github.io/technical_articles/robotics/ros/ros_kinetic_uvc_camera.html

 

https://booiljung.github.io/technical_articles/robotics/ros/ros_kinetic_uvc_camera.html

Top UVC Camera on ROS melodic 설치 UVC 카메라 패키지 설치 sudo apt install ros-melodic-uvc-camera 이미지 관련 패키지 설치 sudo apt install ros-melodic-image-* sudo apt install ros-melodic-rqt-image-view 실행 첫 터미널에서 두번

booiljung.github.io

Gazebo

 Gazebo는 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터이다. 최근에 나온 오픈 진영 시뮬레이터 중 가장 좋은 평가를 받고 있고, 미국 DARPA Robotics Challenge의 공식 시뮬레이터로 선정되어 개발에 더욱 박차를 가하고 있는 상황이다. ROS에서는 그 태생이 Player/Stage, Gazebo를 기본 시뮬레이터로 사용하고 있어서 ROS와의 호완성도 매우 좋다.

 

이렇게 2주 차 과제가 끝났다. 이번 주는 설연휴가 껴있는데, 다들 새해 복 많이 받으시기를 바라며 2주차 과제를 끝냅니다.

 

 

반응형