爱板网论坛

查看: 3693|回复: 20

[原创] 树莓派搭建基于Python3和OpenCV实现的解魔方机器人

  [复制链接]

主题

好友

806

积分

举人

  • TA的每日心情
    奋斗
    2018-9-9 22:36
  • 签到天数: 148 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-2-27 00:23:04 |显示全部楼层

    ————————————作品简介————————————

    我们的机器人是基于树莓派卡片计算机设计的嵌入式解魔方机器人。本机器人采用双手臂二指结构,机械部分使用的是飞思卡尔FRDM系列微控制器。机器人的基本功能由运行在嵌入式Linux系统上的模块化服务程序组来实现。本机器人可独立运行,也可通过LAN进行远程控制。作品配有音频视频输出,用户可实时获取计算机视觉图像。产品提供人机交互功能,设备可根据外部环境做出简单反应。未来的一段时间里,我将从机械设计和程序设计两方面进行讲解,看完本教程,大家将有能力做出属于自己的解魔方机器人,而且完全可以做的比我们更好。准备好了吗,我们的教程开始了!

    2018年5月12日

    ————————————教程部分————————————


    STEP1.机器人设计思路简单介绍

    其实网上一直有很多像是六爪或者四爪的解魔方机器人,虽然基本原理都大同小异,但是可以照着从头到尾把机器人做出来的这样一份资料却不容易找到,而且很多资料里面,一些具体功能的实现,使用的算法也介绍的比较模糊,这就加大了很多读者第一次做魔方机器人的难度。首先我来介绍下这个魔方机器人需要实现的一些基本的功能:1、机器人要能识别出魔方的六个面,也就是图像识别这一块,笔者使用的是opencv,这个是在树莓派上通过python实现的,后边会详细讲到;2、机器人要能计算出魔方的解法步骤,这个使用的是github上现成的项目,先卖个关子,后面会提到;3、机器人要能有专门的机械结构来实现解魔方的动作,这一块笔者使用的是42步进电机,因为之前做这个比赛是很需要速度的,当然,如果大家不介意那么几十秒的差距的话,便宜的舵机会是更好的选择。实现了上述三个主要功能,机器人基本就能正常运行了。有心的读者会发现电机的控制可能需要一块微控制器,其实树莓派用python直接控制GPIO理论上应该也是可以的,我没试过,感兴趣的读者如果尝试成功了,欢迎和我们交流。我个人还是建议大家选个单片机,51的啊,stm32的啊都很好的,笔者使用的是飞思卡尔的FRDM-KE06Z,至于为啥选这个板子,真没什么特别要说明的,长的好看吧,讨人喜欢,有爱板网以前的评测为证:“传承并颠覆着——时尚潮“板” FRDM-KE06Z评测”所以说了这么多,要做这个机器人,需要树莓派一只,单片机一只,电机用步进电机还是舵机,这里面有一些细微的差别会影响到后面程序和机械结构的设计,到时候我会提到,大家不用太在意,最后这个机器人一定能做出来的,放心啦。

    2018年5月15日

    STEP2.针对机器人的树莓派软件环境搭建

    机械结构的实现放到后面来讨论,因为这里面有一块和程序密切相关。今天要解决的是树莓派上软件环境的搭建,我们需要用到python3(包括python3的虚拟环境和RPi.GPIO模块)、魔方解算程序kociemba和OpenCV。

    Python3的虚拟环境。我们使用python3的pyvenv,创建一个MyProjects文件夹,cd进去,运行命令:

    1. pi@raspberrypi:~/MyProjects $ pyvenv venv
    复制代码

    楼主使用的是2018-04-18-raspbian-stretch,sudo apt update和upgrade过后,能直接使用。

    之后激活虚拟环境,用如下命令:

    1. pi@raspberrypi:~/MyProjects $ source ./venv/bin/activate
    复制代码

    如果成功,则新的提示符前端会带上(venv),像这样:

    1. (venv) pi@raspberrypi:~/MyProjects $
    复制代码

    然后我们来看一下$PATH:

    1. (venv) pi@raspberrypi:~/MyProjects $ echo$PATH
    2. bash: echo/home/pi/MyProjects/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory
    复制代码

    之后我们推出虚拟环境,用deactivate命令,推出后提示符前端的(venv)会消失,再看一下本来的$PATH:

    1. (venv) pi@raspberrypi:~/MyProjects $ deactivate
    2. pi@raspberrypi:~/MyProjects $ echo$PATH
    3. bash: echo/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games: No such file or directory
    复制代码

    两次的PTAH不一样,这样在虚拟环境中所做的更改不会影响到虚拟环境外面,这么做的好处在下面我们讨论编译安装OpenCV的时候会很明显。以上所有操作附个图,让大家有个直观印象。

    pyvenv

    pyvenv

    2018年5月30日



    树莓派的SWAP分区修改。由于OpenCV在编译时会大量使用内存和SWAP分区,常规的编译会导致内存和SWAP分区用尽进而系统失去响应。所以最好的方法是使用更大的SWAP分区。在树莓派上常用的更改交换分区大小的方法有两种,一种是仅在当前开机状态下有效的更改,这种更改在下次开机时会失效,系统SWAP分区会变回默认的100MB;另一种是一次更改永久生效的方法。鉴于本次修改只是为了编译OpenCV,我们使用第一种方法。注意,SWAP分区的大小可以使用htop命令查看,改软件可能需要通过apt安装才能使用。

    首先,进入到/var文件夹,ls命令可以看到swap文件。

    1. cd /var && ls
    复制代码

    swap1

    swap1

    然后,卸载swap文件。

    1. sudo swapoff swap
    复制代码

    接着使用htop可以看到swap变为0K,这就是成功了。

    swap2

    swap2

    然后我们创建一个更大的swap文件,使用下述命令:

    1. sudo dd if=/dev/zero of=swap bs=1M count=2048
    复制代码

    其中,count是新swap文件的大小,单位是bs参数中的1M,2048就是2GB。该命令完成需要四分钟左右,完成之前可以看到读写SD卡的绿色灯常亮。完成后的截图应该是这样的。

    swap3

    swap3

    之后装载新的swap文件,命令如下:

    1. sudo mkswap swap
    复制代码

    可以在htop中看到新的swap分区大小为1.75GB,嗯,这样就成功了。

    swap4

    swap4

    下面我们开始在树莓派上正式编译安装OpenCV3。

    2018年6月5日


    树莓派3b编译安装OpenCV-3.4.1。这一部分涉及的操作是配置软件环境步骤里最多的,我在经验频道单独写了一篇经验,请跳转完成剩下的操作:树莓派3b编译安装完整OpenCV-3.4.1 for Python3(http://jingyan.eeboard.com/article/76476),包过包教会。请先完成OpenCV的编译安装,测试无误后我们接着做后面的准备。到这里软件环境的搭建就过一半了,剩下的都是很简单的操作,将在下次更新。

    opencv

    opencv

    2018年7月3日






    回复

    使用道具 举报

    主题

    好友

    5126

    积分

    状元

    该用户从未签到

    发表于 2018-2-27 11:21:14 |显示全部楼层
    本帖最后由 ky123 于 2018-2-27 11:25 编辑

    先感谢分享,Python现在大火,我室友也在学呢。
    然后预祝你过初审。
    最后,可依教你什么情况下大家喜欢留言。
    第一,技术问题询问;
    第二,附件隐藏,评论可见。

    作为楼主,可控的是第二条。从操作上讲,你会不会隐藏呀?
    t01e57d0206a0c30d11.jpg


    回复

    使用道具 举报

    主题

    好友

    806

    积分

    举人

  • TA的每日心情
    奋斗
    2018-9-9 22:36
  • 签到天数: 148 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-2-27 14:16:16 |显示全部楼层
    ky123 发表于 2018-2-27 11:21
    先感谢分享,Python现在大火,我室友也在学呢。
    然后预祝你过初审。
    最后,可依教你什么情况下大家喜欢留言 ...

    为了看到更多的留言,这种操作是需要的呢
    12505728334358455516198F93AD17A68984B28D96.jpg
    回复

    使用道具 举报

    主题

    好友

    5126

    积分

    状元

    该用户从未签到

    发表于 2018-2-27 14:30:07 |显示全部楼层
    Litthins 发表于 2018-2-27 14:16
    为了看到更多的留言,这种操作是需要的呢

    是也
    t018f1133b5b1c18ab9.jpg

    回复

    使用道具 举报

    主题

    好友

    28

    积分

    白丁

    该用户从未签到

    发表于 2018-2-28 09:43:22 |显示全部楼层
    预祝你过初审,期待楼主更新。
    回复

    使用道具 举报

    主题

    好友

    806

    积分

    举人

  • TA的每日心情
    奋斗
    2018-9-9 22:36
  • 签到天数: 148 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-3-2 22:49:51 |显示全部楼层
    szlbz 发表于 2018-2-28 09:43
    预祝你过初审,期待楼主更新。

    谢谢,目前正积极准备答辩材料,机器人零件正在安排3d打印,预计下周能出答辩结果。
    回复

    使用道具 举报

    主题

    好友

    806

    积分

    举人

  • TA的每日心情
    奋斗
    2018-9-9 22:36
  • 签到天数: 148 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-4-6 23:44:49 |显示全部楼层
    冒个泡汇报一下进度
    我们的机器人现在解一个魔方大概需要25秒左右,速度相比半个月以前提升了300%
    图像识别这一块,由于受到嵌入式设备的性能限制,没法提速,所以只能从其他方面下手,目前正努力把总时间压缩到20秒以内。
    回复

    使用道具 举报

    主题

    好友

    5126

    积分

    状元

    该用户从未签到

    发表于 2018-4-10 09:13:52 |显示全部楼层
    Litthins 发表于 2018-4-6 23:44
    冒个泡汇报一下进度
    我们的机器人现在解一个魔方大概需要25秒左右,速度相比半个月以前提升了300%
    图 ...

    叮,扣以的
    回复

    使用道具 举报

    主题

    好友

    3

    积分

    白丁

    该用户从未签到

    发表于 2018-4-19 23:21:53 |显示全部楼层
    预祝顺利,楼主厉害
    回复

    使用道具 举报

    主题

    好友

    806

    积分

    举人

  • TA的每日心情
    奋斗
    2018-9-9 22:36
  • 签到天数: 148 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2018-4-20 00:20:04 |显示全部楼层
    wangxaiobai2015 发表于 2018-4-19 23:21
    预祝顺利,楼主厉害

    谢谢啦,借你吉言哦!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网

    GMT+8, 2018-9-25 06:02 , Processed in 0.126946 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部