你即将开始一场旅程,我们很高兴你能参与其中! 准备使用 Windows 10 IoT Core 制作你的机器人并为其编程!
当你完成此项目时,你将获得以下体验:
- 了解 Windows 10 通用 Windows 应用程序 (UWA) 的工作原理
- 通过 Raspberry Pi 2 和 Windows 10 台式机上的 Windows 10 IoT Core 在机器人上运行,从而查看相同的应用程序可如何重获生机并更改行为。
- 从你的 Raspberry Pi 2 控制数字 GPIO
- 处理键盘、鼠标单击和触摸事件
我们很高兴能与你一起开始这场旅程 - Microsoft IoT 团队感谢你!
用法
下载项目、将其加载到 Visual Studio、编译并部署应用程序。遵循此链接。
该应用程序可以使用两种方式运行:
- Windows 10 桌面 UWA - 此处你可以使用鼠标或触摸来驱动机器人。你还可以插入 Xbox 360 控制器,并通过网络使用该控制器来驱动机器人。
- 适用于 Raspberry pi 2 的 Windows 10 IoT Core UWA - 此处你可以直接使用 Xbox 360 控制器或通过 Windows 10 UWA 中的网络命令驱动机器人
方向移动
机器人可以朝 8 个方向移动:
- 前进
- 后退
- 向左急转
- 向右急转
- 向左前方慢转
- 向右前方慢转
- 向左后方慢转
- 向右后方慢转
急转会将轮子朝相反方向旋转。慢转仅将一个轮子朝指定方向旋转。
游戏杆输入
可通过左摇杆或数字方向板控制机器人。游戏杆可通过 Raspberry Pi 2 或 Windows 10 台式机上的 USB 端口直接插入机器人。
键入输入
对于 Windows 10 台式机 UWA 应用,键盘控制为:
- 前 - 向上键 / W
- 后 - 向下键 / X
- 左 - 向左键 / A
- 右 - 向右键 / D
- 左后 - Z
- 右后 - C
- 左前 - Q
- 右前 - E
- 停止 - Enter / 空格键
鼠标/触摸
当在 Windows 10 台式机上运行时,有一个显示机器人的 8 个移动方向的输入屏幕。单击或触摸任一方向以移动机器人。
材料清单
若要制作机器人,你将需要以下内容:
- 分为 7 块的木质机器人框架 - 从 Sumo Robot Jr GitHub repo 获取排版图,并将它们提交到 http://ponoko.com。按照 P3 5.2 mm Veneer Core Birch 图纸,我们将它们切割为 4 份
- 2 个连续旋转伺服系统,如这些
- 一个地球轮,如这个
- 一个 USB Xbox 360 控制器
- 一个数字开关,如这个
- 6 根 6 英寸插头到插孔电线(2 根红色、2 根白色和 2 根黑色)(如 这些
- 2 根 6 英寸插孔到插孔电线( 1 根红色和 1 根黑色),如这些
- 螺丝、螺母、螺栓和支架,如这个
- Raspberry Pi 2、一个 2 安培电源、SD 卡网络和以太网电缆
- 微型螺丝刀
硬件组装
一张图片胜过一千个字。
一段视频就是一千张图。
查看视频
http://v.youku.com/v_show/id_XMTI2MDUxODI4MA==.html?from=y1.7-1.2
引脚分配
组装说明
- 公差 - 机器人框架的设计意图是贴靠在一起。我们已注意到木质框架的激光切割中存在一些微小公差差异。你可能希望将保护带保留在部件不可见的一侧上,作为组装机器人时的薄垫片。如果你打算将机器人框架用胶水粘在一起或如果组件贴合得非常紧,可以选择移除保护带。
- 螺丝孔对齐 - 螺丝孔专为 Raspberry pi 2 而设计,但是由于激光切割框架中的公差差异,支架可能无法完全对齐。如果支架顶部稍细一些,这完全无碍。
- 不要拧得过紧! - 不要将进入支架的螺丝拧得过紧。拧得过紧可能导致 Raspberry pi 2 的基底碎裂。将螺丝拧到位甚至松一点也无妨。
软件
机器人工具包软件是一个带有 6 个主要文件的 UWA 项目:
- MainPage.xaml.cs - 主应用程序代码和入口点
- XboxHidController.cs - Xbox 控制器的初始化和处理逻辑
- MotorControl.cs - 用于控制连续旋转舵机的主逻辑
- Controller.cs - 用于将游戏杆、按键、鼠标和触摸事件转换为机器人动作的逻辑
- NetworkCommands.cs - 用于设置客户端和服务器网络线程和创建/处理网络消息的逻辑
- package.appxmanifest - 用于定义此 UAP 应用程序的清单文件
MainPage.xaml.cs
MainPage 类是支持机器人类的入门类。这是 RobotApp 唯一的 UI 页面。屏幕按钮和键输入属性在 MainPage.xaml 中设置。
MainPage.xaml.cs 也是 RobotApp 读取之前保存的模式的位置,并且会初始化自身以作为机器人或控制器运行。在使用远程控制器(可选)时,机器人需要知道控制应用正在运行的主机计算机的名称。它可以是你的笔记本电脑,甚至也可以是一台手机。以下字符串是可以到默认名称进行硬编码的位置。它还在应用程序数据文件夹的 config.txt 中设置。将其更改为你的便携式计算机的名称或 IP 地址,以便机器人可以连接到它来获取方向命令。
// 更改为你的笔记本电脑名称或 IP 地址 专用静态字符串 defaultHostName = "tak-hp-laptop";
XboxHidController.cs
XboxHidController 类包含用于从 Xbox 游戏控制器获取输入的接口逻辑。一旦 Controllers.cs 中的初始化方法找到连接的游戏 HID 设备,它将在 XboxHidController.cs 中设置委托来处理输入事件。最终,这些方法将返回一个方向和量值,用于确定如何驱动伺服电机。
游戏控制器有两种类型的方向输入:方向板和游戏杆。方向板类型只返回八个方向中的一个,以便于使用。游戏杆类型需要将 X 和 Y 值转换为相应的方向,以及在游戏杆靠近其中心位置时过滤出细微动作。
MotorControl.cs
此 MotorCtrl 类处理所有 I/O,以控制连续旋转伺服电机和块传感器。GPIO 库用于为此项目控制选定的 I/O 引脚。主计时循环生成相应的脉冲信号来针对八个选定方向中的任意一个方向驱动电机。在此循环中还会完成其他关键系统检查(即块传感器、设备通信中断等)。
块传感器也在此处定义,并且进行设置,以演示基本运动安全功能。与其连接时,如果障碍物触发开关 ,机器人将停止,然后转身。
Controllers.cs
此控制器类协调可用于驱动机器人的多种类型的输入。处理来自按键、鼠标或触摸输入以及 Xbox 游戏控制器输入(直接连接或从远程 RobotApp 发送)的方向输入。控制器类提供用于将其中每种输入转换为由 MotorControl 类使用的基本方向值的方法。
NetworkCommands.cs
此 NetworkCmd 类设置客户端或服务器流套接字对象。如果 RobotApp 是基本机器人,将使用客户端对象。基本机器人将从联网应用读取命令,并且可以选择性地将这些命令与任何本地连接的输入设备一起使用。如果该应用设置为远程控制器,将使用侦听连接的服务器对象。当该应用处于服务器模式时,它会向连接的客户端机器人写入方向命令。RobotApp 的两种模式使用相同的控制器类。
若要设置主机计算机,请参阅如何在上述 *MainPage.xaml.cs* 中设置 *defaultHostName* 字符串的说明。
package.appxmanifest
清单文件中定义的功能支持联网和人体学接口设备权限。请确保将它们包含在你的已修改项目内。
<Capabilities>
<Capability Name="privateNetworkClientServer" />
<DeviceCapability Name="humaninterfacedevice">
<Device Id="any">
<Function Type="usage:0001 0005"/>
</Device>
</DeviceCapability>
</Capabilities>
将来注意事项
- 伺服系统电源 - 机器人已使伺服系统关闭 Raspberry Pi 2 GPIO 端口的电源。作为用于演示 GPIO 的简单示例执行此操作。这可能会导致在 Raspberry Pi 2 上发生显著的电流消耗和潜在的电压骤降。只要你的电源分级为 2 安培便无大碍。对于长时间的使用情况,建议你将伺服系统的控件移动到 Raspberry Pi 2 中单独通电和控制的 PWM 跳线帽,如这个。
- 开关位置 - 开关是机器人项目的一部分,用于演示 GPIO 输入。如果你希望构建机器人的自动控制,则开关目前不在最佳位置上。建议你将开关移到更优的位置。
构建。构想。执行。
此机器人工具包(硬件和软件)作为开源项目提供。
该工具包是一个起点。在机械、电气和软件设计方面尽情发挥你的创造力。构建你自己的机器人工具包。对其进行装饰。改进排版图。添加电动机;添加传感器;提交改进和 Bug 修复! 无论是什么,请告诉我们你用它执行了什么操作:#MakeInventDo
Microsoft IoT 团队感谢你!
Comments