산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Donkey Car Garbage Collector를 위한 자율 주행 AI

TensorFlow SSD 사용 Raspberry Pi와 Pi 카메라의 MobileNetV2 DNN을 사용하여 물체 감지가 가능한 자율 주행 자동차를 구축합니다.

스토리

이 프로젝트는 (Raspberry Pi + Pi Camera) 구동 RC 자동차를 물체 감지 및 자율 주행이 가능한 자동차로 변환하는 방법을 보여줍니다. 이를 위해 우리는 두 개의 심층 신경망을 배포할 것입니다. 하나는 물체 감지용이고 다른 하나는 조향 및 스로틀에 대한 추론을 사용하는 자율 주행용입니다. RPi 3는 차량용 컴퓨터 역할을 합니다. RPi의 제한된 리소스로 인해 한 번에 하나의 네트워크만 실행할 수 있습니다.

이 아이디어는 신경망이 쓰레기통을 식별하도록 훈련시켜 자동차가 자율적으로 쓰레기통을 수거할 수 있도록 하는 것입니다.


자동차 및 노트북 식별

프로젝트는 두 부분으로 구성됩니다. 첫 번째 부분에서 계획은 중간 크기의 합성곱 네트워크를 사용하여 Pi 카메라의 입력 비디오 피드에서 개체를 인식하는 것입니다. TensorFlow는 CNN 모델을 배포하는 데 사용되고 OpenCV는 Pi 카메라의 비디오 피드를 관리하는 데 사용됩니다.

두 번째 부분에서는 자동차가 자율적으로 탐색하도록 하기 위해 행동 복제를 사용할 것입니다. 수정된 차량은 또한 초음파 거리 센서, GPS 및 6-DOF IMU와 같은 추가 센서로 보강되고 추가 원격 측정 기능을 구현합니다.

소개

2017년(1년 전)에 Google은 MobileNet을 출시했으며 올해 초 MobileNetV2를 출시했습니다. 이러한 네트워크는 스마트폰과 같은 임베디드 장치에서 작동하도록 최적화되어 있습니다. 공교롭게도 RPi 3에서 사용되는 MPU는 Linux 또는 Android를 실행할 수 있으므로 이 범주에 속합니다.

첫 번째 문제는 Raspberry Pi 3의 제한된 RAM과 계산 용량입니다. 쿼드 코어 MPU이지만 YOLO(You Only 한 번 보기) 유형 네트워크.

가장 먼저 떠오르는 해결책은 WIFI를 통해 Pi Camera를 통해 획득한 이미지를 외부 PC로 전송하고 거기서 개체 추론 단계를 수행한 다음 Donkey Car에 명령을 보내는 것입니다. 본질적으로 우리는 모든 단계에서 모선에 연락해야 합니다. 이것은 외부 노트북과 통신할 수 없는 시나리오에서 비현실적일 뿐만 아니라 비효율적입니다.

처음에는 쓰레기통을 감지할 때 비교적 정확한 VGG16 네트워크를 테스트했습니다. 단, RPi에서는 350MB 정도의 가중치 때문에 실행이 되지 않았습니다! VGG 네트워크를 테스트 하려면 마지막에 첨부된 코드를 참고하여 유사한 이미지를 입력으로 해주세요.

문제:

파이썬 KerasVGG_test.py

그래서 거대한 크기의 문제를 해결하기 위해 더 얇은 네트워크를 사용하여 RPi에서 모든 모델을 실행할 것입니다. 특히 MobileNetV2 Single Shot Detector 기반 CNN을 사용할 것입니다. 이것은 매우 작은(상대적으로) 가중치를 갖도록 최적화된 DNN입니다.

사전 훈련된 네트워크 가중치를 사용하기 때문에 이 기법을 전이 학습이라고 합니다.

소프트웨어에 대해 알아보기 전에 하드웨어를 약간 수정해야 합니다.

하드웨어

동키 자동차 프로젝트에는 자석 자동차가 사용되었습니다. Magnet은 2.4GHz 다중 채널 라디오를 사용하여 작동하는 RC(원격 제어) 자동차입니다. 자석을 당나귀 자동차로 변환하려면 몇 가지 단계를 거쳐야 합니다.

1. 분해

먼저 후면에 있는 클립과 나사 2개를 제거하여 상단 덮개를 제거합니다. 두 명의 드라이버가 있는 케이지를 찾을 수 있습니다. 이것도 제거한 다음 외부 상단 케이지를 제거하십시오. 이제 자동차의 회로에 액세스할 수 있습니다. 위에서 한 번 수신기, ESC(전자 속도 컨트롤러) 및 서보를 볼 수 있습니다.

베어 DonkeyCar

수신기는 B/C(배터리 제거) 회로가 있는 4채널 수신기입니다. 각 채널은 3와이어 커넥터를 사용합니다. 채널 CH3 및 CH4는 사용되지 않습니다. ESC는 배터리를 입력, 전원 스위치 및 수신기 채널 1의 입력으로 사용합니다. 서보는 수신기의 채널 0에 연결됩니다. 서보는 조향에 사용됩니다. 조이스틱을 통해 운전하거나 보정해야 하는 경우 스티어링 각도를 수동으로 트리밍할 수 있습니다.

2. 어댑터 장착

2개의 나사와 본체 상단을 제거한 후 2개의 3D 프린팅 플라스틱 어댑터를 사용합니다. 동일한 나사를 사용하여 기존 클립 대신 두 개의 어댑터를 조여야 합니다. 두 개의 클립을 2개의 3D 인쇄 어댑터로 교체한 후 이제 상단 나무 당나귀 자동차 플레이트를 장착할 수 있습니다.

긴 클립을 교체하는 어댑터

다음으로 베이스 보드 플레이트의 카메라 핸들을 조입니다. 그런 다음 각 구멍에 플라스틱 나사산 부품을 놓습니다. 이것은 Raspberry Pi와 서보 컨트롤러를 제자리에 고정하는 데 사용됩니다.

3. 서보 컨트롤러 및 RPi

나무 판에 RPi와 서보 컨트롤러를 장착합니다. 안테나 근처에 금속 나사를 끼고 싶지 않았기 때문에 결국 RPi를 고정하기 위해 집타이를 사용했습니다. 서보 컨트롤러를 조인 후 RPi의 I2C 버스 핀을 서보 컨트롤러에 연결합니다. 다음으로, 작은 칼을 가지고 ESC와 서보 3핀 와이어를 함께 고정하는 집타이를 자릅니다.

외부 서보 컨트롤러에 연결할 때 수신기에 대한 두 연결은 모두 수신기에서 연결을 끊고 나중에 DonkeyCar 상단에 장착할 서보 컨트롤러의 채널 0과 1에 연결해야 합니다. 접시.

4. 나무 접시

어댑터에 나무 판을 장착합니다. 이제 클립을 사용하여 DonkeyCar 판을 자석 섀시 어댑터에 부착합니다.

동키 자동차 플레이트를 상단에 장착하고 짧은 USB 케이블을 사용하여 USB 배터리를 RPi에 연결합니다. 스로틀과 스티어링 케이블은 플레이트의 구멍에서 돌출되어 Donkey 카 플레이트에 장착된 서보 컨트롤러의 채널 0과 1에 연결됩니다.

5. 추가 센서

표준 구성의 주요 문제는 속도나 장애물까지의 거리를 측정하는 데 사용되는 센서가 없다는 것입니다. RPi가 3D 가속도와 회전을 측정할 수 있도록 하는 6DOF MPU6050 IMU를 추가했습니다. 다음으로 직렬 포트에 GPS와 거리 측정을 위한 HCSR04 센서를 추가했습니다. 그러나 HCSR04는 5V를 통해 작동하며 레벨 시프터가 필요합니다.

이렇게 하면 장치의 하드웨어 단계가 완료됩니다. Donkey Car는 다음을 갖춘 4륜 차량으로 완전히 개조되었습니다.

a) 단안 광각 카메라

b) 서보 컨트롤러.

c) 6-DOF IMU 센서

d) GPS

e) 거리 센서

추가되는 모든 센서는 획득 시 타임스탬프가 찍히고 심층 신경망의 훈련 벡터를 보강하는 데 사용됩니다.

추가 센서를 지원하려면 이 기능을 추가하도록 manage.py 스크립트를 수정해야 합니다.

IMU를 사용하기 위해 처음에는 Debian Stretch에서 FXOS8700용 Python 라이브러리를 시도했습니다. 이것은 RPi의 반복적인 시작 버그로 인해 기본적으로 작동하지 않아 결국 자이로스코프와 함께 제공되는 MPU6050을 사용하게 되었습니다.

IMU 코드를 테스트하려면 아래 스니펫을 사용하십시오.

IMU에서 가져오기 MPU6050
mu =MPU6050()
a =imu.run()
#print 답변

다음 소프트웨어는 MPU6050용 virtualenv 내에서 가져와야 합니다.

sudo apt install python3-smbus
pip install mpu6050-raspberrypi

IMU 데이터 로깅을 지원하려면 tub 폴더 아래의 meta.json 파일을 확장해야 합니다.

{"입력":["캠/이미지_배열", "사용자/각도", "사용자/스로틀", "사용자/모드", "imu/acl_x", "imu/acl_y", "imu/acl_z", "imu /gyr_x”, “imu/gyr_y”, “imu/gyr_z”], “유형”:["image_array", "float", "float", "str", "float", "float", "float", "부동", "부동", "부동"]}

manage.py 파일도 아래와 같이 수정해야 합니다.

imu =Mpu6050()
V.add(imu, 출력=['imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/gyr_x', 'imu/gyr_y', 'imu /gyr_z'], threaded=True)
# 데이터를 저장하기 위해 욕조 추가
inputs =['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z']
유형 =['이미지_배열', '플로트' , 'float', 'str', 'float', 'float', 'float', 'float', 'float', 'float']

마지막으로 GPS 모듈도 장치에 추가했습니다. 실내에서는 사용할 수 없지만 WIFI 네트워크에 연결할 수 있는 지역에서 실외 테스트용으로 추가하면 유용합니다.

GPS 데이터에 로그인해야 하는 경우 IMU와 동일한 수정을 구현해야 합니다.

HSCR04 거리 센서를 사용하려면 Python 환경에서 RPI.GPIO 라이브러리를 설치해야 합니다.

파이 p 설치 RPi.GPIO


모든 하드웨어 수정 사항을 요약한 것입니다. 결국 다음과 같은 DonkeyCar로 끝날 것입니다.


소프트웨어

여기서 아이디어는 RPi에서 실행되는 객체 감지를 위한 AI 파이프라인을 구현하는 것입니다. 첫 번째 단계는 외부 장치에 의존하지 않고 RPi 3에서 작동하는 객체 감지 DNN을 배포하는 것입니다. 필요한 소프트웨어를 설치하여 시작하겠습니다.

1. DNN 라이브러리 설치

프로젝트는 TensorFlow 및 OpenCV를 사용합니다. 간단히 말해서 Raspberry Pi에서 추론을 수행하기 위해 우리는 이미 훈련된 네트워크를 사용합니다. 가중치가 로드된 후 각 카메라 프레임에 대해 물체 감지 및 추론이 수행됩니다.

pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get 설치 libxvidcore-dev libx264-devsudo apt-get 설치 qt4-dev-tools
pip3 install opencv-python

한 가지 지적해야 할 점은 TensorFlow가 가중치를 h5 파일로 로드하는 워크플로가 비교적 간단한 Keras와 달리 다른 파일 형식을 사용한다는 것입니다.

sudo pip3 설치 케라스 –업그레이드

공식 TensorFlow 모델 저장소를 복제합니다.

git clone –recurse-submodules https://github.com/tensorflow/models.git

경로 내보내기:

내보내기 PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

마지막으로 모든 것이 설치되고 문제를 다시 시작하기 전

하나를 사용하는 경우 #deactivate #가상 환경 작업 공간에서 나가십시오.
sudo shutdown -h now

다음 단계는 MobileNetV2 SSD의 가중치를 위한 Protobuffer 컴파일러를 설치하는 것입니다.

2. ProtoBuffer 컴파일러 설치

Keras는 TensorFlow와 다른 파일 형식을 사용합니다. 따라서 TensorFlow의 기본 형식인 Protobuffer를 처리해야 합니다.

버전 3.5.1을 설치했습니다.

sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all–3.5.1.tar.gzcd protobuf-3.5.1
./configure

이를 컴파일하는 데 RPi에서 상당한 시간(~1.5시간)이 걸립니다. 다른 솔루션은 크로스 컴파일이지만 지금은 단순하게 유지해야 합니다. 문제:

만들다

그런 다음 발행:

확인
sudo make install
cd pythoneexport
LD_LIBRARY_PATH=../src/.libs

확인

마지막으로 컴파일러 설치:

python3 setup.py 빌드 –cpp_implementation python3 setup.py 테스트 –cpp_implementationsudo python3 setup.py 설치 –cpp_implementation

이제 경로 내보내기:

PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp 내보내기
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3 내보내기
sudo ldconfig

마지막으로 컴파일러를 테스트하려면 다음을 입력하세요.

프로토콜

이제 우리는 우렁찬 소리를 읽을 수 있습니다. 이렇게 하면 가중치를 TensorFlow가 이해할 수 있는 형식으로 변환할 수 있습니다.

자세히 보기:당나귀 자동차 쓰레기 수거기를 위한 자율 주행 AI


제조공정

  1. 시뮬레이션된 도시 환경에서 여러 상황에서 자율 주행 자동차를 위한 실시간 모션 계획
  2. 운영 및 유지 관리를 위한 운전 강습
  3. 자율적인 미래를 위한 준비
  4. 5G는 커넥티드 카에 무엇을 제공할 수 있습니까?
  5. 안전:미래 자동차의 최우선 과제
  6. 안전한 집진기 작업을 위한 7가지 중요한 팁
  7. 자율주행 기술을 위한 3D 모션 트래킹 시스템
  8. 자율 드론 떼용 충전 포트
  9. 다임러와 BMW, 자율주행에 협력
  10. 자율 주행을 위한 Continental Pioneers 솔루션