步骤1:零件和材料
MATLAB 2018a
-MATLAB是2018年的首选版本,主要是因为它与连接到移动设备的代码配合使用效果最佳。但是,我们的大多数代码都可以在大多数MATLAB版本中进行解释。
iRobot创建设备
-该设备是专用的特殊设备目的是用于编程和编码。 (这不是实际的真空)
Raspberry Pi(带相机)
-作为iRobot的大脑的主板。它可能很小,但是可以处理许多事情。相机是附加附件。它还使用树莓派获取其所有功能和命令。上图所示的摄像机安装在田纳西大学工程基础系创建的3D打印支架上。
步骤2:Roomba数据库文件
您需要一个主文件,以便为Roomba使用适当的功能和命令。您可以在此文件中编写代码来借鉴功能,以使Roomba的操作更易于管理。
您可以从此链接下载文件,也可以从下面的可下载文件下载
https://ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php
步骤3:连接到Roomba
首先,您必须确保将机器人连接到树莓派通过使用微型USB插头安装主板。然后,您需要将计算机和机器人正确连接到同一WiFi。完成此操作后,您可以打开机器人电源并使用机器人数据库文件中的给定命令连接到它。 (在使用机器人前后,请务必对其进行硬重置)。例如,我们使用命令“ r.roomba(19)”连接到我们的机器人,将变量r分配给我们的设备。这是指数据库文件,该文件将我们的变量设置为可以在任何给定时刻引用的结构。
第4步:代码
我们在下面附加了完整的代码,但这是一个简要概述,突出显示了脚本中的重要元素。我们利用了所有传感器以及摄像头,以充分发挥机器人的潜力。我们还包含了允许我们将移动设备连接到机器人并使用其Gryoscope手动控制它的代码。
我们从简单的命令“ r.setDriveVelocity(.06)”开始,该命令将机器人的前进速度设置为.06 m/s。这只是为了让机器人事先移动。
然后,我们的主脚本从一个while循环开始,该循环通过创建可以在下面的条件语句中引用和使用的结构来检索给定机器人的数据。我们告诉机器人根据机器人用其传感器读取的结构数据执行某个命令。我们对其进行设置,以便机器人读取其悬崖传感器并遵循一条黑色路径。
while true%while循环会一直进行到出现“ false”(在这种情况下,它会无限进行)。
data = r.getCliffSensors; data2 = r.getBumpers;%连续获取有关悬崖传感器值的数据,并将其分配给变量%img = r.getImage; %从已安装的相机拍摄照片%image(img); %显示拍摄的图像。%red_mean = mean(mean(img(:,:,1)));%如果data.rightFront 《2000 r.turnAngle(-2);则获取绿色的平均值。一旦右前悬崖传感器的值降至2000 r.set%以下,Room将Roomba旋转约.2度C.setDriveVelocity(.05); elseif data.leftFront 《2000 r.turnAngle(2);一旦左前侧悬崖传感器的值降至2000 r。%以下,Room将Roomba逆时针旋转约0.2度。setDriveVelocity(.05); elseif 2000》 data.leftFront && 2000》 data.rightFront r.moveDistance(.1); %指示Roomba如果来自右前传感器和左前传感器的两个值都低于2000%r.turnAngle(0),则继续以大约.2 m/s的速度前进。 %告诉Roomba如果上述条件为真,则不要打开
elseif data2.right == 1 r.moveDistance(-。12); r.turnAngle(160); r.setDriveVelocity(0.05); elseif data2.left == 1 r.moveDistance(-。2); r.turnAngle(5); r.setDriveVelocity(0.05); elseif data2.front == 1 r.moveDistance(-。12); r.turnAngle(160); r.setDriveVelocity(.05);
此while循环之后,我们进入另一个while循环,该循环触发通过摄像机获取的数据。而且,我们在while循环中使用了if语句,该语句使用特定程序(alexnet)识别图像,并且一旦识别出图像,就会立即触发移动设备的远程控制。
anet = alexnet; %将alexnet深度学习分配给变量
while true%无限while循环img = r.getImage; img = imresize(img,[227,227]);标签= classify(anet,img);如果label ==“纸巾” || label ==“ refrigerator” label =“ water”;结束图片(img);标题(炭(标签)); Drawnow;
while循环使我们可以用手机控制设备,从手机的陀螺仪中检索该数据,然后将其插入矩阵,该矩阵将数据连续地流回计算机上的MATLAB中。我们使用一条if语句,该语句读取矩阵的数据,并根据电话陀螺仪的某些值提供输出以移动设备。重要的是要知道我们使用了移动设备的方向传感器。上面提到的一乘三矩阵按电话方向传感器的每个元素分类,即方位角,间距和侧面。 if语句创建的条件表明当边超过50或低于-50时,机器人将向前(正50)或向后(负50)移动一定距离。音调值也一样。如果螺距值超过落在-25以下的25个值,则机器人将以1度(正25度)或负1度(负25度)的角度旋转。
,而true
pause(.1)%暂停0.5秒,然后取每个值Controller = iphone.Orientation; %将iPhone方向值的矩阵分配给变量Azimuthal = Controller(1); %将矩阵的第一个值分配给变量Pitch = Controller(2); %将矩阵的第二个值分配给一个变量(将iPhone侧放时向前和向后倾斜)Side = Controller(3); %将矩阵的第三个值分配给变量(当iPhone侧向倾斜时,向左和向右倾斜)%如果Side》 130 ||,则基于电话的方向进行输出侧面《-130%如果手机正面朝下翻转,它将停止Roomba并退出循环r.stop break elseif侧面》 25 r.moveDistance(-。1)%如果iPhone是iPhone,则将Roomba向后移动约.1米向后倾斜至少25度,否则Side 《-25 r.moveDistance(.1)%如果iPhone向前倾斜至少25度,则将Roomba向前移动约0.1米,否则如果俯仰》 25 r.turnAngle(-1)%旋转如果iPhone向左倾斜至少25度,则将Roomba逆时针旋转1度左右;如果Pitch 《-25 r.turnAngle(1)%如果将iPhone倾斜至少25度,则将Roomba逆时针旋转1度。
这些只是我们代码主要部分的重点内容,如果您需要快速复制并粘贴一段内容以利于您,我们将其中包含这些内容。但是,如果需要,我们的整个代码附在下面。
步骤5:结论
我们编写的这段代码是专门为机器人以及项目的总体愿景而设计的。我们的目标是利用我们所有的MATLAB编码技能,以设计出能够充分利用机器人大部分功能的精心设计的脚本。使用电话控制器并不像您想像的那么困难,我们希望我们的代码可以帮助您更好地理解对iRobot进行编码的概念。
-
matlab
+关注
关注
185文章
2977浏览量
230620 -
机器人
+关注
关注
211文章
28476浏览量
207419 -
可编程
+关注
关注
2文章
867浏览量
39845 -
iRobot
+关注
关注
0文章
33浏览量
14429
发布评论请先 登录
相关推荐
评论