본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 조영상 #2주차 - ROS 도구&명령어

반응형

*강의 출처 : 로보티즈(표윤석 님)

스터디 내용 중 혹시 틀리거나 잘못된 부분이 있을 때 정말 가감 없이 지적해 주시면 부족한 제가 성장하는데 큰 도움이 될 것 같습니다. 감사합니다!

이번주에 해야 할 실습도 생각만으로는 매우 간단하게 따라 하기만 하면 끝날 줄 알았지만 ROS는 그리 쉬운 친구가 아니었다....

그럼에도 책상 앞에 앉아 인내심 수양을 시작해 보기로 했다.

주요 실습내용을 제외한 나머지 필기 내용은 개인 블로그에 적어두었습니다.

 

조영상 개인 블로그 : https://jomedia.tistory.com/8 

 

[ROS 강의 필기 노트]Chapter 4,6

*강의 출처 : 로보티즈(표윤석 님) Chapter 5의 명령어는 8분짜리 영상이고 강의자료에 주요 명령어들에 대한 설명들이 적혀있으므로 강의필기를 생략했다. Chapter 4 새로운 개념을 알기 이전에 우리

jomedia.tistory.com

rviz 실행

1. 3D 뷰인데 3차원 공간상에 내가 만약 로봇을 모델링한 것이 있다면 로봇이 보이게 될 것이다.
2. 디스플레이 옵션 : 색깔을 거리별로 변하게 할지, 점의 크기는 어떻게 할지 등등..
3. 생략
4. 툴 : 자주 사용 되는 것 --> 모바일 로봇에서 많이 쓰이는데, 2D Pose Estimate(현재 로봇의 위치를 대략적으로 추측하는 것), 2D Nav Goal(원하는 목적지가 있을 때 이 메뉴를 클릭하고 화면상에서 화살표를 지정하면 된다.)
5. 뷰형태 : 위에서 본 것 특정 축을 따라가서 보는 것, 등등
6. 실제시간과 시뮬레이터의 시간을 표시하는 것

디스플레이의 종류(ADD) 강의자료에 자세히 나옴)

RQT에 대한 설명 : 강의자료 그대로 빠르게 말하심

RQT의 사용 예시

웹브라우저를 띄워 볼 수 있고 토픽을 직접 보낼 수도 있다.

그리고 강의 초반에 turtlesim노드에 cmd_vel 메시지를 보낼 때 선속도와 회전속도를 조작시킬 수도 있다.

또한 데이터를 그래프(plot) 형태로 표현할 수 있다.

즉, 한마디로 코드로 명령할 수 있는 실행을 사용자가 보기 쉬운 GUI형태로 조작하기 편리하게 해 준다.(리눅스에서 파일을 접근할 때 터미널에서 ls 찾아서 하기도 하지만 어르신들은 폴더 아이콘 눌러서 여는 게 더 편하듯이 말이다.) 또한 개발자가 직접적으로 파악하기 힘든 raw 데이터 혹은 숫자 같은 것들을 시각화해 준다.

RQT 실습


처음에 강의에서 설명한 대로 uvc_camera를 사용하면 실행이 안된다. 오류 문구로는 uvc_camera 패키지를 찾을 수 없다고 나오는데 해당 오류에 대해 구글링을 해본 결과 ROS Melodic버전에서 더 이상 uvc_camera를 지원하지 않기 때문에

usb_cam을 사용해야 한다고 나와있었다.

https://blog.naver.com/PostView.nhn?blogId=angelkim88&logNo=221631642641

때문에 usb_cam을 활용하여 실습을 진행하였다.

이때 주의해야 할 사항이 있다.

 

1. 위의 포스트에 자잘한 오타가 있다. (audo --> sudo)

2. usb설정에서 카메라가 노트북에 연결이 되어있는 상태인지 확인해 볼 필요가 있다.
https://webnautes.tistory.com/1371

가상머신 상에서 웹캠을 연동하지 않았을 때(Before)

 

가상머신 상에서 웹캠을 연동했을 때(After)

만약 우분투를 듀얼부팅으로 설치했다면 2번의 과정은 생략해도 된다.

 

3. https://blog.naver.com/PostView.nhn?blogId=angelkim88&logNo=221631642641
해당 포스트에서 설명하는 대로 usb_cam 패키지 설치 및 실행

(추가적으로 만약 두 개의 카메라를 사용하거나 내장 웹캠을 사용하지 않는 경우 usb_cam-test.launch 파일에서 실행하는 어댑터를 /dev/video숫자 부분을 수정해 주어야 한다. 이때 만약 내장 웹캠만 연결되어있을 경우

 

$ ls /dev/video*

 

에서 단순히 video0만 나타날 것이고

 

추가적으로 카메라를 usb 단자를 통해 연결시켰을 경우 video0 video1 video2....등등으로 카메라의 개수만큼 나올 것이다. 

 

자동으로 설정이 되는 경우도 있지만 가끔 카메라 관련 드라이버를 설치해줘야 하는 경우도 있으니 유의해야 한다.)

 

 

4. 이 때 rosrun usb_cam usb_cam_node를 실행했을 때 실행가능한 파일이 아니라면서

 

Couldn't executable 어쩌고 하면서 오류 메세지가 나온다면 

 

$ source /opt/ros/melodic/setup.bash 

 

라는 명령을 해줘야 한다. 우리가 처음에 ros를 설치할 때 환경설정으로 .bashrc 파일에 해당 설정이 자동으로 항상 쉘이 켜질 때마다 실행하도록 설정해 두었었지만 자동으로 실행되지 않는 경우가 있다. 

 

위의 명령을 실행 한후 다시 usb_cam_node를 실행하면 정상적으로 작동할 것이다.  


그리고 반드시 sudo apt update와 sudo apt upgrade를 해줘야 한다. 그리고 우분투 재부팅

위의 각각의 분할된 터미널을 보면

1행 1열의 터미널에서 roscore를 실행시켰고

1행 2열에는 usb_cam_node를 실행시킴으로써 카메라를 작동시켰다.

1행 4열에는 turtlesim_node를 실행시키고

2행 2열에는 rqt_image_view를 실행시켰다. rqt_image_view는 위에서 포스카 파이팅이라는 실습을 통해서도 확인했듯이 usb_cam노드로 부터 받은 raw데이터를 시각화시켜서 보여주게 된다.

2행 1열에는 echo 명령어를 통해 현재 어떤 raw데이터 값이 전달되고 있는지 확인할 수 있게 해 준다.

2행 3열에는 현재 통신이 이뤄지고 있는 topic들은 어떤 것들이 있는지 topiclist라는 명령을 통해 그 리스트들을 나열하여 볼 수 있다.

1행 3열에는 2행 3열에서 확인한 topiclist 중에 내가 알고자 하는 topic에 대한 정보를 알 수 있도록 하였는데 이 부분이 강의 내용과 조금 달랐다. 왜냐하면 나는 uvc_camera가 아닌 usb_cam을 사용하기 때문이다. 때문에 rostopic info /에 대한 명령도 조금 다를 수밖에 없었는데 이를 파악하기 위해 두 번 탭을 사용하였다.


2행 4열에는 teleop_key 노드를 실행시켰고

2행 5열에는 rqt_graph를 사용하여 현재 노드들의 통신 관계를 시각화하였다.

rqt_plot 실습


거북이의 속도정보를 그래프로 받아볼 수 있다.

rqt_bag 실습


Gazebo 설명

1. Gazebo는 물리엔진(ode(open dynamics engine, 불릿엔진 등등)을 탑재하여 실제 현상과 유사한 결과를 도출해 낼 수 있도록 시뮬레이션해 주는 도구인데 이때 물리엔진은 상황에 따라 유체, 충돌등등과 같이 본인이 중점적으로 시뮬레이션하고자 하는 환경에 대해 좀 더 자세히 묘사할 수 있는 엔진을 사용하면 된다. (여러 개의 물리엔진을 섞어서도 사용가능) https://ko.wikipedia.org/wiki/%EB%B6%88%EB%A6%BF_%EB%AC%BC%EB%A6%AC_%EC%97%94%EC%A7%84

 

불릿 물리 엔진 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

2. 다르파 챌린지(DARRPA)를 통해 더욱 발전됨 이후 빠르게 업데이트됨. 기하급수적 발전.
3. 굳이 ros와 연동하지 않고도 사용할 수도 있지만 ros와 시너지를 갖고 있음(호환성 좋음)
4. 각종센서들이 이미 플러그인 되어있음.(나무 사막환경 등)
5. 센서의 노이즈를 조정시킬 수 있음( 실제 센서에는 노이즈가 있기 때문)
6. urdf를 불러와서 시뮬레이션시킬 수 있다.
7. 터미널뿐만 아니라 GUI로도 잘되어있다.

이기종 디바이스 간의 통신(라즈베리파이로 실습)

집에 갖고 있는 컴퓨터가 노트북과 라즈베리파이(Raspberry pi 4) 밖에 없어서 라즈비안 운영체제가 설치되어 있는 라즈베리파이에 ROS를 설치한 후 이기종 디바이스 간의 통신을 실습해 보았다.

라즈베리파이에 ros를 설치할 경우 workspace의 파일 이름이 다르기 때문에 환결설정에 있는 설명 그대로 하게 되면 bashrc 설정에 오류를 겪게 된다. 때문에 다음과 같이 변경해 준다. (경로에 해당 파일이 없다고 해서 파일을 직접 확인해 본 결과 우분투에서 설치했던 파일이름과 달라서 이대로 변경해 주니 오류가 사라졌다.)


내 노트북의 카메라에서 촬영되는 영상을 라즈베리파이에서 확인할 수 있도록 하려고 했다.

우선, 내 컴퓨터의 ip주소를 알아야 하는데 내 노트북에는 가상환경 기반으로 ros가 설치되어 있기 때문에 바로 ip 주소를 확인할 수 없었다.(ifconfig 명령 시 오류)

때문에 다음의 명령을 통해 ifconfig가 동작하도록 해주어야 한다.

$ sudo apt-get install net-tools

이렇게 했을 경우 이제 비로소 ifconfig 명령이 통한다.

근데 라즈베리파이에서 ros관련 도구들이 실행이 잘 안 됐었다. 안드로이드 폰도 없어서 일단 실습은 여기까지 해보기로 했다.

앞으로 안드로이드로 실습하는 것에 대한 걱정으로 가상머신에 안드로이드 운영체제를 설치하는 도중.. 어차피 가상머신에는 imu센서가 없다는 걸 깨닫고 설치를 중단하려는 내 손을 막을 수 없었다....


다음 실습은 어떤 오류들이 기다리고 있을까.... 기대된다...!!

반응형