- 개발 환경 : Raspberry Pi 4B (Ubuntu 18.04 / ROS melodic)
- 준비물 : Arduino 보드, IMU 센서 (MPU 9250)
- 참조 : https://learning.oreilly.com/library/view/ros-robotics-projects/9781783554713/ch05s04.html
Step1. Raspberry Pi 4B에 Ubuntu 18.04 설치하기
Raspberry Pi 4B에 Ubuntu 18.04 설치하기
- 준비물 : Raspberry Pi 4B, SD Card, SD Card Reader - 참조 : https://www.youtube.com/watch?v=zasvSKaobVI&t=576s (유투브 구선생) Step1. SD Card 포맷 - SD 카드를 USB 리더기에 꽂아주고 PC에 연결합..
do-9un6.tistory.com
Step2. Ubuntu 18.04에 ROS melodic 설치하기
Ubuntu 18.04에 ROS melodic 설치하기
- 개발환경 : Raspberry Pi 4B (Ubuntu 18.04) - 참조 : http://wiki.ros.org/melodic/Installation/Ubuntu Step1. Ubuntu 18.04 설치 https://do-9un6.tistory.com/2 참고 Step2. ROS melodic 설치 - Ubuntu 18..
do-9un6.tistory.com
Step3. 아두이노와 ROS 인터페이스
- 아두이노 보드와 ROS를 인터페이싱한다는 것은 일반 ROS 노드처럼 발행/구독이 가능한 ROS 노드를 아두이노에서 실행하는 것을 의미합니다. PC (Raspberry Pi / Ubuntu 18.04 / ROS melodic)와 아두이노의 주요 통신은 UART를 통해 이루어지는데, ROS Serial이라는 전용 프로토콜이 있으며, ROS Serial message를 인코딩 및 디코딩 할 수 있는 ROS 메타패키지로서 구현됩니다. 즉, ROS Serial 프로토콜을 이용하여 UART를 통해 ROS 노드처럼 Arduino를 발행 및 구독할 수 있습니다. 흔히 말해 ROS Serial 통신을 하는 것 입니다.
- 먼저, PC (Raspberry Pi / Ubuntu 18.04 / ROS melodic)에서 rosserial 메타패키지/클라이언트 패키지를 설치합니다.
$ sudo apt-get install ros-melodic-rosserial
$ sudo apt-get install ros-melodic-rosserial-arduino
- 아래의 링크에서 Linux용 아두이노 IDE를 설치합니다.
https://www.arduino.cc/en/software
Software
Open-source electronic prototyping platform enabling users to create interactive electronic objects.
www.arduino.cc
$ cd /Downloads/arduino-1.8.18
$ sudo ./install.sh
$ sudo apt install fonts-nanurm-coding
$ sudo apt-get update
- 아두이노 IDE를 실행시켜 File - Preference에 들어가서 Sketchbook location을 설정해줍니다.
- sketchbook location으로 가서 libraries 폴더가 없다면 생성해줍니다. 모든 Arduino 라이브러리를 보관하는 곳입니다.
- 터미널 창을 열어 libraries 폴더로 들어가 Arduino용 ros_lib 라이브러리를 생성합니다.
$ cd libraries
$ rosrun rosserial_arduino make_libraries.py .
- 아두이노 IDE에서 File - Examples 에 보면 ros_lib을 확인하실 수 있습니다.
Step4. 아두이노에 IMU센서 (MPU-9250) 연결
- 아래의 사진과 같이 연결하시면 됩니다.
Step5. IMU센서 (MPU-9250) 라이브러리 다운로드
- ROS에서 IMU 값을 받아오기 위해서는 ROS-Arduino 노드를 생성하여 ROS topic으로 보내야합니다.
- 이를 위해 먼저 라이브러리를 다운로드 받아줍니다.
(참고로 현재 사용하는 IMU센서 MPU-9250은 MPU-9150 라이브러리를 사용합니다.)
$ git clone https://github.com/sparkfun/MPU-9150_Breakout/tree/master/firmware
(저는 해당 명령어가 먹질 않아서 https://github.com/sparkfun/MPU-9150_Breakout.git 링크에 접속하여 수동 다운로드 했습니다.)
- 다운로드 후, firmware안의 I2Cdev 폴더와 MPU6050 폴더를 arduino_sketch_location/libraries 폴더 안에 위치시킵니다.
Step6. IMU센서 (MPU-9250) 아두이노 코드 컴파일 및 업로드
- 아래에 코드 파일 첨부하였으니 다운로드하셔서 사용하시면 됩니다.
- 먼저 컴파일을 통해 코드에 이상이 없는지 확인합니다.
저는 크게 총 2가지의 오류 및 경고가 발생하였습니다.
1. 첫번째는 Overflow 에러입니다.
해당 데이터와 Packet은 매개변수이며, 4byte (32bit)로 처리되기 때문에 Overflow 에러가 발생했습니다.
따라서 라이브러리 폴더의 MPU6050_6Axis_MotionApps20.h 파일에서 Overflow 에러가 발생한 부분에
Uint32_t{ } 를 추가하여 해결했습니다.
2. 두번째는 definition 경고입니다.
여러 개의 헤더파일에서 중복으로 class가 definition되어 발생하는 경고로 추측됩니다.
구조적인 문제가 아니기 때문에 무시해도 되는 경고입니다.
(경고를 해결하기 위해서는 해더파일에서 수정해야하는데 현재 공부 중입니다.)
- 컴파일 완료 후, 아두이노와 라즈베리 파이를 연결하고 코드를 업로드합니다.
Step6. ROS를 통한 아두이노 IMU센서 (MPU-9250) 작동
- 라즈베리파이에서 터미널 창을 열어 해당 명령어를 입력하여 ROS Serial 노드를 실행합니다.
$ roscore
$ rosrun rosserial_python serial_node.py /dev/ttyACM0
- rostopic list 명령어를 통해 imu_data topic이 실행되고 있는 것을 확인할 수 있으며,
rostopic echo 명령어를 이용하여 imu 데이터 값을 확인할 수 있습니다.
$ rostopic list
$ rostopic echo imu_data
- Rviz에서 TF 데이터를 시각화할 수 있습니다. 다음 명령을 사용하여 Rviz를 실행할 수 있습니다.
(base_link는 고정 프레임을 나타냅니다.)
$ rosrun rviz rviz -f base_link
- Rviz 창이 나타나고, Rviz 왼쪽에 TF 옵션이 없으면 Add하여 추가합니다.
(IMU의 회전에 따라 imu_frame이 이동하는 다음과 같은 시각화를 얻을 수 있습니다.)
'작업 일기' 카테고리의 다른 글
Raspberry Pi 4B에서 모터 드라이버 (MD200T) 구동하기 (0) | 2021.11.12 |
---|---|
Arduino와 ROS로 Flexible LED 구동하기 (0) | 2021.10.28 |
Raspberry Pi 4B에서 ydlidar 구동하기 (0) | 2021.10.26 |
Ubuntu 18.04에 ROS melodic 설치하기 (0) | 2021.10.21 |
가상 머신 Vmware에 Ubuntu 18.04 설치하기 (0) | 2021.10.21 |