공부/ROS

[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 텔레옵 봇 #1

InculPark 2022. 11. 22. 20:08
반응형

이 실습은 Ch8의 텔레옵-봇(pp.117~141)의 내용이다.

 

+)저작권 때문에 코드 전문은 올리지 않고 책의 내용을 noetic버전에서 실습할 때 도움이 되는 내용들 위주로 업로드할 예정이다.

+책은 ros indigo 버전이지만 나는 noetic 버전에서 실습했다. 이에 따라 달라지는 코드는 이 글에 적어두었다.

+나는 wanderbot_ws를 따로 만들지 않고 기존에 쓰던 catkin_ws 안에 wanderbot pkg를 만들었다.

 

 

119~120p)

●예제 8-1의 termios, tty등의 모듈은 검색해서 읽어봤는데도 잘 모르겠다... 일단 결과물은 책의 내용과 똑같이 나왔다. 터미널에서 엔터를 눌러 전송하는 키를 읽는 방식이 아니라 그때 그때 누르는 키를 /key라는 topic으로 publish하고 있는 것을 확인했다.

 

 

●일단은 예제 8-1의 노드를 이해하지 않고 키보드 입력을 읽는 노드 자체만으로도 쓸 곳은 많은 것 같다. 

 

 

 

 

121p)

●Python3로 넘어오면서 dict의 has_key 메서드가 삭제되었다. 그래서 예제 코드 8-2에서 해당 부분을 in을 이용한 코드로 바꿨다.

if len(msg.data) == 0 or not msg.data[0] in key_mapping:

 

 

●예제 코드 8-2의 subscriber선언에서 keys_cb으로 콜백 함수를 지정한 것 뒤에 추가로 넣은 twist_pub은 추가로 전달하는 인자라고 한다. 만약 내가 이 코드를 실습하기 전에 같은 기능의 코드를 짰다면 콜백 함수안에서 publisher를 선언했을 것이다. 예제 코드 8-2로 더 깔끔한 코딩을 배운 거 같다. 아래는 참고했던 글이다.

 

https://answers.ros.org/question/231492/passing-arguments-to-callback-in-python/

 

Passing arguments to callback in Python - ROS Answers: Open Source Q&A Forum

Passing arguments to callback in Python edit Hi! I have a problem passing arguments to a callback function when Subscribing a ROStopic. The code below is what I do have now. But I only received error messages when I tried to pass arguments to the callback

answers.ros.org

 

 

●예제 코드 8-2에서 만약 subscriber선언 때 twist_pub을 같이 전달하지 않으면 keys_cb함수에서 twist_pub을 몰라 에러가 발생한다.

 

rostopic echo로 읽은 cmd_vel
rostopic hz로 읽은 cmd_vel의 hz

 

 

 

 

123~124p)

●예제 코드 8-3에서 twist_pub = 으로 시작하는 부분의 indentation이 잘못되어 있는 거 같다. Subscriber 선언 부분하고 같은 line에 있어야 한다.

 

●노드는 subscriber로 선언되면 별도의 반복문이 없어도 지정된 메시지를 받았을 때 마다 지정한 콜백함수를 호출한다. 그래서 while문 안쪽에 subscriber 선언이나 별도의 코드가 없어도 계속 subscribe 하는 중이다.

 

이전 명령이 계속 유지되고 hz도 10hz로 고정된다.

 

 

 

 

 

========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================

반응형