카테고리 없음2021. 5. 16. 08:27

CygLiDAR 사용기를 정리하는 중...

 

<요약>

>>라즈베리파이 2 시리즈는 조금 느리다 (비추)

>>라즈베리파이 3B에 ROS가 미리 설치된 우분투 이미지를 설치한다

          https://downloads.ubiquityrobotics.com/pi.html

>>라이다 제조사 깃허브에서 ROS package를 내려받는다 (git clone -b v0.0.3 옵션 사용)

         git clone -b v0.0.3 https://github.com/CygLiDAR-ROS/cyglidar_d1.git

>>RViZ에 point cloud가 표시되지 않는다면 USB2Serial 장치를 활성화 한다

         https://belitino.tistory.com/140

>>roslaunch로 라이다 패키지를 실행하면 RViZ로 센서 데이터를 볼 수 있다

 

 

<작업 후기>

 

장난감 RC카에 라이다 붙여서 자율주행이 목표라서

일단 라즈베리파이를 써야 겠다는 생각이 들었다.

 

집에 있던 '라즈베리파이2 B+'에 ROS를 깔기로 했다..

일단 최신 라즈비안을 깔았는데.. 너무 느리다..

라즈베리파이가 너무 구형이라 느린가?

 

당근 마켓에서 '라즈베리파이3 B'를 3만원에 샀다.

 

인터넷을 찾아보니 ROS는 우분투에만 깔린다고 한다 (이걸 찾은게 삽질의 시작..ㅠ)

이 말 때문에 라즈비안은 데비안 버전이라서 ROS 설치가 안되는 줄 알았다..

우분투 16.04만 동작한데서 설치 했는데.. 너무 느리다..!! 아아아악!

18.04같은 다른 버전도 이것저것 깔았는데 부팅하다 멈추거나 너무 느리다.

데스크톱 버전이라 느린가 싶어서 서버 버전(텍스트만 나옴)을 깔고 X-window GUI를 설치시도,

서버 버전은 무선랜도 안잡혀서 구글링해서 인터넷 잡고 GUI를 깔았는데.. 결국 GUI 로딩에 실패!

armhf(hard float) 32bit 버전이 가볍다고 깔았는데.. 역시 안되고..ㅠ

더보기

ROS 는 ubuntu에 깔린다고 함

 

Install ROS Kinetic on Raspberry Pi 3 <Ubuntu MATE 16.04.2.>

https://www.instructables.com/How-to-Install-ROS-Kinetic-on-Raspberry-Pi-3/

 

Install ROS Melodic on Raspberry Pi 3 <Ubuntu MATE 18.04.>

https://roboticsbackend.com/install-ros-on-raspberry-pi-3/

Raspbian, which is itself created from Debian.

Unfortunately ROS is not supported on Debian.

 

 

라즈비안 데비안 2021-03-04-raspios-buster-armhf-full.img 14GB class10 SD메모리에 설치

  --한글폰트명령 : sudo apt-get install fonts-unfonts-core

 

ubuntu-mate-20.04.1-desktop-arm64+raspi.img 설치됨 5/16오후 8G메모리카드.

ubuntu-mate-20.10-desktop-armhf+raspi.img 32bit임 설치됨.느림. 5/16아침. SD메모리가 Aview 16GB에설치

 

ubuntu-mate-20.04.1-desktop-armhf+raspi.img.xz 부팀멈춤. SD메모리 8GB여서 그런가?

ubuntu-18.04.5-preinstalled-server-arm64+raspi3.img 서버버전(Text only). GUI설치 후 부팅멈춤. 

    데스크탑 버전은 GUI가 설치된 버전, 서버 버전은 텍스트 기반 저용량

    ubuntu 18.04 서버 버전에 GUI설치 방법 : https://changun516.tistory.com/75

ubuntu-mate-20.04.1-desktop-arm64+raspi.img.xz 느리게 동작함. SD메모리 8GB여서 그런가?

 

 

https://vanilet.tistory.com/16 

Ubuntu 18.04 설치후 유선랜, 무선랜 다 안될때

/etc/netplan/50-.....yaml  파일을 편집하면 된다

중요한건 들여쓰기를 꼭 지켜야 하는데, 탭 으로 들여쓰지 말고 4칸씩 들여써야 인식된다!!

 

계속 화면이 꺼져서 OS 이미지를 다시 설치함..ㅠ ==> 원인은 HDMI to VGA 컨버터 불량 의심 (뜨거워짐)

 

라즈베리파이 버전에 따라 설치가능한 우분투 버전부터 체크했어야 함

https://ubuntu-mate.org/raspberry-pi/compatibility/

 

armhf (ARM hard Float)가 좀더 가벼움

 

 

 

다시 인터넷을 찾아보니 라즈비안(데비안)에도 ROS가 깔린다고 한다..(왜 이걸 이제서야 봤을까..ㅠ)

더보기

http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi

 

라즈비안(데비안)에 ROS 설치하는 방법이 있었음.. 우분투에 설치하려고 하다가 시간허비..ㅠ

게다가 이미 ROS까지 설치된 이미지도 있다고 한다!!

An SD Card Image with Ubuntu 16.04 (LXDE) and ROS Kinetic installed can be downloaded here for the Raspberry Pi 3  

 

 

자세히 읽어보니 ROS가 이미 설치된 우분투 이미지도 있었다!! (역시.. 매뉴얼을 정독을 해야 한다..ㅠ)

 

ROS 깔린 이미지로 라즈베리파이에 한방에 설치하는 방법

https://downloads.ubiquityrobotics.com/pi.html

여기에 ROS까지 설치된 우분투 이미지(16.04 Xenial LXDE)가 있음..

>> 2020-02-10 버전 설치함 (202-11-07 버전은 부팅하다 멈춤)

 

ROS, RViZ까지 미리 깔려 있어서 이미지만 SD메모리 카드로 굽기만 하면 됨!!

라즈베리파이에서 turtlesim도 잘 동작하고 RViZ 실행도 잘된다

 

자.. 이제.. CygLidar 깃허브에서 ROS용 Cyglidar패키지를 다운받는다

클론 위치를 ~/catkin_ws/src 로 하면 캐킷 빌드로 자동 포함되서 빌드된다.

git clone https://github.com/CygLiDAR-ROS/cyglidar_d1.git

 

아.. 그런데.. catkin_make하면 에러가 나다가 라즈베리파이가 멈춘다..

여러번 해도 동일 증상..ㅠ

라즈베리파이가 멈춰서 스크린샷 프로그램도 동작이 안되서..카메라로 찍어봤다..

 

에러 찾기 귀찮다..

라즈베리파이나 리눅스 버전이 문제인가 싶어서.. 무작정 노트북에 ROS 설치해서 다시 해본다..

 

USB메모리 카드에 우분투 이미지를 올리고 USB로 부팅해서 use Ubuntu without install 메뉴로 사용했는데..

이렇게 인스톨 없이 USB로 사용하는 리눅스는 재부팅하면 설치한 파일이 모두 초기화되서 사라진다..

결국 하드에 있던 파일들을 정리해서 파티션을 분할하고 윈도우/우분투 멀티부팅을 만들었다..

 

Ubuntu 16.04.07 desktop amd64 버전에 ROS kinetic을 설치하고 CygLidar_d1을 clone해서 catkin_make하면..

 

아.. 그래도.. 에러가 난다..

더보기

/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl.cpp:32:41: warning: ‘MSB_BUFFER’ defined but not used [-Wunused-variable]
 static boost::array<char, HEX_SIZE_TWO> MSB_BUFFER, LSB_BUFFER;
                                         ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl.cpp:32:53: warning: ‘LSB_BUFFER’ defined but not used [-Wunused-variable]
 static boost::array<char, HEX_SIZE_TWO> MSB_BUFFER, LSB_BUFFER;
                                                     ^
cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/build.make:86: recipe for target 'cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/src/cyglidar_pcl.cpp.o' failed
make[2]: *** [cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/src/cyglidar_pcl.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp: In function ‘uint8_t cloudScatter_2D()’:
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:183:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp: In function ‘uint8_t cloudScatter_3D()’:
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:278:92: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
                     scan_3D.get()->points[index_3D].rgb = *reinterpret_cast<float*>(&rgb_3D);
                                                                                            ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:289:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp: In function ‘void running()’:
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:365:15: error: ‘class cyglidar_pcl_driver::cyglidar_pcl’ has no member named ‘packet_run’
         laser.packet_run(VERSION_NUM);
               ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:367:15: error: ‘class cyglidar_pcl_driver::cyglidar_pcl’ has no member named ‘packet_frequency’
         laser.packet_frequency(FREQUENCY_LEVEL);
               ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:369:15: error: ‘class cyglidar_pcl_driver::cyglidar_pcl’ has no member named ‘packet_pulse’
         laser.packet_pulse(VERSION_NUM, PULSE_CONTROL, PULSE_DURATION);
               ^
/home/orasman/catkin_ws/src/cyglidar_d1/src/cyglidar_pcl_publisher.cpp:359:9: warning: unused variable ‘sizePos’ [-Wunused-variable]
  size_t sizePos = 2;
         ^
cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/build.make:62: recipe for target 'cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/src/cyglidar_pcl_publisher.cpp.o' failed
make[2]: *** [cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/src/cyglidar_pcl_publisher.cpp.o] Error 1
CMakeFiles/Makefile2:668: recipe for target 'cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/all' failed
make[1]: *** [cyglidar_d1/CMakeFiles/cyglidar_pcl_publisher.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
orasman@orasman-A515-K-AFLUL:~/catkin_ws$ 

 

 

에러 원인을 찾아봐야 겠다...

cyglidar_pcl_publisher.cpp : error : 'class cyglidar_pcl_driver::cyglidar_pcl' has no member name 'packet_run'

    laser.packet_run(VERSION_NUM)

 

CygLiDAR 제조사에 문의해서 찾은 원인은 깃허브에 올린 파일이 헤더파일과 소스파일 버전이 달라서 그럴수 있다고 함.

 

버전을 맞추니 정상적으로 컴파일 됨!(무야호~!)

git clone -b v0.0.3 https://github.com/CygLiDAR-ROS/cyglidar_d1.git

 

라이다를 붙여서 런치 실행 했는데 RViZ에 아무것도 안나옴..ㅠㅠ

토픽 리스트를 보니 퍼블리쉬 하는데? 왜 안나오지?

$ rostopic list
/clicked_point
/initialpose
/move_base_simple/goal
/rosout
/rosout_agg
/scan_2D
/scan_3D
/tf
/tf_static

 

리스트에는 나오지만, 토픽 메시지를 보니 내용이 없었다.

$ rostopic echo /scan_2D

 

노트북과 CygLiDAR를 연결해주는 USB컨버터가 동작을 안하나보다!

 

CygLiDAR 제조사 홈페이지에 보니 PL2303칩을 쓰고 있었다..

https://www.cygbot.com/downloads

 

http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41 

 

Products

PL2303 Windows Driver Download   USB to UART RS232 Serial Windows Driver Installer Setup Program  (For PL2303 HXD, SA, TA, TB, RA GC, GS, GT, GL, GE , GD, GR versions) Installer version & Build date: 2.0.6 (2021-05-13) Windows Vista/7/8.1/10 (32 & 64-bi

www.prolific.com.tw

 

prolific 홈페이지에 가봐도 리눅스용 드라이버가 없다.. 리눅스용 드라이버 설치 방법을 찾았다..

https://belitino.tistory.com/140

 

$lsbus

Bus 002 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

 

$sudo modprobe usbserial vendor=0x067b product=0x2303

 

$dmesg

[  330.010769] usb 2-1.2: new full-speed USB device number 4 using ehci-pci
[  330.120607] usb 2-1.2: New USB device found, idVendor=067b, idProduct=2303
[  330.120615] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  330.120620] usb 2-1.2: Product: USB-Serial Controller D
[  330.120623] usb 2-1.2: Manufacturer: Prolific Technology Inc. 
[  331.155965] usbcore: registered new interface driver usbserial_generic
[  331.155980] usbserial: USB Serial support registered for generic
[  331.159009] usbcore: registered new interface driver pl2303
[  331.159028] usbserial: USB Serial support registered for pl2303
[  331.159055] pl2303 2-1.2:1.0: pl2303 converter detected
[  331.160791] usb 2-1.2: pl2303 converter now attached to ttyUSB0

 

PL2303 드라이버가 ttyUSB0에 붙었다고 메시지가 나왔다..

 

scan_2D 토픽을 보니 센싱한 값을 뿌리고 있다!

 

rviz에도 정상적으로 나온다!!

참고로 USB드라이버가 정상 동작하면 라이다 뒷쪽에 초록색 LED가 켜진다~

한참 헤맸지만 드디어 리눅스에 시그라이다를 연결했다~ ^^

 

다시 라즈베리파이로 돌아가서 시그라이다를 연결해 보자..

라즈베리에 설치한 우분투에서 clone -b v0.0.3 옵션으로 시그라이다 ROS 코드 다운로드 받아서 컴파일 했더니 아래 같은 에러발생

 

다시한번 제조사에 문의했더니 RAM부족이 원인인듯 하다고 하여 swap메모리를 설정해 보라고 함.

 

swap메모리 확보 방법

https://changun516.tistory.com/m/105

 

참고)

warning : Clock skew detected. Your build may be incomplete

catkin_make 중에 이런 에러가 나오면 NTP 재설정

 

$ sudo ntpdate -s time.bora.net

https://knoow.tistory.com/m/134

 

warnning이 몇개 있지만 라즈베리파이에서도 정상 컴파일 됐다

 

시그라이다 연결 USB 케이블을 라즈베리파이에 꼽았다.

노트북에서 했듯이 PL2303 드라이버가 동작하는지 확인해 봤다.

$dmesg

PL2302 serial to USB converter가 ttyUSB0에 연결됐다고 나온다

 

roslaunch로 실행했더니 RViZ가 실행되면서 point clowd가 정상적으로 보인다.

 

드디어 라즈베리파이에서 ROS 기반으로 시그라이다 토픽을 받을 준비가 됐다.

이제 RC카 제어코드와 주행로직 개발에 들어갈 준비가 됐다!

 

 

Posted by orasman