Widget Button

2024. 6. 28. 10:34Jetson

 

✅ 조이스틱이 없는 상황을 가정하여 위젯 버튼으로 로봇을 제어해보자!

from jetbot import Robot
robot = Robot() # robot 인스턴스 화
robot.down() # 로봇 머리 아래로
robot.up()
robot.vertical_motors_stop() # 머리 작동 멈추기
robot.forward(0.5) # 앞으로 전진
robot.stop()
# 조금씩 앞으로 전진

import time

robot.forward(0.5)

time.sleep(1)

robot.stop()
import ipywidgets.widgets as widgets

from IPython.display import display

# 두 개의 슬라이더 바를 만들어보자!

left_slider = widgets.FloatSlider(description = "left", min = -1.0, max = 1.0, step = 0.01, orientation = 'vertical')
# Flost 형태이기 때문에 실수형으로 작성 / step -> 간격 / orientation = 'vertical' -> 세로
right_slider = widgets.FloatSlider(description = "right", min = -1.0, max = 1.0, step = 0.01, orientation = 'vertical')

# 수평(HBox)으로 두 개의 슬라이더 위치 / 수직 -> VBox
slider_container = widgets.HBox([left_slider, right_slider]) # 가로로 보이기 위해

# 보여주기
display(slider_container)

import traitlets

left_link = traitlets.link((left_slider, 'value'), (robot.left_motor, 'value'))
right_link = traitlets.link((right_slider, 'value'), (robot.right_motor, 'value'))
# 링크 해제시키기

left_link.unlink()
right_link.unlink()
# 1. widget의 layout width = 100px, height = 80px, align_self : 'center'
# 2. sotp_button -> red button
# 3. left_button, right_button, backward_button, forward_button
# display로 보여주기

button_layout = widgets.Layout(width = '100px', height = '80px')

forward_button = widgets.Button(description = 'forward', layout = button_layout)
left_button = widgets.Button(description = 'left', layout = button_layout)
stop_button = widgets.Button(description = 'stop', button_style = 'danger', layout = button_layout)
right_button = widgets.Button(description = 'right', layout = button_layout)
backward_button = widgets.Button(description = 'backward', layout = button_layout)

forward_box = widgets.HBox([forward_button], layout=widgets.Layout(align_self='center'))
leftright_box = widgets.HBox([left_button, stop_button, right_button], layout=widgets.Layout(align_self='center'))
backward_box = widgets.HBox([backward_button], layout=widgets.Layout(align_self='center'))

container = widgets.VBox([forward_box, leftright_box, backward_box])

display(container)

# 콜백함수 : 직접 호출하는게 아닌, 다른 함수에 의해서 호출되는 함수!

def stop(change) :
    robot.stop()
    
def step_forward(change) :
    robot.forward(0.5)
    time.sleep(0.5)
    robot.stop()
    
def step_backward(change) :
    robot.backward(0.5)
    time.sleep(0.5)
    robot.stop()
    
def step_right(change) :
    robot.right(0.5)
    time.sleep(0.5)
    robot.stop()
    
def step_left(change) :
    robot.left(0.5)
    time.sleep(0.5)
    robot.stop()
# 버튼과 함수를 연결시키기!

stop_button.on_click(stop)
forward_button.on_click(step_forward)
backward_button.on_click(step_backward)
right_button.on_click(step_right)
left_button.on_click(step_left)

'Jetson' 카테고리의 다른 글

DC 모터 제어  (0) 2024.07.01
LCD 패널 제어  (0) 2024.07.01
Data collection  (0) 2024.06.27
Wireless_Joystick  (0) 2024.06.24
JoyStick  (0) 2024.06.21