×

如何让Lego Ev3机器人与BluPants一起工作

消耗积分:0 | 格式:zip | 大小:31.48 MB | 2023-06-29

48674

分享资料个

让我们看看如何让 Lego Ev3 机器人与 BluPants 一起工作。

注意:SD 卡镜像已于 2020 年 10 月 31 日更新。新版本修复了错误并增加了对乐高教育机器人的适当支持。如果您运行的是旧版本,请考虑更新它:

构建你的机器人

默认情况下,BluPants 与Gripp3rEducation Ev3机器人一起使用。组装它们的说明可以在乐高的网站上找到。

您不必制造与我们完全相同的机器人。只要您以与我们在机器人上使用相同的方式连接电机,BluPants 也可以在您的机器人上无缝工作。不过,对blupants.json的额外调整可能会给您带来更高的准确性。有关详细信息,请参阅“校准您的机器人”部分。

BluPants 默认设置如下:

  • 爪式电机连接到端口 A
  • 左轮电机连接到端口 B
  • 右轮电机连接到端口 C
  • 距离传感器连接到端口 4
 
 
 
pYYBAGN6XGeAO5FFAALCLWdkopc148.png
 
1 / 2BluPants (Gripp3r) 使用的默认电机和端口设置
 

距离传感器应连接到端口 4。

 
 
 
pYYBAGN6XGqAJnXPAAInPc6IN-w505.png
 
1 / 2距离传感器连接到 Ev3 积木 (Gripp3r) 上的端口 4
 

组装好机器人后,就可以用 BluPants 映像刷入 micro SD 卡了。无论您使用何种文档,只要确保将正确的 BluPants 映像文件闪存到您的 SD 卡即可。

在 Ev3 积木的左侧找到内存扩展端口(SD 卡读卡器)。

poYBAGN6XG2AL_fBAAHHhONBLBk676.png
Ev3 砖端口
 

刷完 SD 卡后,关闭您的 Ev3 积木,然后插入卡,如下图所示:

 
 
 
poYBAGN6XHWAVcUiAAGKy0ulDvg40.jpeg
 
1 / 2左侧的 SD 插槽
 

找到 WiFi 的 USB 端口并直接连接您的 USB WiFi 加密狗。或者,如果您还使用 USB 摄像头,请连接 USB 集线器。在下面的图片中,我们使用 USB 集线器连接 WiFi 加密狗和相机。

 
 
 
pYYBAGN6XHiAOvI6AAObbz4AKyQ25.jpeg
 
1 / 4将您的相机(可选)连接到 USB 集线器
 

你的很可能会有所不同。看到您的 IP 地址后,您确认您的机器人已连接并准备好开始使用 BluPants 进行编码。

编码时间!

将机器人连接到 WiFi 后,打开浏览器并访问http://blupants.org。确保您用于浏览的计算机也连接到您连接 Ev3 的同一个 WiFi 网络。

在“机器人”下拉菜单(右下角)上,确保您看到了您的 Ev3 IP 地址,然后单击“播放”。如果您在列表中看不到任何内容,请尝试重新加载页面和/或关闭并重新打开浏览器。机器人 IP 仅在页面完全加载后显示:

poYBAGN6XHuADGD6AAGJcY7IM_o724.png
将 Ev3 连接到 BluPants
 

就是这样!您已准备好使用 BluPants 提高您的编码技能。

 

请记住,BluPants 是一个多平台的编码环境。这意味着,您可以使用 Lego Ev3 享受相同的学习体验,也可以使用更实惠的机器人来完成,例如 Beaglebones 和 RaspberryPies。

查看 BluPants Youtube 频道,或访问www.blupants.com以获取有关如何以轻松有趣的方式学习编码的更多示例和详细信息。在Twitter 上关注我们以随时关注所有新版本。

机器人配置文件

您可以通过编辑其配置文件来更改您的机器人设置。所有设置都可以通过编辑机器人本地 Linux 文件系统上的“/root/blupants.json”文件来自定义。您可以像访问任何常规 Linux 机器一样访问和编辑配置文件。我们将介绍两个选项:

  • SSH:如果您熟悉 Linux/Mac OS 并使用 nano 或 vi 编辑文件
  • Putty:如果您更熟悉 Windows 环境。腻子可以在这里下载

您应该做的第一件事是使用默认凭据登录机器人并更改密码。在 EV3 积木 LCD 显示屏的左上角检查您的机器人 IP 地址。就我而言,它是:“10.0.0.237”。

pYYBAGN6XH2AcvrOAAE-0hugL10198.png
EV3 LCD 上显示的机器人 IP 地址
 

您的机器人的默认凭据是:

user: root
password: temppwd

从您的本地计算机运行以下命令以连接到您的机器人并在那里打开一个外壳:

macOS / Linux
$ ssh root@10.0.0.237
带有腻子的窗户
C:\Users\user>putty root@10.0.0.237

请记住将“10.0.0.237”替换为您的特定机器人 IP 地址。

提供密码“tempppwd”。

% ssh root@10.0.0.237
Password:
Linux ev3dev 4.14.117-ev3dev-2.3.5-ev3 #1 PREEMPT Sat Mar 7 12:54:39 CST 2020 armv5tejl
           _____     _
  _____  _|___ /  __| | _____   __
/ _ \ \ / / |_ \ / _` |/ _ \ \ / /
| __/\ V / ___) | (_| |  __/\ V /
\___| \_/ |____/ \__,_|\___| \_/
Debian stretch on LEGO MINDSTORMS EV3!
Last login: Sat Oct 31 16:44:25 2020 from 10.0.0.34
root@ev3dev:~#

登录后,通过运行命令“passwd”更改密码:

root@ev3dev:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

提供您的新密码,并确保记住它。从现在开始,您将在需要登录 EV3 Linux 系统时使用它。

转到 /root 文件夹并确保那里有可用的 blupants.json 文件

root@ev3dev:~# cd /root
root@ev3dev:~# ls
blupants_ev3_gripp3r.json blupants_ev3.json blupants.json
root@ev3dev:~#

现在,您可以使用您喜欢的文本编辑器(例如 nano 或 vi)来编辑文件。

root@ev3dev:~# vi blupants.json

或者

root@ev3dev:~# nano blupants.json
poYBAGN6XH-Afy0AAAA0JL-26Vc500.png
直接从 ssh 会话编辑 blupants.json
 

或者,您可以复制要在本地计算机上编辑的文件,并在那里使用它。为此,您甚至不需要在 ssh 会话上登录您的 Ev3。在您的本地计算机上,只需运行“scp”或“pscp”即可将 blupants.json 配置文件从机器人复制到您的计算机:

macOS / Linux
$ scp root@10.0.0.237:/root/blupants.json .
带有腻子的窗户
C:\Users\user>pscp -P 22 root@10.0.0.237:/root/blupants.json .

然后,您可以使用您喜欢的文本编辑器在本地计算机上打开 blupants.json 文件进行编辑。对于 Windows 用户,我们建议使用Notepad++ Notepad++ 可以在这里下载

pYYBAGN6XIKAFnINAADRp0PZf90963.png
使用 Notepad++ 在 Windows 计算机上编辑 blupants.json
 

访问下一部分,了解如何通过更改默认配置文件来校准您的机器人。然后,一旦你完成编辑,保存它,并将其复制回你的机器人:

macOS / Linux
$ scp blupants.json root@10.0.0.237:/root/blupants.json
带有腻子的窗户
C:\Users\user>pscp -P 22 blupants.json root@10.0.0.237:/root/blupants.json

永远记得用机器人的 IP 地址替换“10.0.0.237”。

请记住,配置文件必须符合 json 格式。如果您破坏它,机器人将停止工作,直到您提供另一个有效的配置文件。假设您完全破坏了 blupants.json 文件。如果发生这种情况,您需要做的就是从GitHub获取原始副本并将其恢复到您的机器人,替换损坏的文件。

例如,如果您需要恢复教育文件,请从此链接获取原始内容并使用“scp”或“pscp”将其复制回机器人的 /root/blupants.json 文件。如果您需要原始 Gripp3r 配置的副本,可以从此链接获取

现在您知道如何访问您的配置文件,让我们看看如何更改它以校准您的机器人并使其更准确。

校准您的机器人

要校准您的机器人,您需要编辑 blupants.json 配置文件。访问上一节以了解如何访问您的 blupants.json 文件以进行编辑。这是标准 blupants.json 文件的有效格式:

{
  "robot_id": 2,
  "name": "EV3",
  "use_opencv": false,
  "measurement_system": "m",
  "duty": 0.5,
  "block_length": 0.725,
  "period": 0.02,
  "enable_tts": true,
  "bluetooth_addr": "",
  "ev3":
  {
    "claw":
    {
      "servo": "a",
      "angle_open":  90,
      "angle_close": -90
    },
    "motor":
    {
      "position":
      {
        "front_left": 1,
        "front_right": 2,
        "back_left": 3,
        "back_right": 4
      },
      "duty_ratio": [1.0, 1.0, 1.0, 1.0],
      "turn_right_period": 0.007,
      "turn_left_period": 0.007
    },
    "camera":
    {
      "servo_horizontal": "c",
      "servo_vertical": "d"
    }
  }
}

永远不应更改该字段。"robot_id": 2对于所有乐高 Ev3 机器人,该值应始终为 2。

但是,可以自定义该字段"name",它将帮助您识别您的机器人,特别是如果您有多个机器人连接到同一网络。要有创意,给你的机器人起一个很酷的名字。

由于乐高硬件不幸不支持 OpenCV,因此该字段被忽略。"use_opencv"

现场"measurement_system": "m"告诉机器人在使用超声波传感器测量距离时使用公制。如果要使用皇家系统,将其更改为“r”:

"measurement_system": "r",

如果您使用的是红外传感器,则忽略此字段。测量值(范围从 0 到 60)将显示为厘米。

该字段"duty": 0.5告诉机器人在旋转车轮上使用的电机时使用 50% 的功率。它可以设置为从 0(无功率)到 1(全功率/100%)的任何值。

该字段"block_length"告诉您的机器人在当前任务向前移动一格时将行进多少。假设您正在处理一张小地图,您可能想要减小“block_length”的值。对于更大的地图,您可能需要增加它。

该字段"period"未使用。

该字段"enable_tts": true将启用文本到语音模块。如果要禁用它,请将其设置为 false。禁用 TTS 时,机器人执行命令的速度更快。如果您打算使用函数say() ,则需要启用 TTS 才能听到机器人说话。

字段"bluetooth_addr"未使用。

该字段"ev3"->"claw"->"servo":"a"定义了您连接爪式电机的端口。假设端口 A、B 和 C 已被占用,您需要将其连接到端口 D。将值更改为“servo”:“d”。

该字段"ev3"->"claw"->"angle_open":"90"告诉您的伺服电机必须旋转多少度,以便您的机器人可以张开爪子。类似地,"ev3"->"claw"->"angle_close":"-90"定义闭合角度。请注意,与 Gripper 相比,Educational 机器人将使用截然不同的角度。如果您组装一个完全不同的爪,根据其物理特性,您可能需要相应地自定义这些设置。

字段"ev3"->"motor"->"position"定义电机的顺序。如果您在编写 Ev3 时使用函数set_motors() ,这一点尤其重要

函数 set_motors() 使用在 "motor"->"position" 上定义的索引" src="https://file.elecfans.com/web2/M00/7C/89/poYBAGN6XIWACeU9AAEUuS8wNR0357.png" style="max-width:600px;" />
函数 set_motors() 使用在 "ev3"->"motor"->"position" 上定义的索引
 

字段"ev3"->"motor"->"duty_ratio": [1.0, 1.0, 1.0, 1.0],可用于补偿一个车轮旋转速度更快的一些问题。像这样的问题会阻止机器人直行。数组中的第一个“1.0”定义了位置“1”(默认为front_left)定义的电机的系数,第二个“1.0”是定义为位置“2”的电机的系数,依此类推。例如,假设您的机器人在编程为直线移动时会向左移动一点。如果这是因为右电机的运行速度比左电机快而引起的,您可以通过降低右电机的值来调整 duty_ratio 来弥补这一点。例如:

"duty_ratio": [1.0, 0.95, 1.0, 1.0],

它将使正确的电机运行速度慢 5%,并可能补偿由于一个电机运行速度比另一个电机快而引起的物理问题。

领域"ev3"->"motor"->"turn_right_period""ev3"->"motor"->"turn_left_period"是类似的。如果您将机器人编程为向右转 90 度,但实际上它最终只转了 60 度,您需要增加“turn_right_period”的值以正确校准它。同样,假设您将机器人编码为向左转 90 度,而它转为 140 度。您将需要减少“turn_left_period”值来解决这个问题。

当前未使用字段。"ev3"->"camera"它们旨在定义倾斜相机伺服连接到哪个端口。

参考

Lego Ev3 的 BluPants 图像基于开源项目ev3dev 我们要感谢 ev3dev 社区所做的出色工作。如果您想了解更多关于 ev3dev 的信息,请访问:www.ev3dev.org


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'如何让Lego Ev3机器人与BluPants一起工作',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);