본문 바로가기

Robot/Robot Program - ROS

ROS의 시리얼 통신 패키지 rosserial사용 및 OpenCR 보드의 IMU와 통신 예제 따라해보기

최근 TurtleBot3를 가질 수 있게 되어서 개봉기[바로가기]도 올리고, 그 안에 있는 보드인 OpenCR 보드의 IMU만 한 번 아두이노 예제를 통해 학습[바로가기]을 수행했는데요... 이번에는 ROS에서 테스트를 해볼겸, 또 처음 사용해보는 rosserial이라는 패키지도 학습할 겸, 또 ROS 로봇 프로그래밍이라는 책도 구매했는데 학습도 할겸^^ 테스트를 해보았습니다. 이런 종류로 제가 올리는 글들이 항상 그렇지만, 단순히 방금 이야기한 책을 따라하면서 rosserial이라는 패키지를 학습하는 예제를 구동해보는 것이 전부인 글입니다. 일단, PC에 관련 패키지를 설치해야 하네요~

본 글은 표윤석/조한철/정려운/임태훈 저 ROS 로봇 프로그래밍의 내용 중 일부를 학습하면서 정리되고 있는 글입니다. 로봇은 TurtleBot3 Burger이며, ROS 버전은 kinetic입니다. 따라하기 실습을 수행하면서 추가되는 정보를 공유하거나, 혹은 이 예제가 잘 작동된다는 정보도 공유하고, 더 중요한 것은 책을 보고 따라하는 분들과 나중에 저 자신을 위해 중간과정을 기록하는 의도로 작성된 글입니다.

sudo apt-get install ros-kinetic-rosserial ros-kinetic-rosserial-server ros-kinetic-rosserial-arduino

.이렇게 설치합니다. 이제 ROS의 Arduino IDE 설정 문서[바로가기]와 ROS 로봇 프로그래밍에 있는데로 슬쩍 따라해서..

cd ~/Arduino/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .

.라고 입력합니다. 이전에 우분투에서 아두이노를 설치[바로가기] 해서 위 경로를 그대로 사용하구요. 세 번째 줄의 rosrun 끝에 마침표(.)가 띄어쓰기 후에 있다는거 조심하세요~ 아니면 타겟 경로를 입력해야 합니다.^^ 그러고 나면 아두이노에서 ROS와 시리얼 통신을 할 수 있는 라이브러리가 설치가 됩니다. 이제.. 아두이노를 실행하고~~

예제에서 ROS->01.Basics->d_IMU라고 OpenCR 보드가 제공하는 라이브러리를 가져옵니다.

이렇게 ros_lib가 설치되었네요... 여기서 한가지 작업을 해야할 것이 있습니다.

ArduinoHardware.h를 찾아서 열고, 위에 표시도니 #else 후에 있는 #define SERIAL_CLASS 뒤를 USBSerial이라고 변경해 주어야 합니다. 아두이노에 설치될 프로그램이 ROS와 통신하기 위한 가이드는 rosserial_arduino의 tutorial 문서[바로가기]를 확인하면 자세히 나와있더군요. 그러나 그냥 로보티즈가 배포하는 예제 코드[바로가기]를 사용하도록 하겠습니다^^. 그러나 이 코드도 꽤 복잡하던데요.. 이건 ROS의 표준 메시지 중 IMU에 관련된 문서의 규약[바로가기]을 따르기 때문인가 봅니다.

일단, 터미널에서 roscore를 실행하고

아까 d_IMU 예제를 OpenCR 보드에 업로드 시킵니다.~

그리고, 

rosrun rosserial_python serial_node.py __name:=opencr _port:=/dev/ttyACM0 _baud:=115200

라고 명령을 줍니다.~.

그리고 rostotic list로 확인해보면 imu라는 토픽이 하나 나타나네요~~~ 물론 tf도~

rostopic echo /imu 명령을 주면 orientation, angular_velocity, linear_acceleration_covariance 등이 나타나는 것이 보입니다. ROS에서 이 메세지를 바로 사용할 수 있는 거겠죠&^^

뭐 아무튼~~

rviz를 실행합니다.^^

짠~ 아무것도 없네요ㅠㅠ.

axes를 추가합니다.^^

Fixed_Frame을 base_link로 하고~

추가된 Axes의 Reference Frame은 imu_link로 합니다.

짠~~ 넵.. 저 축이 로봇에 있는 IMU 센서에서 측정된 값대로 움직여 줍니다.^^

기준 축을 눈으로 확인하기 위해 하나더 추가하죠.. base_link를 reference frame으로 하게하고, length와 radius를 살짝 작제 해줍니다.~

ㅎ^^ 재미있게 되네요^^

이렇게 로봇을 막 기울여보면, rviz 상에서 axes가 어떻게 움직이는지 나타납니다. 오늘도 재미있는 테스트 후기였습니다.^^

반응형