코딩일지(2024-01-31)
오늘! 학습까지만이라도 시켜보자!
일단 PiRacer의 바퀴제어까지는 성공했다.
일단 교수님 도움으로 차량을 원격으로 구동시키는 것까지 끝냈다.
추가적으로 배터리의 상태라던가 이런것들 알아보고 싶어 chatGPT로 찾아봤더니 vcgencmd라는 모듈이 있다는 것을 알았다.(링크)
이 모듈로 다음 정보등을 알 수 있었다.
- 메모리 정보
pi@raspberrypi:~ $ vcgencmd get_mem arm && vcgencmd get_mem gpu
arm=948M
gpu=76M
- 동작 온도
pi@raspberrypi:~ $ vcgencmd measure_temp
temp=43.8'C
- 동작 클럭 속도
pi@raspberrypi:~ $ for clock in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi; do \
echo -e "$clock:\t$(vcgencmd measure_clock $clock)"; \
done
arm: frequency(48)=1800457088
core: frequency(1)=500000992
h264: frequency(28)=0
isp: frequency(45)=0
v3d: frequency(46)=499987808
uart: frequency(22)=48001464
pwm: frequency(25)=107143064
emmc: frequency(50)=249987312
pixel: frequency(29)=81000000
vec: frequency(10)=0
hdmi: frequency(9)=120010256
dpi: frequency(4)=0
트러블슈팅
위 vcgencmd명령어를 사용할때 계속 문제가 생겼던 것이 있다.
예를 들어 vcgencmd version를 치면 버전정보만 떠야 하는데 쓸데없이 앞에 에러가 하나 붙어서 나왔다.
(그래도 다행히 아예 안나오는 문제는 아니었다.)
env) pi@raspberrypi:~/mycar $ vcgencmd version
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libatomic.so.1' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
Mar 17 2023 10:50:39
Copyright (c) 2012 Broadcom
version 82f3750a65fadae9a38077e3c2e217ad158c8d54 (clean) (release) (start)
위에서 ERROR가 하나 뜨고 그 아래에는 내가 원하는 정보들이 나왔다.
ERROR: ld.so: object ‘/usr/lib/arm-linux-gnueabihf/libatomic.so.1’ from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
그래서 다음과 같이 위 경로에 실제로 파일이 있는지를 확인해보았다.
ls /usr/lib/arm-linux-gnueabihf/libatomic.so.1
그러자 없다고 해서 그냥 깔았다.
sudo apt-get install libatomic1
근데 읭?? 이미 깔려있다는 모순적인 상황이 발생했다. 그래서 그러면 이미 깔려있는 그 파일이 어디에 있는지 수소문 해서 찾아보았다.(find명령어를 쓰면 해당 파일이 어디에 있는지 알아서 찾아준다. 다만 시간이 좀 걸린다)
sudo find / -name libatomic.so.1
그리고 결과로 나온 경로에 들어가보니 여기에 있었다.
/image-20240131143353946.png)
그래서 나는 시스템 상의 환경변수를 바꿔주는 방식으로 해서 vcgencmd 명령어가 해당 파일을 찾아올때 그 경로는 환경변수 상에서 바꿔줄까 하다가 괜히 잘못 건드리는게 아닌가 싶어 그냥 해당 명령어가 원하는 대로 해당 경로에 디렉토리를 만들어주고(sudo mkdir arm-linux-gnueabihf) 위 경로에 있었던 파일을 카피해서 내가 만들어둔 폴더에 붙여넣기 해주었다.
그랬더니 오류는 정상적으로 잡혔다.
문제가 생겼다.
차량 앞바퀴의 회전을 시키기 위해서는 pull-bar를 제어하는 모터에 문제가 생긴것 같다.
기본적으로 뒷바퀴는 앞으로 갔다 뒤로 갔다의 역할만 수행한다.
이 모터는 hobbywing사의 Quic WP 1625 듀얼 브러시라고 한다.(링크)
/image-20240131172646693.png)
근데 다행히 앞뒤로 제대로 쓰로틀링후 동작을 하는 것으로 보아 이거 문제는 아니고, 문제는 풀바를 제어하는
앞바퀴 제어 모터인, SPT 17HV-180 6Kg Waterproof Servo 25T였다. 줄여서 SPT Servo 라고도 한다.(링크)
/image-20240131173005371.png)
근데 내가 아까 PWM을 세팅하는 테스트를 진행하다가 호기심에 강제로 모터부분을 돌려보았다.
근데 이것때문인지, 이후 모터가 스스로 덜덜거리면서 조금 돌더니 멈췄다(이때 죽어버린것 같다ㅜ..)
그래서 지금 해결책을 찾고 있다. 모터를 원래 초기값을 되돌릴 수 있는지, 해결방안을 모색하고 있다. 정안되면 알리익스프레스에서 구매해야 한다ㅜㅠ.일단 최대한 해보고 안되면 빨리 사야겠다.
고장을 코드상으로 해결할 수 있는 방법을 찾아보다가, 나처럼 덜덜거리는 문제가 발생했었을때 해결책을 제시한 블로그가 있었다(링크).
/image-20240131175940813.png)
일단 예전에 아두이노 샀을때 딸려왔던 학습용 서보모터로 코드를 돌려보고 나서, 동키카 차량에 있는 서보모터를 나의 아두이노에 연결해서 돌려보아야 겠다.
이제 Calibrate Donkeycar를 접근해보자!(링크)
아래는 위 Calibrate Donkeycar페이지에 대한 내용을 번역하면서 공부해보려고 한다.
Donkeycar가 회전성공여부를 확인하려면 HW와 SW 모두에서 자동차를 칼리브레이트(보정)해야 한다.
조립할 때 앞바퀴를 앞쪽으로 유지하십시오. 풀바(pull-bars)의 길이를 조정해야 합니다.
/image-20240131153626597.png)
pull-bar는 PWM세팅을 어떻게 하냐에 따라 다른 동작결과를 보여주었다.
서보모터를 회전시키면 그에따라 풀바가 동작하게 되고, 풀바가 움직이면서 좌회전,우회전으로 회전시킬수가 있다.
# 가상환경 실행
source ~/workspace/dcworks/env/bin/activate
# 차량에 접근
cd mycar/
# 스티어링 서보(모터) 회전 테스트 실행
donkey calibrate --channel 0 --bus=1
스티어링 서보가 회저하는지확인하기 위해 위 명령어를 취해주고 100과 600을 각각 입력해주었다.
/image-20240131154705593.png)
서보가 중앙위치로 회전하도록 값을 조정하고 그 값을 기억해두어야 한다. 예를 들어, 값 330이 작동하고 서보가 중앙에 유지될 수 있다면 이를 기준으로 -100인 230과 +100인 430이 서보가 맨 왼쪽과 맨 오른쪽으로 회전할 수 있도록 할 수 있는지 테스트할 수가 있다.
그런 다음 맨 왼쪽 데이터와 맨 오른쪽 데이터를 얻은 후에는 config.py 파일을 수정하고, 다음 속성을 변경할수가 있다.
- STEERING_LEFT_PWM
- STEERING_RIGHT_PWM
근데 이때 스티어링 서보가 너무 크게 또는 너무 작게 회전하도록 설정할수는 없다.
/image-20240201155507809.png)
댓글남기기