基于edison的自动抓取机器人
基于edison的动抓取机器人远程机械臂去抓取物体时,一般情况下我们会人工去控制每一个舵机的转动角度,但是由于视差以及人工操作的不可控性使抓取操作变得不那么简单。在自动抓取机器人中我们通过edison进行图像分析处理,自动调节机械臂与物体之间的相对位置,当图像于抓取位置图像相吻合时,再通过过距离传感器消除视察实现自动抓取。
硬件组成:1.Intel Edison & Arduino Breakout Kit ×12.Tplinkw703n(刷入openWRT) ×13.L298N ×24.直流减速电机 ×45.摄像头 ×16.舵机 ×5 第一部分:设置GPIOGPIO python来驱动GPIO
import mraaprint (mraa.getVersion())
x = mraa.Gpio(13)
x.dir(mraa.DIR_OUT)
x.write(1)
第二部分:封装轮子
[*]class Wheel:
[*] pins ={'a':,'b':,'c':,'d':}# 这里指定了四个轮子所使用的8个GPIO接口
[*] def __init__(self,name):
[*] self.name = name
[*] self.pin = Wheel.pins
[*] GPIO.setmode(GPIO.BOARD)
[*] GPIO.setup(self.pin,GPIO.OUT)
[*] GPIO.setup(self.pin,GPIO.OUT)
[*] self.stop()
[*] def forward(self):
[*] GPIO.output(self.pin,GPIO.HIGH)
[*] GPIO.output(self.pin,GPIO.LOW)
[*] def stop(self):
[*] GPIO.output(self.pin,False)
[*] GPIO.output(self.pin,False)
[*] def back(self):
[*] GPIO.output(self.pin,False)
[*] GPIO.output(self.pin,True)
[*]Wheel('a').forward() #a,b,c,d是四个轮子的名字
通过调用每个Wheel实例,可以对他们自由操作。由于整个车是由四个轮子协同来工作的,我们需要同时来让四个轮子一起工作,对此对这种协同工作进行封装,让我们不必在关心怎样驱动4个轮子就可以前进了:
第三部分: 封装车子前进、后退、左转、右转,封装一下代码
[*]class Car:
[*] wheels=
[*] @staticmethod
[*] def init():
[*] GPIO.setmode(GPIO.BOARD)
[*] @staticmethod
[*] def forward():
[*] for wheel in Car.wheels:
[*] wheel.forward()
[*] @staticmethod
[*] def back():
[*] for wheel in Car.wheels:
[*] wheel.back()
[*]
[*]
[*] @staticmethod
[*] def left():
[*] Car.wheels.forward()
[*] Car.wheels.forward()
[*] Car.wheels.back()
[*] Car.wheels.back()
[*] @staticmethod
[*] def right():
[*] Car.wheels.forward()
[*] Car.wheels.forward()
[*] Car.wheels.back()
[*] Car.wheels.back()
[*] @staticmethod
[*] def stop():
[*] Car.wheel.stop()
[*] Car.wheel.stop()
[*] Car.wheel.stop()
[*] Car.wheel.stop()
[*]
[*]
[*]远程遥控小车,因此小车必须提供和外部遥控设备的通信接口:
[*]
第四部分:通信程序选择了Wifi的方式,所以使用socket作为接口最直接不过了:
[*]rom socket import *
[*]import sys
[*]import time
[*]import car
[*]
[*]commands ={'forward':Car.forward,
[*]'back':Car.back,
[*]'stop':Car.stop,
[*]'left':Car.left,
[*]'right':Car.right
[*]}
[*]
[*]def execute(command):
[*] print command
[*] commands()
[*]
[*]HOST ='192.168.2.101' #the ip of edison
[*]PORT = 8888
[*]s= socket(AF_INET, SOCK_STREAM)
[*]s.bind((HOST, PORT))
[*]s.listen(1)
[*]print ('listening on 8888')
[*]while 1:
[*] conn, addr = s.accept()
[*] print ('Connected by:', addr)
[*] while 1:
[*] command= conn.recv(1024).replace('\n','')
[*] if not command:break
[*] execute(command)
[*] conn.close()
> sudo python server.py 之后,edison会监听8888端口一旦有消息传递过来,根据命令参数调用相应的方法。小车的服务端接口就相当一个执行者,接受到命令就立刻执行,此次只要可以建立和小车的socket连接,便可以轻松控制。
第五部分: 手机操作小车通过手机来操作,实际上就通过socket和edison进行通信,当edison处于listening状态,对于手机来说,它要做的最重要的事情就是发送消息到edison,成为一个小车的指挥者:
[*]package com.simplexk;
[*]import java.io.PrintWriter;
[*]import java.net.Socket;
[*]
[*]public class Commander {
[*] public static String HOST ="192.168.2.101"; //the ip of edison
[*] public static int PORT =9000;
[*] public static void send(Command forward) throws Exception {
[*] Socket socket = new Socket(HOST, PORT);
[*] PrintWriter writer = new PrintWriter(socket.getOutputStream());
[*] writer.println(forward.toString());
[*] writer.flush();
[*] socket.close();
[*] }
[*]}
第六摄像头
1:tplinkw703n刷入openwrt进行图像采集
2:通过http://192.168.1.1:8080/?action=stream获取图像
3.703n除作为图像采集外,还作为路由器,将客户端(手机或电脑)与edison链接,通过wifi进行图像传输和控制
4.采集后的图像通过opencv进行识别和处理,作为控制信号。控制机械臂抓取物体。
5.由于采集图像与真实情况存在误差,不能准确的抓取物体,需要在机械臂爪臂上增加距离传感器,与图像识别相结合进行物体的抓取。
第七网页
<html>
<head>
<title>Edison</title>
</head>
<body>
<table width="915" border="1" cellpadding="2">
<tr>
<td width="432" height="326"><div align="left"><input type="button" value=" " style="height:80px; width:80px;"/>
<input type="button" value="Go" style="height:80px; width:80px;"/>
<input type="button" value="" style="height:80px; width:80px;"/>
<input type="button" value=" Servo11 " style="height:80px; width:80px;"/>
<input type="button" value="Servo12" style="height:80px; width:80px;"/>
<input type="button" value="Left" style="height:80px; width:80px;"/>
<input type="button" value="Stop" style="height:80px; width:80px;"/>
<input type="button" value="Right" style="height:80px; width:80px;"/>
<input type="button" value=" Servo21 " style="height:80px; width:80px;"/>
<input type="button" value="Servo22" style="height:80px; width:80px;"/>
<input type="button" value="" style="height:80px; width:80px;"/>
<input type="button" value="Back" style="height:80px; width:80px;"/>
<input type="button" value="" style="height:80px; width:80px;"/>
<input type="button" value=" Servo31 " style="height:80px; width:80px;"/>
<input type="button" value="Servo32" style="height:80px; width:80px;"/>
<input type="button" value="Auto" style="height:80px; width:80px;"/>
<input type="button" value="camera11" style="height:80px; width:80px;"/>
<input type="button" value="camera12" style="height:80px; width:80px;"/>
<input type="button" value="camera21" style="height:80px; width:80px;"/>
<input type="button" value="camera22" style="height:80px; width:80px;"/>
</div></td>
<td width="463"><iframe src="192.168.1.1:8080/?action=stream" width="320" height="240"> </td>
</tr>
</table>
</body>
</html>
wow~ ⊙o⊙最近流行这夹子吗 出现率好高哦~ 不过项目很棒的样子 赞一个! 有超级详细教程吗?我的学生需要。 图好小,不清晰,下次麻烦弄清晰无码大图,谢谢,哈哈 希望能够更详细 这样子大家都可以试试看 你这不是做的挺多的了吗,快做完了啊。。。
软件有可能的话,可以共享一下啊。。。。嘻嘻 希望教程能详细一点,我也想做一个 大连林海 发表于 2015-9-2 21:37
希望能够更详细 这样子大家都可以试试看
明天更新教程 孙毅 发表于 2015-9-2 21:51
你这不是做的挺多的了吗,快做完了啊。。。
软件有可能的话,可以共享一下啊。。。。嘻嘻 ...
明天上教程 dsweiliang 发表于 2015-9-5 08:16
希望教程能详细一点,我也想做一个
好滴,这两天再准备教程 凌风清羽 发表于 2015-9-7 19:33
好滴,这两天再准备教程
好的,谢谢 教程,教程,坐等教程:lol 好像还没看到教程啊。。 woaian250 发表于 2015-11-14 01:04
好像还没看到教程啊。。
凌风 同学最近有点忙哦。。。吼吼 孙毅 发表于 2015-11-15 11:06
凌风 同学最近有点忙哦。。。吼吼
{:5_161:} 凌风同学加油。 恩,先给加个精儿把,等待凌风同学继续更新,完善啊! 孙毅 发表于 2015-11-22 23:09
恩,先给加个精儿把,等待凌风同学继续更新,完善啊!
每天都过来看一眼= ={:5_197:} woaian250 发表于 2015-11-24 11:12
每天都过来看一眼= =
哈哈哈,得让他知道,他有这么忠实的粉丝,赶紧上贴!
话说,他这周期末考试了吧。。。哈哈哈 想做个能自动识别的,感觉这个给我的启发很大,坐等凌风同学更新!
{:5_172:}可以再试着加个外观,会更有趣 教程很棒,好好学习。谢谢分享。
页:
[1]
2