7/24 세상에 도전하기 24일차
오늘 v0.3을 끝냈어야 했지만 살짝 벽에 막혀 시간이 지체됐다. 그래도 오늘 (내가 직접 제어하긴 했지만) DoF 3으로 50페이지 이상 안정적으로 잘 넘겼다.
핵심 돌파구는 점진적으로 접착력을 늘리는 방법이었다. 흡착도 제대로 제어하기가 어려워서 기존 방법에서 접착력을 제어할 수 있는 방법이 무엇이 있을까 고민을 했다. 서보모터 특성상 각도만을 제어하고 토크를 제어할 수 없어 어려웠다. 여기에서 만약 불가능한 각도를 요청했을 때 (무엇이 가로막고 있을 때) 이 때는 그 각도로의 요청을 얼마나 지속하느냐에 따라 노력의 여부가 달라진다. 계속 그 각도로 가라고 요청하면 계속 노력하고 한번 하고 아님 말고면 노력을 더 안한다. 이걸 이용해서 처음 리프팅해보고 안되면 3도 더 돌고, 0.1초 시간 더 쓰도록 한다. 그래도 안되면 5도 더 돌고, 0.25초 시간을 더 쓴다. 이런 식으로 접착력을 살짝 해키하게 제어할 수 있다. 이 방법으로 오늘 50페이지 이상을 넘겼다.
현재의 알고리즘이다.
while True:
1. init_arms() # hold -45, turn -90, lift -45
2. lift()
strength = 0
while True:
lift_arm_down()
lift_arm_slowly_up() # 45 -> 0
if page_is_attached():
break
lift_arm_down()
lift_arm_slowly_up() # 45 -> 0
if page_is_attached():
break
strength += 1
compress_servo_motor(strength)
3. turn()
turn_arm_center() # -90 -> 0
lift_arm_down() # 0 -> 45
if not page_is_detached():
alert("page is not detached")
wait until human touch
turn_arm_left() # 0 -> 45
4. hold()
hold_arm_up() # -45 -> 45
if not flip_page_over():
alert("page is not flipped over")
wait until human touch
turn_arm_right() # 45 -> 0
hold_arm_slowly_down() # 45 -> -45
여전히 풀어야 할 문제가 여러 가지 있다.
- 가끔씩 턴암에 부하가 너무 가해짐 - 턴암에 부하가 너무 가해질 때 사람이 떼줘야 함
- 오른쪽 끝으로 아예 붙였는데 턴암이 책에 걸릴 때가 있음. 즉 각도가 완벽히 제어가 안됨
- 우측 페이지가 계속 뜰 때 안됨
이거 3개를 더 풀어야 한다.
그리고 제일 어려운 건 이제 이 알고리즘을 안정적으로 수행하려면 상태를 지속적으로 보면서 수행해야 한다. 정해진대로 알고리즘이 동작한다고 되는 방식이 아니다. 제일 핵심적인 건 페이지가 리프트암에 붙었는지, 안 붙었는지 판별해야 한다. 그것 외에도 턴할 때 page가 detach 됐는지 안 됐는지도 판단해야 하고, 홀드암을 들 때 홀드암이 페이지를 넘어갔는지, 안 넘어갔는지도 판단해야 한다.
비디오를 처리해서 이런 것들을 실시간으로 판단할 수 있는 알고리즘을 만들자. 현재 MDF로 만든 플레이트 위에 넥과 헤드가 없는데 내일 넥과 헤드 다 붙이고, 이 알고리즘도 개발해보자. 금, 토 이틀 빡세게 해서 v0.3 마무리할 수 있었으면 좋겠다. 제발 7월 내 만원 벌어보자!!!
아 추가로, 모터의 고정을 위해 암베이스 위에 덮는 커버도 하나 만들었다. 야무지다.