domo arigato, mr(uby) roboto

Post on 15-Apr-2017

589 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Domo Arigato, Mr(uby) Roboto

2015-11-17 RubyConf 2015 Yurie Yamane, Masayoshi Takahashi

Team Yamanekko

ドモ アリガト ミスター ロボット

おかげで今年もここに立つことができたよ!

DOMO ARIGATO, MR ROBOTO WE ARE HAPPY TO MEET YOU AT RUBYCONF 2015!

Unfortunately, we are not kilroy and don’t sing a song.Kilroy was not here.

But we would like to say heartily, we are very happy to talk at rubyconf again, and say thank you to give us a chance.

どうもありがとう!

Robots and Us

http://www.amazon.co.jp/dp/B00H6V3BWA/

http://global.yamaha-motor.com/jp/showroom/event/2015tokyomotorshow/sp/exhibitionmodels/mgp/

“There are probably some things in this world that only I can do.”

https://robohon.com/special/

About Us

•Yurie Yamane @yuri_at_earth

•Masayoshi Takahashi @takahashim

Yamanekko

PART 1: Self-balancing Robot using LEGO EV3

Self Balancing Robot

http://www.mext.go.jp/english/relatedsites/1303116.htm

http://www.etrobo.jp/2015/

ET Robot Contest• aka “ET ROBOCON”

• ET means “Embedded Technology”

• To develop the advanced skills of embedded technology such as modeling, designing, and developing embedded systems

• “one-make racing” style (all robots have same designs)

EV3way• Self-Balancing Two-

Wheeled Robot

• have a light sensor and track a line on the floor

• Hardware:LEGO Mindstorms EV3

• Old EV3way used Mindstorms NXT

EV3way: SoftwareSystem OS Language

TOPPERS/EV3RT TOPPERS RTOS C, C++

MonoBrick Linux C#

leJOS EV3 Linux Java

EV3way: SoftwareSystem OS Language

TOPPERS/EV3RT TOPPERS RTOS C + mruby

mruby-ev3rt

mruby-ev3rt demoSep. 20th, 2015 at Fukuyama, Hiroshima Pref.

Movie by A. Hirai with ET Robocon Staff@chu-shikoku

• TOPPERS(Toyohashi OPen Platform for Embedded Real-time Systems)

• TOPPERS’ Products

• RTOS Kernel

• TINET (TCP/IP Protocol Stack)

• SafeG (dual-OS monitor)

• TOPPERS + TSUBAME(swallow) -> TOPAME

TOPPERS Project

TOPAME

http://toppers.jp/en/index.html

Who uses TOPPERS?

http://ev.nissan.co.jp/LEAF/?pfa=01http://www.ricoh.co.jp/printer/sg/3100ke/

http://www.korg.com/jp/products/dj/electribe/http://music.casio.com/ja/products/digital_pianos/ghs/products/

https://en.wikipedia.org/wiki/H-IIBfrom: http://toppers.jp/applications.html

TOPPERS Kernel Roadmap

ATK1 ATK2 ATK3

FMP3

HRP3

ASP3

2000 2010 2020

1st generation 3rd generation2nd generation

ITRON

Automotive

FDMP

HRP

FI4

JSP

Dynamicgen.

ASP Safety

HRP2

FMP

ASPSSP

http://toppers.jp/docs/intro-invite.pdf

TOPPERS EV3RTunprivileged mode (user mode)

privileged mode (kernel mode)

http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT

TOPPERS EV3RT• uses Newlib API https://sourceware.org/

newlib/

• File systems are limited (FatFs)

• no STDIO

• Not POSIX API

MRI

https://github.com/h2so5/mruby-logo

🎉mruby 1.2.0 released today!👏

mruby in server-side

mruby for CLI

mruby-ev3rt

Inverted Pendulum

Inverted Pendulum

Inverted Pendulum

Inverted Pendulum

Inverted Pendulum

Inverted Pendulum

Inverted Pendulum

How Robot Works

Target BoardSensorsActuator

Gyro Sensor

Ultrasonic Sensor

Motor

Light Sensor

How Robot Works

Target BoardSensorsActuator

Read

How Robot Works

Target BoardSensorsActuator

Move

How Robot Works

sense

calculate

control motor

execute periodically

What’s RTOS• OS for Real Time System

• Real time system: to make much of Deadlines

• NOTICE: “Real-Time” has several meanings

• “Real-Time” in RTOS is completely different from such as “Real-time Web”

Time is Resource• In real time

system, Tasks should be done in a given time (deadline)

• RTOS manage “Time” as resources (like memories)

https://www.flickr.com/photos/arjanrichter/3886579525/

Priority of tasks

• Every tasks have their own priority

• Lower-priority tasks never execute when higher-priority tasks alive

• While higher-priority task is running, lower-priority tasks are not running (into READY status)

RTOS Tasks

main_task

balance_task

watch_task

controller

observe button

initialize -> sleep

HIGH priority

LOW priority

All tasks are mruby

main_task

balance_task

watch_task

HIGH priority

LOW priority

balancer.rb

watch.rb

app_ruby.rb

balancer.rbloop do forward = 30 color = colorSensor.brightness if color >= (LIGHT_WHITE + LIGHT_BLACK)/2 turn = 20 ## turn left else turn = -20 ## turn right end

pwm_left, pwm_right, *args = balancer.calculate_auto(forward, turn, GYRO_OFFSET) leftMotor.pwm = pwm_left rightMotor.pwm = pwm_right EV3RT::Task.sleepend

watch.rb

loop do break if back_button.pressed? EV3RT::Task.sleepend

app_ruby.rb## initialize sensors, motors, clock and taskstouchSensor = EV3RT::TouchSensor.new(EV3RT::PORT_1)gyroSensor = EV3RT::GyroSensor.new(EV3RT::PORT_4)leftMotor = EV3RT::Motor.new(EV3RT::PORT_C, EV3RT::LARGE_MOTOR)rightMotor = EV3RT::Motor.new(EV3RT::PORT_B, EV3RT::LARGE_MOTOR)clock = EV3RT::Clock.new()EV3RT::Task.active(EV3RT::BALANCE_TASK_ID) ## initialize balancer

loop do ## waiting button pushed break if touchSensor.pressed? clock.sleep(10)end

EV3RT::Task.start_cyclic(EV3RT::BALANCE_CYC_ID) ## start balancerEV3RT::Task.sleep ## do other tasks

alarm and cyclic handler

main_task

balance_task

watch_task

500msec cycle

4msec cycle

balance_handler

watch_handler

Sleep and Wake-up

balance

watch

main

Classes in mruby-ev3rtMotor

TailMotor

Sensor

GyroSensorColorSensor

TouchSensor

LED LCD Clock Serial Task

Balancer

Button

PART 2:

DIY Self-balancing Robot

DIY Self-balancing Robot

Can we make our own robots from scratch?

https://www.flickr.com/photos/84906483@N08/8747337118/

DIY Self-balancing Robot

😿🙀😸http://www.instructables.com/id/Another-Easier-Inverted-Pendulum/

Collecting Parts

Target BoardSensors Actuator

Raspberry Pi A+• Lower battery usage

than Pi B+ and Pi 2

• Works with small USB battery

• Cheeper (< $30) than Pi B+ and Pi 2

Raspberry Pi A+

😿

ARM Family

http://www.emcu.it/CortexFamily/CortexFamily.html

Pi1 Pi2

EV3STM32F4

Inverted Pendulum

How to measure an angle

Gyro Sensor

http://akizukidenshi.com/catalog/g/gK-06779/

Gyro Sensor

• ST Micro L3GD20

• 3-axis digital gyroscope

• use 8 pin DIP module by Akizuki Denshi

Gyro Sensor

😿

Gyro Sensor

🙀

Measuring the Angle

!1 !2

How to rotate wheels

DC Motor

• TAMIYA FA-130 Motor

• speed control by voltage

• IO cannot change voltage

• 3.3 V (fixed)

• → use PWM

DC Motor

😿

(Motor + Gear) x 2

Wheel x 2

Body

Tamiya 70157 Universal Plate Set

Batteries (for motors)

Batteries (for motors)

🙀

Battery (for Pi A+)

connect a sensor

?

SPI vs I2C• SPI and I2C are popular protocols

• Gyro sensor L3GD20 supports both

• SPI is more complex, but faster than I2C

• Raspberry Pi supports SPI (see “BCM2835 ARM Peripherals”) • https://www.raspberrypi.org/wp-content/uploads/

2012/02/BCM2835-ARM-Peripherals.pdf

Serial Peripheral Interface (SPI)

• Master and Slave model • In our case, Raspberry Pi is master • 4 pins (Input, Output, Clock, Select)

Demo

Gyro Testserial = Serial.new timer = SystemTimer.new gyro = Gyro.new() serial.puts("time,gyro")

MESURE_COUNTS = 45 start_time = timer.now

cnt = 0 loop do mesure_sum = 0 MESURE_COUNTS.times{ mesure_sum += gyro.read(Gyro::Y) }

omega_i = mesure_sum * 0.00875 / MESURE_COUNTS; cnt +=1 now = ((timer.now - start_time) / 1000).floor if cnt == 10 cnt = 0 serial.puts("#{now},#{omega_i}") end end

connect motors

?

PWM• Pulse-Width Modulation

• pseudo-analog signal output

http://www.electronics-tutorials.ws/blog/pulse-width-modulation.html

PWM• Raspberry Pi A+/B+/2 supports 2 PWMs

• Old Raspberry Pi B support only 1 PWM

• So we can control 2 motors (Right/Left)

Motor Driver

ST Micro L298N

Motor Driver

PWMIN1 IN2

OUT1 OUT2

MOTOR

Motor Driver

Raspberry Pi

IN1 IN2 OUT0 0 STOP

0 1 Forward

1 0 Reverse

1 1 Brake

Demo

Motor Test# in1, in2, enable, pwm0or1 motor_left = Motor.new(5,6,12,0) motor_right = Motor.new(16,20,19,1)

motor_right.drive(50) motor_left.drive(50) RSRobot.delay(3000000) motor_left.drive(200) motor_right.drive(200) RSRobot.delay(3000000) motor_right.drive(50) motor_left.drive(50) RSRobot.delay(3000000) motor_right.drive(-100) motor_left.drive(-100) RSRobot.delay(3000000) motoy_right.stop motor_left.sop

JTAG• For Debugger

• Doesn’t have to use it

• but with JTAG, we can use GDB, so it’s very helpful to debug

Pinout

Making Balancer class

Balancing Equation

power = k_1 * (Angular Velocity) + k_2 * (Angle) + k_3 * (Velocity) + k_4 * (Position)

P = K

!

! +K

✓ +K

v

v +K

x

x

Angle

✓ ✓

Angular Velocity! !(fast) (slow)

Velocity(fast) (slow)vv

Position(far) (near)y asixsy asixs

Balancing Equation

power = k_1 * omega_i + k_2 * theta_i + k_3 * v_i + k_4 * x_i

P = K

!

! +K

✓ +K

v

v +K

x

x

Balancing Equation

power = k_1 * omega_i + k_2 * theta_i + k_3 * v_i + k_4 * x_i

P = K

!

! +K

✓ +K

v

v +K

x

x

a ≒ Power v ≒ ∫ Power x ≒ ∬ Power

Balancing EquationP = K

!

! +K

✓ +K

v

v +K

x

x

= K

!

! +K

X! +K

v

XP +K

x

XXP

power = k_1 * omega_i + k_2 * theta_i + k_3 * v_i + k_4 * x_i

a ≒ Power v ≒ ∫ Power x ≒ ∬ Power

Balancing Equation

theta_i += omega_i v_i += power x_i += v_i power = k_1 * theta_i + k_2 * omega_i + k_3 * v_i + k_4 * x_i

P = K

!

! +K

✓ +K

v

v +K

x

x

= K

!

! +K

X! +K

v

XP +K

x

XXP

Balancer classclass Balancer

def calculate(omega_i) @theta_i += omega_i # … t = @k_angle * @theta_i o = @k_omega * omega_i # … power = t + o + … # … return power, power end

end

main looploop do gyro_value = gyro.measure(Gyro::Y, MESURE_COUNTS)

pwm_left, pwm_right = balancer.calculate(gyro_value)

motor_left.pwm = pwm_left motor_right.pwm = pwm_right end

demo

Source code

• https://github.com/yamanekko/mruby-ev3rt

• https://github.com/yamanekko/mruby-rs-robot

• https://github.com/yamanekko/raspi_robot

Thank you & Domo Arigato!

ZZZ...

You can contact us on Twitter: @yuri_at_earth && @takahashim Special Thanks to: @tenderlove A. Hirai with ET Robocon Staff@chu-shikoku

top related