2020년도 국민대학교 기계공학부에서 제공하는 로봇 AI 특강을 신청하였고 선발되어 7일간 참석하게 되었습니다. 관련 내용을 정리하고 공유하는 시간 갖도록 하겠습니다.
1. 전체 특강 목표
1. ROS 라는 미들웨어에 대한 이해
2. YOLO 영상처리용 오픈소스 실습
3. JetBot을 활용한 자율주행 실습
로봇을 개발한다는것
아두이노로 로봇을 만드는것까지는 어떻게 쉬울 수 있지만, 기구학 해석이 들어가면서 부터 그 난이도는 점차 증가한다.
시뮬레이션의 중요성
동시공학적인 측면에서 효율을 가진다.
ROS는 로봇을 다루기 쉽게 해주는 도구이다.
앤드류응 교수의 랩에서 처음으로 시작되었다.
ROS의 특징...?
토픽 중심의 메세지 전송방식이기 때문에
데이터를 가져와서 뿌려보면 된다는 장점이 있다.
우분투의 버전마다 ROS의 버전이 달라진다. (우분투 16.04의 경우 kinetics우분투 18.04의 경우 melodic)
ROS2 구조는 비슷하지만 python3로 버전 업 되었다.
우아한 형제들의 배달로봇의 ROS 사용
Rviz : ROS vizualization의 약자
GAZEBO : 물리 엔진을 가진 시뮬레이션 환경
ROS master
노드와 노드사이의 연결과 메시지 통신을 위한 네임서버와 같은 역할을 한다.
마스터는 접속하는 슬래이브들과의 접속상태를 유지하지 않는 http 기반의 프로토콜인 xmlrpc를 이용하여 슬레이브들과 통신한다.
roscore
Node
ROS에서 실행가능한 최소한의 단위이다.
Tip : 패키지나 노드이름을 다 타이핑하지말고 <tab>키를 이용하면 쉽게 타이핑할 수 있다.
Service
service에서 요청하는 데이터형과 응답을 받을 데이터 형이 정의되어 있는 파일로 확장자 명은 srv이다
Topic
Topic 은 Node들이 Publisher 혹은 Subscriber 가 될 수 있다. (어떤 노드든 필요하면 데이터를 추출 하거나 보낼 수 있다. 반대로 서비스는 요청하지 않으면 데이터를 추출할 수 없는 것과 다르다.)
서비스와 토픽에 관하여
"서비스는 요청하고 받는것이다. 그에 반해 토픽은 방송이다. 노드가 계속 떠든다. 요청에 상관없이 계속 방송한다. 토픽 이름만 알면 된다. 굉장히 유용하다. 특정 메세지를 간단히 열람해 볼 수 있다. "
ROS의 주요 명령어
1. rosrun
로스의 최소 실행 단위인 노드를 실행하는 명령어
rosrun turtlesim turtlesim_node
#rosrun <pkg> <node>
2. rosnode
노드에 관한 정보를 얻을 수 있는 명령어
2.1 rosnode list
현재 실행중인 노드의 목록을 조회한다.
rosnode list
2.2 rosnode info
노드에 대한 정보 (구독자와 발행자 그리고 서비스의 목록)를 알 수 있다.
(구독자와 발행자는 Topic을 통한 connection이다. Service와 구별.)
rosnode info
#rosnode info <pkg address>
3. roscd
roscd 는 ros 에서이용하고 있는 패키지의 주소로 이동시켜 준다.
roscd turtlesim
# roscd <pkg>
4. rosed
rosed 는 srv파일을 열람한다. ros edit 의 준말.
srv 파일의 특징 : 빼기 기호(-) 세 개 ( --- )로 구분해서 윗부분이 요청(request)고 아랫부분이 응답(response)이다.
turtlesim의 TeleportAbsolute.srv는 요청만 있고 응답 데이터는 없다. (c의 return 0;)
필요로 하는 요청데이터는 x, y, theta 값임을 확인 할 수 있다.
rosed turtlesim TeleportAbsolute.srv
# rosed <pkg> <srv>
5. rosservice
서비스에 관한 명령어
5.1 rosservice list
실행중인 서비스의 리스트를 출력해준다.
rosservice list
5.2 rosservice info
service의 정보를 출력해준다.
rosservice info /spawn
# rosservice info <service>
5.3 rosservice call
서비스로 요청을 보낸다. (request as service)
rosservice call /spawn 1 2 0 'tt' # x,y,theta,name 에 대한 값을 전달
rosservice call /turtle1/teleport_absolute 1 1 0 # 1 1 0을 요청
rosservice call /reset #리셋 요청
# rosservice <address of the service> <parameter>
6. rostopic
토픽에 관한 명령어
6.1 rostopic list
rostopic list
6.1.1 rostopic list -v
rostopic list -v
6.2 rostopic info
rostopic info /turtle1/pose
# rostopic info <address of the topic>
밑의 echo하고 있다는 정보 또한 나온다.
6.3 rostopic echo
특정 메세지를 열람 할 수 있다.
rostopic echo /turtle1/pose
6.4 rosmsg show
특정메세지의 형식을 알 수 있다.
rosmsg show /turtlesim/pose
7. rqt_graph
8. rosbag
토픽의 상황을 저장해서 다시 재생하는 기능
8.1 rosbag record
전체 토픽을 저장하는 명령어 (가방에 담아둔다)
rosbag record -a
8.2 rosbag play
저장된 토픽을 다시 재생시키는 명령어 (토픽을 다시 뿌린다.)
rosbag play <*.bag>
'Autonomous Vehicle > ROS programming' 카테고리의 다른 글
특강 5,6,7일차 : JETBOT 딥러닝 자율주행 따라하기 (5) | 2020.08.08 |
---|---|
특강 3일차 : OpenCV ROS 환경에서 구동 (0) | 2020.07.29 |
특강 2일차 : Roslaunch에 대한 이해 (0) | 2020.07.24 |
특강 2일차 : ROS Package 만들기 (0) | 2020.07.24 |
Legion Y530 15inch : ROS를 위한 UBUNTU 18.04 작업환경 구축 (0) | 2020.07.20 |