MindStorms

lego와 robot과 관련한 것들

[EV3]wiimote.py 해설

[목표]
레고 마인드스톰 EV3로 만든 로봇을 wii remote로 조종하기

[준비물]
– Lego EV3 robot
– wii remote
– ev3dev가 설치된 microSD (설치방법은 ev3dev 설치)
– {shell}python-cwiid{/shell} 패키지(HowTo: Python Wiimote fun)가 필요함 (설치방법은 {shell}apt-get install python-cwiid{/shell}로 설치해야 함)
– 그리고 아래와 같은 파이썬 코드

[python]
# wii remote로 로봇을 조종하기 위한 전제 조건
# 1. 왼쪽 모터는 B 포트에, 오른쪽 모터는 C 포트에, 팔을 구동할 모터는 D포트에 연결되어 있어야 함
# 2. ‘python-cwiid’ 패키지가 필요함
# 3. 블루투스가 켜있어야 함
# 4. wii remote의 2번 버튼을 누르고 있으면 전진, 1번 버튼을 누르고 있으면 후진함

# Drive your robot with a wii remote!
# Left motor on port B, right motor on port C,
# vertical arm on port D.
# Requires the package ‘python-cwiid’.
# Make sure bluetooth is enabled in brickman
# before trying to use this. Hold 2 to go forward
# and 1 to go backward.

import time

import cwiid
import pyev3

def clamp(value, lower, upper):
return min(upper, max(value, lower))

print ‘press 1+2 on the wiimote now’
time.sleep(1)
w = cwiid.Wiimote() #wiimote제어를 가져온다.
print ‘connected?’
w.led = 6
w.rpt_mode = cwiid.RPT_ACC | cwiid.RPT_BTN

left_motor = pyev3.Motor(pyev3.OUTPUT_B) #좌측모터 제어를 가져온다.
left_motor.reset()
left_motor.run_mode = ‘forever’
left_motor.regulation_mode = ‘on’

right_motor = pyev3.Motor(pyev3.OUTPUT_C) #우측무터 제어를 가져온다.
right_motor.reset()
right_motor.run_mode = ‘forever’
right_motor.regulation_mode = ‘on’

arm = pyev3.Motor(pyev3.OUTPUT_D)
arm.reset()
arm.run_mode = ‘forever’
arm.regulation_mode = ‘off’

target_distance = 8
top_speed = 720

left_motor.run = 1
right_motor.run = 1

last_btn_state = 0
move = 0

try:
while True: #무한루프 시작
state = w.state

buttons = state[‘buttons’]
if buttons != last_btn_state:
if buttons & cwiid.BTN_MINUS:
top_speed -= 10
print top_speed
if buttons & cwiid.BTN_PLUS:
top_speed += 10
print top_speed
if buttons & cwiid.BTN_2:
move = 1
elif buttons & cwiid.BTN_1:
move = -1
else:
move = 0
if buttons & cwiid.BTN_LEFT:
arm.duty_cycle_sp = 100
arm.run = 1
elif buttons & cwiid.BTN_RIGHT:
arm.duty_cycle_sp = -100
arm.run = 1
else:
arm.run = 0
print top_speed, move
last_btn_state = buttons

if move:
acc = state[‘acc’]
tilt = (clamp(acc[1], 95, 145) – 120) / 25.0 # roughly between -0.5 and 0.5
turn = top_speed * tilt
turn = clamp(turn, -abs(top_speed), abs(top_speed))
left_motor.pulses_per_second_sp = int(top_speed – turn) * move
right_motor.pulses_per_second_sp = int(top_speed + turn) * move
else:
left_motor.pulses_per_second_sp = 0
right_motor.pulses_per_second_sp = 0
finally:
left_motor.run = 0
right_motor.run = 0
[/python]

[더 읽을거리]
ev3dev 설치

spacer

EV3에 ev3dev를 설치하다

선택 이유
– firmware가 아니다.
– linux이다.
– microSD(32GB이하 짜리를 이용해야 함. 이를 초과하면 인식하지 못함)에 설치한 다음, 꽂기만 하면 된다.

설치 순서(Getting Started with ev3dev)
1. 디스크 이미지 파일을 내려 받는다.
https://github.com/ev3dev/ev3dev/releases
여기에는 LEGO MINDSTORMS EV3({shell}ev3-{/shell}로 시작하는 파일 선택), Raspberry Pi({shell}rpi-{/shell}로 시작하는 이미지 파일 선택)와 Raspberry Pi 2({shell}rpi2-{/shell}로 시작하는 이미지 파일 선택)를 위한 것도 있다.
2. 디스크 이미지를 microSD에 옮긴다.
http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-mac-command-line/
3. microSD를 ev3에 꽂고 작동시킨다.
처음 부팅할 때는 시간이 많이 걸린다.
4. ev3와 통신할 수 있도록 한다.
Connecting to the Internet via Bluetooth
user : robot
default passwd : maker
따라서 접속한 다음, {shell}passwd{/shell}명령어를 이용해서 비밀번호를 바꾸는 것이 좋다.

5. 통신을 통해서 프로그램을 설치하거나, 파일을 옮길 수 있다.

프로그램 실행하기
python 프로그램을 실행시키기 위해서는 셀스크립트를 만들어서 실행시킨다.(출처:Launch programs from brickman)
[shell]#!/bin/bash
python program.py[/shell]

spacer
spacer

[NXT] 마인드스톰 NXT 원격조종을 위한 모바일 앱(Mobile Apps for Mindstorms NXT)

마인드스톰 NXT를 원격조종할 수 있는 앱들

Mobile Apps for Interacting with Your Mindstorms NXT Robot

Excerpted from this article

The iOS allows a Bluetooth connection only with a few select devices and headsets with the Mindstorms NXT not being among them. This is why no direct Bluetooth connection can be established between an iOS device with standard functionality and the NXT. For this purpose generally a computer that acts as a Bluetooth server is employed, which receives information from the iOS device via a WiFi network connection and relays it via Bluetooth to the NXT brick. Bluetooth server applications are generally available for Windows and Mac.

< 결론>
1) Android device < -- (Bluetooth) --> NXT Brick
2) iOS device < ==(Wi-Fi)==> Mac or PC < --(Bluetooth)--> NXT Brick

안드로이드 기기는 블루투스를 통하여 직접 NXT를 원격조종할 수 있다.
애플기기는 직접적으로는 NXT를 원격조종할 수 없다. 대신 중간에 컴퓨터를 통하여 간접적으로 NXT를 원격조종할 수 있다. 간접 조종을 위해 블루투스 서버 역할을 하는 소프트웨어가 필요하다.

spacer

Lego Mindstorms NXT Elevator

작은아들과 함께 만든 엘리베이터
– 카의 원활한 이동을 위해 가이드레일 설치
– 낙하충격을 완화시키는 완충기 설치
– 엘리베이터 문 설치
– 두 버튼으로 상승 또는 하강 가능
– 카가 뒤틀리지 않게 가새 설치

spacer