현재 구성에서는 각 링크에 부착된 엔코더, IMU, FSR 의 값들을 STM 보드에서 취합한 후, 취합된 데이터 셋을 XU4 로 전달하도록 되어있다. XU4 에서는 전달받은 데이터 기반으로 각 모터의 제어입력을 생성하여 STM 보드로 전달한다. STM 보드는 전달받은 제어 입력을 각 모터 드라이버에 전달하여 모터를 제어하는 것으로 전체 로봇을 제어하고자 한다.
굳이 이러한 구성을 꾸린 이유는, 상기 기재한 동작이 10ms 이하로 이루어지게 하기 위함이다. Matrix 연산 같은, 필연적으로 코드의 크기가 커지게 되는 라이브러리를 사용하게 되면 코드의 길이가 길어지고 연산이 늘어나기 때문에, STM 보드로 모든 연산을 수행하기엔 무리가 있다고 판단하였기 때문이다. (그보다도 STM 보드에 길이 제한없는 코딩을 위해서는 IDE를 사야하는데, 연구기관할인을 받더라도 천만원에 가까운 비용이 든다..)
이 글에서는 XU4 를 처음 접하면서, ROS (Robot operating system) 를 사용하기 위한 환경을 구성하면서 진행해야 할 점 및 오해한 사실들을 기록하고자 한다.
ROS 는 로봇 개발을 원할하게 하기 위해서 각 종 관련 라리브러리를 포함한 오픈소스 소프트웨어이다. 본래의 정의로는 Middleware 라고 해서 OS 가 하는 일을 일부 수행함과 동시에 소프트웨어 적인 패키지(프로그램)를 포함하는 것을 의미한다고 한다. 이 ROS는 필연적으로 OS를 필요하게 되는데, 일반적으로 Linux 기반의 OS 를 많이 사용한다고 한다. 막연하게 로봇 개발 관련 플랫폼이라는 단어에 혹하여 ROS를 활용하기로 결정하였지만, 로봇의 하드웨어를 개발하고, 단순히 제어하는 입장에서 ROS의 활용은 절대적이진 않은 것 같다. 손쉽게 GUI를 구성하여 각종 센서 데이터를 모니터링 하기엔 훌륭하다는 장점을 가지지만, 대부분의 라이브러리가 모바일 로봇의 SLAM 이나 비전에 기반한 로봇 제어를 위한 것이라는 느낌이 강하기 때문이다. 그러나 비전을 사용하기 않고 고전적인 엔코더, 힘 센서 등에 기반한 제어를 하는데 있어서 반드시 필요한가에는 의구심이 든다. (Real-time 시스템을 구현하기 위한 SBC 활용에는 전적으로 동의한다.)
Hardkernel 의 ODROID-XU4 (http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825)
각설하고, XU4에 ROS를 설치하기 위해서는 OS를 올려야한다. 여기서는 Linux 계열의 Ubuntu 16.04 버전을 활용하였다. 필자처럼 Linux 에 익숙하지 못한 사람들은 Linux 와 Ubuntu 를 구분하는 것에서 조차 어려움이 있는데, Ubuntu 는 Linux 커널에 기반한 OS 중 한가지 정도로 이해하면 된다. Linux (정확히는 GNU/Linux) 많은 이들이 함께 개발하는 OS 이기 때문에 각자의 입맛에 맞추어 개발되는 경향이 크다. 때문에 엄청나게 다양한 Linux 커널 기반의 OS가 존재하며, 그 중 한가지가 Ubuntu 인 것일 뿐이다. (윈도우의 경우 MS 사가 전적으로 개발하고 소유하기 때문에, 그 종류가 많지 못한 것일 뿐이다. 윈도 NT, 윈도 98, 윈도 XP ... 등 모두 윈도우라고 생각하는 것과 같다.)
Hardkernel 에서는 XU4 전용의 Ubuntu 이미지를 제공하고 있다. 일반적인 Desktop 이미지를 다운받아서 설치하여 사용하진 못한다고 한다. (아키텍쳐가 다르기 때문이라고 함.) 이를 숫자를 사용하여 순차적으로 기술하면,
1. XU4 용 Ubuntu 16.04-4.14-랙odroid-xu4 이미지를 업체 홈페이지에서 다운
2. OS를 올릴 eMMC 나 SDcard 를 포맷 (SD card formatter 라는 프로그램 추천)
3. Win32DiskImager 를 설치하여 위에서 다운받은 Ubuntu 이미지를 eMMC나 SDcard 에 올림. (Win32DiskImager-odroid-v1.3 이라는 별도 프로그램을 hardkernel에서 제공하긴 하나 같은 거라고 생각됨)
4. 작업이 완료되면 윈도우의 경우 포맷할 거냐는 메세지가 뜨는데 무시하고 eMMC 나 SDcard 를 PC에서 꺼냄.
5. XU4에 메모리를 부착하고 부팅 (이후 작업을 위한 디스플레이 장치, 키보드, 마우스, 유/무선 랜은 미리 연결 할 것)
6. 부팅하고 20초 정도 기다리면 로그인 화면이 뜸. Odroid 계정의 암호는 Odroid 임.
7. 아래의 명령어를 터미널에 순차적으로 입력 (터미널은 Ctrl+Shift+T 로 열 수 있음.)
sudo apt update,
sudo apt upgrade
sudo apt dist-upgrade
sudo apt install linux-image-xu3
sudo reboot
이 후 추가적인 커널 업데이트를 할 수 있는데, 자세한 건 제조사 홈페이지를 참고하기 바란다. 개인적으로 제품 자체가 숙련자들을 위한 것이어서 초보자들이 보기에 불편한 감이 없지 않다.
설치된 Ubuntu 16.04 는 Mate 버전으로, 기존 Ubuntu 와 다르게 어느정도 기본 요소를 포함하고 있다. 때문에 사용자 입장에서 추가적으로 설치해야 할 프로그램은 특별히 필요로 하지 않는 한 없다고 생각된다.
이외의 설정
고정IP 지정: 우측 상단의 인터넷 아이콘을 우클릭하여 IPv4 에 입력하면 됨.
한국시간 설정: http://ngee.tistory.com/643
한글입력 설정: http://androidtest.tistory.com/52
Linux 초보자인 경우 보면 좋은 기초 가이드 (1-2시간 소요): http://www.ee.surrey.ac.uk/Teaching/Unix/
(ROS 는 Ununtu 버전에 따라 다른 버전을 사용해야 하는데, Ubuntu 16.04의 경우 ROS Kinetic Kame 를 설치하면 된다. 솔직히 자세한 사항은 'ROS 로봇 프로그래밍, 표윤석 외 저' 를 추천한다.
여기서 필자가 몇일 뻘짓한 것이 있는데... XU4 환경에서 qtcreator 나 Rviz 등을 실행하면 OpenGL 관련 에러가 뜬다. 이로인해 프로그램이 실행은 되나 화면에 아무것도 나타나지 않는 현상도 발생한다. 모든 에러를 해결하진 못해도 아래와 같은 조치를 취하면 어느정도는 해결이 된다.
아래 명령 입력 후, Odroid-utility 설치 후 6번 Rebuild Xorg DDX 실행 후 reboot.
wget -O /usr/local/bin/odroid-utility.sh https://raw.githubusercontent.com/mdrjr/odroid-utility/master/odroid-utility.sh
chmod +x /usr/local/bin/odroid-utility.sh
odroid-utility.sh
위 작업을 한 뒤에는 Unable to find X11 visual which matches EGL config 9 에러가 사라짐을 확인할 수 있다.
그러나 여전히 libGL error 관련 메세지는 사라지지 않는다. 이는 XU4 같은 소형 시스템에서는 효율적인 운용을 위해서 OpenGL 이 아닌, OpenGL ES (Embedded System) 을 사용하기 때문이다. OpenGL ES는 OpenGL 에서 일부 기능을 제거하여 줄인 버전이라고 한다.
XU4 에서 3D 관련 작업을 수행하고자 한다면 위와 같은 에러가 뜨며 실행되지 않을 것이다. 이를 해결하기 위해서 glshim 이나 gl4es 같은 것을 사용하여 다시 컴파일 하면 된다고는 하는데.. 초보자 입장에서는 무슨 말인지도 어떻게 해야 할지도 모르겠다.
그걸 떠나서, XU4 를 이용하여 Rviz 같은 3차원 모니터링 패키지를 사용하려고 한 판단이 잘못되었다는 것을 깨달았다. 이유는 매우 비효율적이기 때문이다. 충분히 빠른 PC가 있는데 굳이 XU4로 모니터링하는 것은, atmega8 로 스타크래프트를 돌리려고 하는 것과 비슷할 것이다. 차라리 무선랜으로 PC와 XU4를 같은 네트워크로 묶어 버려서 Rviz 로 모니터링 하는 것이 효율적일 것이다.
------------------------------------------------------------------------------------------------
결론부터 말씀드리자면 비추천입니다. 그 이유는 아래와 같습니다.
1. 올해 9월 열렸던 ROSCon2014에서 "The current state of ROS and Ubuntu on ARM" 라는 주제로 ARM 기반의 보드에서 사용되는 ROS 에 대한 이야기가 있었습니다. 예전보다 환경은 좋아지고, 최근 보드들도 많이 보완되어 ROS 사용하기에 좋아진 것은 사실입니다. 다만, OpenGL 을 사용가능해야 하고, 바이너리 파일은 제공되지 않기때문에 의존성 관계를 다 고려해가며 소스들을 개별로 다운받고 컴파일 해야하겠죠. ARM 을 사용하시니 아래의 발표자료가 조금은 도움이 되겠네요.
http://roscon.ros.org/2014/wp-content/uploads/2014/07/ROS-on-ARM.pdf
2. 다행히 사용하고 계시는 Odroid XU3의 경우에는 OpenGL ES 3.0/2.0/1.1 을 지원하는 제품이기에 속도는 둘째 치더라도 RViz 를 사용 가능합니다. 다만, 1번에서 말씀드렸듯이 컴파일에 신중히해야겠죠. 최근 자료는 아니지만 관련 내용으로 한국 ROS 유저 그룹 회원 한분이 진행한 내용이 있습니다. 혹시 보셨을수도 있지만 아래에 좌표 올릴께요. 저는 해보지 않았지만 이분은 성공하셨다고 하시네요.
http://www.ros.or.kr/index.php/Install_ros_on_embedded
3. 마지막으로 효용성문제입니다. 전 이부분을 제일 강조하고 싶은데, 아무리 ARM 기반의 SBC 계열이 발전을 하고는 있다지만, 데스크톱 보다는 성능면에서 떨어지기에 굳이 오드로이드에서 무언가를 RViz 에서 확인해야 하는가 입니다. SBC 는 휴대성이나 매우 작은 크기, 저전력에서 뛰어나기에 그 장점을 살릴 수 있는 면에서 사용하시고, 뷰어라고 볼 수 있는 RViz 는 데스크톱에서 보시는게 좋지 않을까 싶습니다.
이상입니다.
--------------------------------------------------------------------------------------------------
고로.. ODROID-XU4 를 이용하여 Rviz 등의 3D 패키지를 사용하려는 당신... 그만하고 다른 것을 하는 것을 추천한다.
댓글 없음:
댓글 쓰기