Donkey Car에서 PCA9685를 제거하여 ESC·서보를 톱니바퀴에 직접 연결

8664 단어 Servoblasterdonkeycar
개시하다
Donkey Car는 ESC·서보 제어에 PCA9685(16ch PWM 출력판)를 사용합니다.
그러나 래스퍼리피 단일체도 서보 제어신호(PWM 신호)를 출력할 수 있어야 한다.
PCA9685는 필요 없는 아이 아닌가요?
내가 이렇게 생각해서 조사해 보니 의외로 간단하게 벗어버렸다.
고무의 PWM 출력
고무에서 PWM을 출력할 수 있는 몇 가지 방법이 있다.
pytohon부터 쉽게 이용할 수 있다면 RPi.GPIO와 pigpio 등이 있습니다.
RPi.GPIO는 소프트웨어로 만들어져서 정밀도가 매우 떨어진다.펄스 폭이 불안정하여 서보를 진행하여 내리다.(← 들어본 말)
pigpio가 본명입니까?
그런데 읽어봤더니manage.py, 사용ServoBlaster하는 데가 있어요.이걸로 Donkey Car용 Parts 안 해도 돼요.
그래서 저는 Servo Blaster를 사용하기로 결정했습니다.
Servo Blaster 빌딩apt에서 줍지 못해서git clonemake합니다.
cd ~
git clone https://github.com/richardghirst/PiBits.git
cd ~/PiBits/ServoBlaster/user/
make servod
make install 서비스화는 가능하지만 동작이 좋지 않아 추천하지 않음(후술)
Servo Blaster 시작
sudo ~/PiBits/ServoBlaster/user/servod --idle-timeout=2000 --step-size=4
시동을 걸다.
옵션--idle-timeout=2000은 사용하지 않을 때 서보 출력을 중지하는 옵션입니다.이로써 manage.py 가동하지 않을 때의 전력 소모량은 다소 줄어들 것이다.
옵션--step-size=4은 STEERING입니다.LEFT_PWM 등 1을 설정하는 것은 몇 마이크로초와 맞먹는다.이 옵션을 사용하면 PCA9685와 동일한 PWM 설정을 사용할 수 있습니다!(대개 같지만 조금 다르다(후술)
manage.추기
manage.py의 elif cfg.DRIVE_TRAIN_TYPE == "SERVO_HBRIDGE_PWM": 블록 뒤에 다음 코드를 추가합니다.
    elif cfg.DRIVE_TRAIN_TYPE == "SERVO_ESC_ONBOARD":
        from donkeycar.parts.actuator import ServoBlaster, PWMSteering, PWMThrottle

        steering_controller = ServoBlaster(cfg.STEERING_CHANNEL)
        steering = PWMSteering(controller=steering_controller,
                                        left_pulse=cfg.STEERING_LEFT_PWM,
                                        right_pulse=cfg.STEERING_RIGHT_PWM)

        throttle_controller = ServoBlaster(cfg.THROTTLE_CHANNEL)
        throttle = PWMThrottle(controller=throttle_controller,
                                        max_pulse=cfg.THROTTLE_FORWARD_PWM,
                                        zero_pulse=cfg.THROTTLE_STOPPED_PWM,
                                        min_pulse=cfg.THROTTLE_REVERSE_PWM)

        V.add(steering, inputs=['angle'])
        V.add(throttle, inputs=['throttle'])
간단히 설명하자면DRIVE_TRAIN_TYPE에 추가SERVO_ESC_ONBOARD라는 유형이 있는데, 구체적으로 이렇게 쓰여 있다.
myconfig.py 수정
다음 세 상수를 수정합니다.
DRIVE_TRAIN_TYPE = "SERVO_ESC_ONBOARD"
STEERING_CHANNEL = 11           #pin number on the Raspberry Pi
THROTTLE_CHANNEL = 13           #pin number on the Raspberry Pi
핀 No. 는 GPIO 번호가 아니라 1~40 실제 핀 번호입니다.
또 표준으로 사용하는 것은 7, 11, 12, 13, 15, 16, 18, 22에 불과하다.
여기서 11과 13을 선택한 것은 I2C 연결을 삽입한 상태에서 쉽게 삽입할 수 있는 곳이기 때문이다.
이 일대 좋아하죠?
경로설정
전원과 GND와 신호선을 연결하면 되기 때문에 간단하다.
크림 파이
ESC
서보
시험을 준비하다
11
백색
Gpio면 17이에요.
13
백색
GPIO 말로는 27입니다.
빨강
빨강
ESC 및 서보 레드 연결
검정색
검정색
ESC 및 서보 블랙 연결
이것 괜찮아요?

이렇게

이렇게 하면

십자파와 서보 ESC의 GND가 연결되지 않은 것 같지만 전원 한쪽이 연결되어 있어 문제없다.
십자 및 서보 ESC 전원이 제대로 연결되지 않았습니다.(ESC 전원, 서보 사용)
실러캔스 파이는 3.3V I/O이기 때문에 서보 ESC에서 볼 때 I/O 전압이 부족하지만 대부분 임계값이 Vcc/2이기 때문에 나는 괜찮다고 생각한다.
요즘 BEC6V ESC가 쌓여 있는 리모컨이 불안정할 수 있다???
걱정되는 경우 I/O 전압을 변환하는 배터리를 끼우십시오.
어쨌든 수중에 있는 로보카 스토어에서 산 돈키카(기초칸인 HSP 94186)가 운행 중이다.
운행하다
남은 건 평소처럼 운전하는 거야!
cd ~/mycar
python manage.py drive
(사실'웹 컨트롤러로 제어할 수 있다'고만 확인했을 뿐 교사 보행과 자율주행을 시도하지는 않았다.)
세부 정보: PWM 설정 값
PWM 설정값의 정확한 값을 말하자면 PCA9685의 경우 1은 펄스 간격을 4096으로 나눈 값(12비트 PWM이기 때문에 4096으로 나눈 값)이다.DonkeyCar의 PWM 주파수는 60Hz이기 때문에 펄스 간격은 1/60이다.이로부터 계산하면1,000,000[μs]/60/4096 ≒ 4.069[μs].
한편, 서브블랙스터의 설정값은 미초 단위로 설정할 수 있으며, 설정과 마찬가지로 4미초다.
약 1.7%의 오차.중립이 370이면 376 정도로 변경해야 한다.
추가:정렬
https://docs.robocarstore.com/guide/calibrate/에서 진행된 교정은 PCA9685 연결을 전제로 하기 때문에 이 글의 배선 방법에 사용할 수 없다.
다음 명령을 사용하여 수동으로 PWM 출력을 수행할 수 있습니다.
echo P1-11=370 > /dev/servoblaster 
먼저 설명하자면 P1은 고정된 것이고 11은 핀 번호이며 370은 출력 값이다.
과제:servod의 서비스화
make Servo Blaster 의 디렉토리
sudo make install
실행 파일servod/usr/local/sbin/로 복사되어 시작용/etc/init.d/servoblaster을 생성합니다.
시작 옵션--step-size=4/etc/init.d/servoblasterOPTS에 추가된 형식으로 제공됩니다.
OPTS="--idle-timeout=2000 --step-size=4"
이 정도면 됐어.
그러나 운영 체제가 가동된 후--step-size=4는 작동하지 않는 동작이 될 수 있다.
ps 명령으로 보면 매개 변수가 전달되는 것 같습니다.
sudo /etc/init.d/servoblaster restart
서비스를 다시 시작하려고 하면 왜/dev/servoblaster 보이지 않는지.
ps 지령으로 보면 과정이 살아 있는 것 같아요.
물론 스톱 스타트에서는 정상적으로 일할 수 있다.
sudo /etc/init.d/servoblaster stop
sudo /etc/init.d/servoblaster start
만약 운영체제가 시작된 후에 반드시 지령을 입력해야 한다면, 나는 서비스하지 않아도 된다고 생각한다.
서비스화되어도 잘 움직일 수 있을 것 같아요.
끝말
다음은 Donkey Car에서 PCA9685를 제거하는 방법입니다.
왜 설정이 간단하지 않은지 신기하다.하지만 소스를 읽고 나니 이 정도의 리모델링이 설정의 위화감이라는 생각이 든다.
이 기사를 다 쓴 후에 나는 ~/projects/donkeycar/donkeycar/parts/actuator.py에서 한 반PiGPIO_PWM을 발견했다.pigpio도 비슷한 설정에서 사용할 수 있습니다.
추기: pigpio 사용 방법 →https://qiita.com/rukihena/items/b3d16c2bf6e1a62b0c92

좋은 웹페이지 즐겨찾기