티스토리 뷰

IT/ROS programming

ROS 기초

긍정탁 2018. 2. 7. 22:31

                                         


ROS로 로봇을 프로그래밍하려면 무엇을 배워야합니까?

ROS를 배우기 위해 알아야 할 첫 번째 사항은 topic를 다루는 방법입니다. topic는 아마도 ROS의 가장 중요한 부분이므로주의 깊게 학습해야합니다. ROS는 topic를 통한 거의 모든 커뮤니케이션을 처리합니다. 결국 service 나 action과 같은 더욱 복잡한 통신 시스템은 결국 topic에 의존합니다. ROS topic를 통해 로봇을 움직이거나 로봇의 센서 판독 값을 읽는 등 로봇과 통신 할 수 있습니다.


$ roslaunch publisher_example move.launch

로봇을 움직이기 위한 명령어이다.




$ roslaunch publisher_example stop.launch

로봇을 멈추기 위한 명령어이다.

Ctrl + C로 명령을 종료 한 후에도 로봇은 계속 움직입니다. 이것은 로봇이 topic에 게시 한 마지막 메시지를 계속 듣기 때문입니다.

Publisher는 topic에 메시지를 쓰는 ROS 프로그램입니다

프로그램을 중단 한 이후에도 로봇이 움직인 이유 : 토픽이 게시된 마지막 메시지를 계속 실행하고 있기 때문이다. 첫번째 퍼블리셔에서 구현한 메시지는 로봇을 움직이게 하는 메시지였다. 그래서 멈추기 위해선 #2 스크립트에서 또 다른 퍼블리셔를 통해 멈추라는 메시지를 구현한것이다.

토픽만이 로봇과 통신할수 있는 도구일까 ? 아니다

ROS는 service들을 제공한다. 서비스를 이용하면 로봇에게 원하고자한 특정한 기능을 코딩한 다음에 누구나 호출할수 있도록 제공 할수 있다. ex) 어느 특정한 시간 안에 로봇을 동작시키고 멈추게 할수도 있다.


서비스는 두 부분으로 이루어져 있기 때문에 토픽보다는 복잡하다. 한쪽에서는 서비스 서버를 사용한다. 서비스 서버는 이를 사용하려는 이를 사용하려 하는 모두에게 기능을 제공할수 있다. 다른 부분에서는 서비스 기능을 호출하거나 요청하는 서비스 클라이언트가 있다.


예제] Kobuki 로봇을 4초동안 원을 그리며 이동시키기


$ roslaunch service_demo service_launch.launch


명령어를 통해서 ros 작동시킨다.


$ rosservice call /service_demo "{}"

위와 같은 명령어를 사용하였을때마다 4초동안 로봇이 원을 그리며 동작하는것을 확인할수 있었다.


이제는 액션에 대해 배워볼 차례이다. 액션은 서비스와 유사하다. 원하고자 하는 로봇의 기능을 코딩한 다음에 모두가 호출할수 있도록 제공할 수 있는 장점이 있다.

액션과 서비스의 차이점 : 서비스를 호출할때에는 로봇은 서비스를 종료 할때까지 기다렸다가 다른 작업을 해야한다는것이다. 반면, 액션을 통해 호출을 하면 로봇은 액션을 수행하는동안 계속 다른 작업을 계속 할수있다는 장점을 가지고 있다.


$ roslaunch action_demo action_launch.launch


마찬가지로 먼저 action_demo의 데이터를 담고있는 ros를 구동시킨다. 이 명령어만으론 로봇의 움직임을 관찰할수가 없었다.


$ roslaunch action_demo_client client_launch.launch

action_demo_client 런치파일을 실행하자 로봇이 약 4초가량 원을 그리며 운동을하고 멈춘것을 확인할수 있었다.


앞에서 언급했듯 action을 통해 여러가지 일들을 수행할수있는것을 알수 있다.



디버깅 툴을 사용하는 방법 !

프로그래머에게 중요한것은 언제나 오류를 처리해야하는 디버깅이다.

ROS는 수행되고 있는 것을 파악하는데 도움을 제공하는 많은 툴들을 제공한다.



1. 먼저 fixed frame을 base link로 바꿉니다.




2. add 버튼을 클릭한후 RobotModel 옵션을 선택한다.

3. LaserScan옵션에서 Topic 을 /kobuki/laser/scan항목으로 설정한다.


빨간선이 나타나게 되는데 이것은 Kobuki 로봇이 얻는 레이저 수치이다. 붉은선은 앞에 벽이 있음을 감지한다.




'IT > ROS programming' 카테고리의 다른 글

ROS C++ 기초다지기  (0) 2018.02.08
Pure pursuit algorithm  (0) 2018.01.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31