toio를 사용한 디지털 초로 Q
매트를 사용하지 않는 초로 Q
Hiroshi Takagi라고 합니다. 평소에는 임베디드 엔지니어를 하고 있습니다.
이번에는 toio의 새로운 업데이트 기능을 사용하여 초로 Q를 만들어 보았습니다.
toio라고 하면 절대 위치 센서입니다만, 이번은 그것을 사용하지 않고 만듭니다.
그렇게 함으로써 전용 매트를 사용하지 않아도 어떤 곳에서도 놀 수 있습니다. 이런 느낌.
디지털 초로 Q #toio 피 c. 라고 r. 코 m / KxHML1 c2 — Hiroshi Takagi (@TkgHrsh) 10월 14, 2020
먼저 모터의 회전 속도를 얻습니다.
조속하지만 갑니다.
시작하려면 모터의 속도 정보 획득 을 사용하여 회전 속도를 얻습니다.
손으로 타이어를 움직일 때의 속도값을 취할 수 있으므로 이 값을 축적하여 쵸로 Q가 움직이는 길이를 결정합니다.
이것은 디폴트 무효이므로, 사용하려면 사전에 이하의 설정으로 유효하게 할 필요가 있으므로 주의입니다. 모터의 속도 정보 획득 설정
움직임은 가속도 지정 모터 제어를 사용
쵸로 Q의 움직임은, 붐으로 나아가 휴는 멈추는 느낌이었으므로,
이런 식으로 시작 속도와 정지 시작 타이밍을 당긴 거리에서 조정합니다.
가속도 컨트롤은 큐브에 맡기고 가속도 지정 모터 제어을 사용했습니다.
구현해보기
이번에 toiojs를 사용했지만 라이브러리가 아직 새로운 기능을 지원하지 않았기 때문에 직접 수정했습니다.
이쪽은 본가의 수정에 기대해, 어플리케이션측의 실장만 기재합니다. (구현이 복잡하고 고마워요)
const { NearestScanner } = require('@toio/scanner')
async function main() {
// start a scanner to find nearest cube
const cube = await new NearestScanner().start()
// connect to the cube
await cube.connect()
let sumLeft = 0
let sumRight = 0
let moveState = 0
let moveDelayTimer
cube.on('motor:speed-feedback', (data) => {
console.log(data)
if (data.left === 0 && data.right === 0) {
if (moveState === 0) {
if (sumLeft + sumRight > 20) {
moveState = 1
moveDelayTimer = setTimeout(()=> {
const power = (sumLeft + sumRight) / 20
const curve = (sumRight - sumLeft) / 2
moveState = 2
console.log('move', power, curve)
cube.playPresetSound(1)
cube.turnOnLight({durationMs: 2550, red: 255, blue: 0, green: 0}, 1)
cube.moveWithAcc(-power, curve, 0, 0)
setTimeout(() => {
console.log('stopping')
cube.moveWithAcc(0, 0, 20, 0)
}, power * 10)
}, 500)
}
}else if(moveState === 2){
cube.turnOffLight()
cube.playPresetSound(2)
console.log('stopped')
moveState = 0
sumLeft = 0
sumRight = 0
}
}else{
if(moveState === 0){
sumLeft += data.left
sumRight += data.right
}else if (moveState === 1){
moveState = 0
clearTimeout(moveDelayTimer)
}
}
})
cube.setMotorFeedbackEnable(1).then((result) => {
console.log(result)
})
}
main()
포인트는 간단한 상태 섬유를 만들고 있습니다.
타이어를 당기고 있는 동안에는 점점 값을 축적해 갑니다.
타이어 움직임이 멈추면 조금 기다립니다.
이것은 초로 Q는
"끌어서 → 들어 올려 이동하고 → 다시 당겨"
라는 순서로 움직이기 때문에 일시적으로 타이어가 멈출 때를 케어하고 있습니다.
주행 후 일정 시간 후에 가속도로 정지 명령을 발행하고 타이어가 멈추면 처음으로 돌아갑니다.
끝
조금 달리기 시작했지만 이번에는 쵸로 Q의 소개였습니다.
디지털 초로 Q 밖에 할 수 없는 것은, 모터 좌우의 회전수를 따로따로 취득할 수 있으므로,
이런 식으로 커브하여 달릴 수 있습니다.
<script async=""src="https://platform.twitter.com/widgets.js"/>디지털 쵸로 Q는 커브가 가능합니다. #toio 피 c. 라고 r. 코 m / 0Yl mk4c
— Hiroshi Takagi (@TkgHrsh) 10월 15, 2020
그 밖에도 디지털이 된 것으로 여러가지 확장할 수 있다고 생각하기 때문에, 만약 뭔가 아이디어 있으면 가르쳐 주세요.
그럼 다시!
Reference
이 문제에 관하여(toio를 사용한 디지털 초로 Q), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HrshTkg/items/97c823646256ddabc4bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)