Jetbot-AI机器人教程-游戏杆控制
Jetbot-AI机器人教程-游戏杆控制
说明:
- 介绍如何游戏杆控制小车
- 此示例需要连接到工作站的游戏手柄控制器。
- 在这个例子中,我们将远程驱动JetBot,查看实时流视频,并保存快照!
步骤:
- 界面:
通过导航到http://<jetbot_ip_address>:8888连接到您的机器人
使用默认密码jetbot登录
通过选择Kernel -> Shutdown All Kernels...来关闭所有其他正在运行的notebooks
导航到~/Notebooks/teleoperation/
打开并跟随teleoperation.ipynb笔记操作
将游戏手柄接收器插到电脑USB口,接收器是要接到电脑而不是接到jetson nano上,游戏手柄需要接到打开JupyterLab网页的设备上
打开https://html5gamepad.com/,看下是否检查到遥控手柄,记下对应设备的
index
数值为多少按下遥控手柄按键对应的数值会变化
运行下面代码后,窗口会输出游戏手柄对应的按键。
注意
程序中的index需要修改为实际遥控手柄对应的值
,在刚才打开的网页中可以看到对应的index。按下按键对应的按键图标,会提示按键已按下
import ipywidgets.widgets as widgets
controller = widgets.Controller(index=1) # replace with index of your controller
display(controller)
- 修改axes值对应不同的按钮,此处为方便遥控改为axes【1】, axels【3】。一个摇杆控制左轮,另一个摇杆控制右轮
from jetbot import Robot
import traitlets
robot = Robot()
left_link = traitlets.dlink((controller.axes[1], 'value'), (robot.left_motor, 'value'), transform=lambda x: -x)
right_link = traitlets.dlink((controller.axes[3], 'value'), (robot.right_motor, 'value'), transform=lambda x: -x)
- 运行到下面的代码时,窗口会显示当前摄像头拍摄到的画面
from jetbot import bgr8_to_jpeg
camera_link = traitlets.dlink((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)
- “心跳”检查,当小车断网时小车会自动停止
from jetbot import Heartbeat
def handle_heartbeat_status(change):
if change['new'] == Heartbeat.Status.dead:
camera_link.unlink()
left_link.unlink()
right_link.unlink()
robot.stop()
heartbeat = Heartbeat(period=0.5)
# attach the callback function to heartbeat status
heartbeat.observe(handle_heartbeat_status, names='status')
# only call this if your robot links were unlinked, otherwise we'll have redundant links which will double
# the commands transfered
left_link = traitlets.dlink((controller.axes[1], 'value'), (robot.left_motor, 'value'), transform=lambda x: -x)
right_link = traitlets.dlink((controller.axes[3], 'value'), (robot.right_motor, 'value'), transform=lambda x: -x)
camera_link = traitlets.dlink((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)
- 通过按键控制小车拍照,改变button可以选择不同的按键,此处为了方便控制选择buttons【0】
import uuid
import subprocess
subprocess.call(['mkdir', '-p', 'snapshots'])
snapshot_image = widgets.Image(format='jpeg', width=300, height=300)
def save_snapshot(change):
# save snapshot when button is pressed down
if change['new']:
file_path = 'snapshots/' + str(uuid.uuid1()) + '.jpg'
# write snapshot to file (we use image value instead of camera because it's already in JPEG format)
with open(file_path, 'wb') as f:
f.write(image.value)
# display snapshot that was saved
snapshot_image.value = image.value
controller.buttons[5].observe(save_snapshot, names='value')
display(widgets.HBox([image, snapshot_image]))
display(controller)
- 运行程序之后即可通过遥控手柄控制小车。Asex【0】控制左边轮子,Asex1控制右边笼子,button【0】控制拍照,左边图像显示摄像头实时画面,右边为拍摄的图片,图片保存在snapshots文件下
演示视频
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号