Widget Button
2024. 6. 28. 10:34ㆍJetson
✅ 조이스틱이 없는 상황을 가정하여 위젯 버튼으로 로봇을 제어해보자!
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 |