搜索
查看: 5364|回复: 5

【第16届创客马拉松】自动捡球机器人

[复制链接]

2

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2015-8-24 17:31:55 | 显示全部楼层 |阅读模式
本帖最后由 killersue 于 2015-8-26 11:02 编辑

【自动捡球机器人】
不用养宠物,不用请球童,只要你肯动手,肯创造,自动捡球机器人,让你更享受网球运动~!!!
请看下面的动图展示,自动捡球机器人能够自动锁定网球,然后把球捡起来,是不是很萌很棒呢?

自动-1.gif


【工作原理】


它是怎么做到的呢?自动视觉识别捡球机器人,以Makeblock结构件搭建三轮车底盘,带有铲球机构和球框,配有摄像头,树莓派做主控,通过Orion控制两个25mm电机移动机器人,控制舵机带动铲球机构。摄像头抓取数据,通过算法过滤网球颜色以外的颜色,以识别出场景中网球的大小和位置,自动控制机器人走到网球前,并通过铲球机构把网球铲进球框中。


【制作方法】

  自动捡球机搭建过程

        整体BOM表

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁016
  
  
2
  
  
2
  
  
双孔梁160
  
  
7
  
  
3
  
  
双孔梁192
  
  
5
  
  
4
  
  
双孔梁176
  
  
1
  
  
5
  
  
8mm轴轮连接片
  
  
2
  
  
6
  
  
连接片45°
  
  
2
  
  
7
  
  
支架U1
  
  
1
  
  
8
  
  
支架P3
  
  
1
  
  
9
  
  
连杆
  
  
10
  
  
10
  
  
同步带轮90T
  
  
2
  
  
11
  
  
光轴 D4*80mm
  
  
2
  
  
12
  
  
传动固定盘
  
  
2
  
  
13
  
  
轴套 4mm
  
  
4
  
  
14
  
  
轴套 8mm
  
  
2
  
  
15
  
  
8mm轴夹紧器
  
  
2
  
  
16
  
  
8mm轴承支架A
  
  
2
  
  
17
  
  
25电机支架
  
  
2
  
  
18
  
  
螺母M4
  
  
100
  
  
19
  
  
M3*16  圆头十字螺丝
  
  
2
  
  
20
  
  
扎带 2*100mm
  
  
2
  
  
21
  
  
M4*8 半圆头内六角螺丝
  
  
50
  
  
22
  
  
M4*16  半圆头内六角螺丝
  
  
50
  
  
23
  
  
M4*18  半圆头内六角螺丝
  
  
50
  
  
24
  
  
M4*20  半圆头内六角螺丝
  
  
50
  
  
25
  
  
垫片 4*7*2mm
  
  
10
  
  
26
  
  
主控板
  
  
1
  
  
27
  
  
舵机驱动/RJ25适配器
  
  
1
  
  
28
  
  
主控板支架B
  
  
2
  
  
29
  
  
RJ25电线-20cm
  
  
1
  
  
30
  
  
RJ25转杜邦线
  
  
1
  
  
31
  
  
18650锂电池包(2节)
  
  
1
  
  
32
  
  
25直流电机 6V/185RPM
  
  
2
  
  
33
  
  
光轴D8*250mm
  
  
1
  
  
34
  
  
轴承 8*16*5mm
  
  
2
  
  
35
  
  
螺杆M4*80
  
  
2
  
  
36
  
  
光轴D4*80
  
  
2
  
  
37
  
  
花纹轮胎
  
  
2
  
  
38
  
  
万向轮
  
  
1
  
  
39
  
  
MECDS-150  舵机
  
  
1
  

步骤1

1.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁192
  
  
1
  
  
2
  
  
25直流电机 6V/185RPM
  
  
2
  
  
3
  
  
25电机支架
  
  
2
  
  
4
  
  
传动固定盘
  
  
2
  
  
5
  
  
同步带轮90T
  
  
2
  
  
6
  
  
花纹轮胎
  
  
2
  

(1)将25直流电机装入25电机支架(两个)。
(2)将同步带轮装入传动固定盘(两个)。
(3)将装好的同步带轮和传动固定盘一起装入电机的输出轴上(两个)。
(4)将装好的电机及车轮通过双孔梁装在一起。
(5)将花纹轮胎套在同步带轮上。

步骤二

2.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁192
  
  
1
  
  
2
  
  
支架P3
  
  
1
  
  
3
  
  
万向轮
  
  
1
  

(1)将支架P3装在双孔梁192的中间位置。
(2)将万向轮装入支架P3的孔中。

步骤三

3.jpg
  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁192
  
  
1
  

(1)用双孔梁192连接驱动车轮的双孔梁和传动万向轮的双孔梁。

步骤四

4.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁160
  
  
6
  

(1)将6个双孔梁160分别装在如图所示的位置上。

步骤五

5.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
MECDS-150 舵机
  
  
1
  
  
2
  
  
8mm轴夹紧器
  
  
2
  
  
3
  
  
8mm轴承支架A
  
  
2
  
  
4
  
  
光轴D8*250mm
  
  
1
  
  
5
  
  
垫片 4*7*2mm
  
  
2
  
  
6
  
  
支架U1
  
  
1
  
  
7
  
  
8mm轴轮连接片
  
  
2
  
  
8
  
  
轴承 8*16*5mm
  
  
2
  

(1)将8mm轴承支架A装在双孔梁160上的相应位置(两个)。
(2)将轴承 8*16*5mm装入8mm轴承支架A中(两个)。
(3)将8mm轴夹紧器和8mm轴轮连接片装在一起(两个)。
(4)用其中一个8mm轴夹紧器将8mm光轴安装固定在舵机的转动盘上。
(5)将装好的舵机和光轴装入8mm轴承支架及8mm轴承上。
(6)用支架U1将舵机安装固定。
(7)另一个8mm轴夹紧器装入8mm轴的另一侧,不用夹紧。

步骤六

6.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
双孔梁192
  
  
3
  
  
2
  
  
双孔梁176
  
  
1
  
  
3
  
  
连杆
  
  
2
  
  
4
  
  
双孔梁016
  
  
2
  
  
5
  
  
光轴D4*80
  
  
2
  
  
6
  
  
轴套4mm
  
  
4
  
  
7
  
  
螺杆M4*80
  
  
2
  

(1)将两个双孔梁016装在双孔梁176的两侧。
(2)将3个双孔梁192及装好的双孔梁016、176安装在一起。
(3)将4mm光轴装在双孔梁176上的对应位置,用轴套固定位置。(两个)
(4)将螺杆M4*80装在双孔梁016的螺纹孔上(两个)。
(5)将连杆装在相应位置(两个)。

步骤七

7.jpg

  
序号
  
  
零件名称
  
  
数量
  
  
1
  
  
连杆
  
  
6
  

(1)将装好的捡球机构和捡球机器人主车体装在一起。
(2)在主车体上进行连杆的安装(六个)。


【源代码地址
  首先贴上源代码的Git地址  https://github.com/YanMinge/Raspi_Opencv_Picking_Robot

【软件设计需求】
1. 树莓派 2开发板一块
2. Makeblock机械零件若干,详细可见帖子正文(已包含电机,舵机灯执行器件):
3. opencv 2.4.10 (使用其它版本可能会遇到兼容性问题)
4. Makeblock Orion主板一块
5. USB摄像头(尽量买linux免驱的摄像头,避免额外工作)
6. 充电宝一个(提供5V/2A输出给树莓派供电)

【Opencv的环境搭建】
我使用的opencv版本是 2.4.10, 在树莓派2上搭建该环境的方法可以参考这个网页说明 http://www.jb51.net/article/63103.htm
不习惯使用虚拟环境的同学可以在树莓派上直接搭建Opencv的开发环境,本人推荐用建立虚拟环境的方法,这样可以避免多个python版本或者多个opencv版本同时共存出现冲突问题。

【其他需要使用到的库】
除了opencv环境,设计中还需要使用到串口,因此 wiringpi,serial都是必须安装的。 如果选择虚拟环境安装的,请先进入虚拟环境再安装依赖库 ----- “workon XXXX“
(1) 安装wiringpi
sudo pip install -y wiringpi
(2) 安装 serial
sudo pip install -y pySeria

【程序说明】
(1)Orion中的程序是Orion板子的程序,Orion开发板是MakeBlock基于arduino UNO硬件开发的一块集成有蜂鸣器,电机驱动的主板。连线简易,可以快速打造一些DIY的作品。
Orion程序主要用来接收树莓派探测到的目标位置更新,然后根据这个目标位置,来控制执行机构的动作(电机和舵机).主控程序中设置了一个状态机来进行捡球这个动作 的分解,包括 找球(FIND_THE_BALL), 对准球的位置(WALKED_TURN_TO_BALL), 行驶到目标点(WALKED_AROUND_BALL), 捡球(PICKED_UP_BALL), 捡球结束(PICKED_UP_FINISH), 还有一个状态是超时检测,避免机器人进入控制死区。
(2)Raspi的程序主要完成对球的检测,利用opencv的 inRange 函数对球的颜色进行过滤,滤除环境中的其它干扰。然后利用opencv的基本形态转换erode(腐蚀),dilate(膨胀) 进行二次处理,如果摄像头视角内没有其它接近球体颜色的干扰,这个滤波效果基本就已经可以做到目标检索了。
      在代码设计中,我最初的设想是利用球体颜色做第一次过滤处理,然后再利用球体形状做第二次过滤处理,这样可以更大程度的避免外界环境的干扰。但实际测试中,网球经常不能被识别为圆形 (估计是受网球纹路和商标花纹的影响,所以我只能忍痛注释了这段代码)。少了这段代码,外界如果有和球体颜色接近的目标,会极大的干扰Picking Robot的工作。如果你是用的纯色的圆球,加上这段代码,应该可以让Piking Robot适应更加复杂的环境。

当当当当~~!!又帅又酷的手动机器人就这样搭建好了,想不想自己动手试试呢,赶紧行动起来吧

20150824185804.jpg

自动-3.gif
自动-2.gif
手动-3.gif
回复

使用道具 举报

0

主题

3

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2015-8-25 15:25:28 | 显示全部楼层
本帖最后由 Mark-Yan 于 2015-8-25 17:14 编辑

【源代码地址
  首先贴上源代码的Git地址  https://github.com/YanMinge/Raspi_Opencv_Picking_Robot

【软件设计需求】
1. 树莓派 2开发板一块
2. Makeblock机械零件若干,详细可见帖子正文(已包含电机,舵机灯执行器件):
3. opencv 2.4.10 (使用其它版本可能会遇到兼容性问题)
4. Makeblock Orion主板一块
5. USB摄像头(尽量买linux免驱的摄像头,避免额外工作)
6. 充电宝一个(提供5V/2A输出给树莓派供电)

【Opencv的环境搭建】
我使用的opencv版本是 2.4.10, 在树莓派2上搭建该环境的方法可以参考这个网页说明 http://www.jb51.net/article/63103.htm
不习惯使用虚拟环境的同学可以在树莓派上直接搭建Opencv的开发环境,本人推荐用建立虚拟环境的方法,这样可以避免多个python版本或者多个opencv版本同时共存出现冲突问题。

【其他需要使用到的库】
除了opencv环境,设计中还需要使用到串口,因此 wiringpi,serial都是必须安装的。 如果选择虚拟环境安装的,请先进入虚拟环境再安装依赖库 ----- “workon XXXX“
(1) 安装wiringpi
sudo pip install -y wiringpi
(2) 安装 serial
sudo pip install -y pySeria

【程序说明】
(1)     Orion中的程序是Orion板子的程序,Orion开发板是MakeBlock基于arduino UNO硬件开发的一块集成有蜂鸣器,电机驱动的主板。连线简易,可以快速打造一些DIY的作品。
         Orion程序主要用来接收树莓派探测到的目标位置更新,然后根据这个目标位置,来控制执行机构的动作(电机和舵机).主控程序中设置了一个状态机来进行捡球这个动作 的分解,包括 找球(FIND_THE_BALL), 对准球的位置(WALKED_TURN_TO_BALL), 行驶到目标点(WALKED_AROUND_BALL), 捡球(PICKED_UP_BALL), 捡球结束(PICKED_UP_FINISH), 还有一个状态是超时检测,避免机器人进入控制死区。
(2)    Raspi的程序主要完成对球的检测,利用opencv的 inRange 函数对球的颜色进行过滤,滤除环境中的其它干扰。然后利用opencv的基本形态转换erode(腐蚀),dilate(膨胀) 进行二次处理,如果摄像头视角内没有其它接近球体颜色的干扰,这个滤波效果基本就已经可以做到目标检索了。
        在代码设计中,我最初的设想是利用球体颜色做第一次过滤处理,然后再利用球体形状做第二次过滤处理,这样可以更大程度的避免外界环境的干扰。但实际测试中,网球经常不能被识别为圆形 (估计是受网球纹路和商标花纹的影响,所以我只能忍痛注释了这段代码)。少了这段代码,外界如果有和球体颜色接近的目标,会极大的干扰Picking Robot的工作。如果你是用的纯色的圆球,加上这段代码,应该可以让Piking Robot适应更加复杂的环境。

回复 支持 1 反对 0

使用道具 举报

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2016-3-15 23:31:48 | 显示全部楼层
请问raspberry pi 是通过什么连接方式连接到orion主板的?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2016-3-20 08:52:31 | 显示全部楼层
楼主好厉害!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2016-3-24 05:11:32 | 显示全部楼层
请问怎么给orien主板供电?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

23

积分

新手上路

Rank: 1

积分
23
发表于 2017-8-12 10:21:07 | 显示全部楼层
学习一下,让我重燃编程乐趣……
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|创客工场  

JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!

GMT+8, 2017-12-15 18:00 , Processed in 0.059121 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表