機器人研究一直是我很早以前的夢想,沒有想到在深入研究.Net Micro Framework同時能和機器人搭上了聯系。
美國iRobot作為一家大型的機器人軍工機械廠,其家用機器人吸塵器(電不足時能自動充電的機器人)已經讓iRobot公司名滿天下。我們研究的機器人就是iRobot公司推出了的新作——一個可以自己程式設計的機器人移動平台iRobot Create。
由于最近才從微軟拿到這個機器人,是以我們第一步就是先要了解這個機器人,然後MF才能作為它的大腦控制該機器人。
讓我們先一睹iRobot Create的“芳容”。
iRobot Create 和充電基座(Home Base)
iRobot Create 和BAM藍牙子產品
iRobot Create有六類共31條控制指令,即能控制機器人行走、旋轉、播放音樂,也能獲知32個内置傳感器資訊(輪是否擡起、是否是懸崖、前方是否有牆、左右碰撞檢測等等)。通過序列槽和iRobot Create進行通信(預設波特率57600).
//27号資訊包
public UInt16 WallSignal; //牆反射的無線信号強度 0 - 4095 高位元組在前
//28号資訊包
public UInt16 CliffLeftSignal; //左懸崖信号強度
//29号資訊包
public UInt16 CliffFrontLeftSignal; //左前懸崖信号強度
//30号資訊包
public UInt16 CliffFrontRightSignal; //右前懸崖信号強度
//31号資訊包
public UInt16 CliffRightSignal; //右懸崖信号強度
//32号資訊包
public bool BpsChange; //波特率發生改變
public bool DI_3; //DI輸入
public bool DI_2;
public bool DI_1;
public bool DI_0;
//33号資訊包
public UInt16 AI; //模拟入 0 -1023(5V) 高位元組在前
//34号資訊包
public bool HomeBase; //是否到家
public bool InternalCharger; //是否充電
随便拿出一段代碼,你就會發現iRobot Create可擷取大量有效的傳感器資訊(這樣的資訊包有四十多個)。
為了便于研究iRobot Create,我先用C#編寫一個Windows程式(該程式通信控制部分和MF程式沒有太大的差別,僅序列槽操作有細微差别),通過藍牙子產品(序列槽)和機器人進行通信(也可以用序列槽線連接配接,但是這樣控制起來不友善)。
在調試過程中發現藍牙子產品的通信性能和序列槽線相比,有一定差別,那就是延時較大(一般序列槽線直連15ms延遲就能保證通信收發成功,藍牙通信一般需要50ms之上延遲,才能保證通信成功)。控制界面如下。
機器人控制本身就是一個很大的課題,是以我們這裡也無法一次說個完整和明白,今後我會陸陸續續發些相關文章的。我們今天先說說iRobot Create該充電時是如何找到“家”的(我想大家一定對這個感興趣)。
iRobot Create畢竟是一個簡單的機器人,是以千萬不要和它捉迷藏,Homebase一定要放在室内開闊地帶(iRobot Create是通過紅外信号發現Homebase的是以中間最好不要有遮擋物,否則iRobot Create有可能要找一陣子)。
Homebase有兩個紅外發射管,可充當位置标記(一個為Green Buoy,一個為Red Buoy)。在iRobot Create頭上有一個全方位紅外接收頭,可以接收到Homebase發出的紅外資訊。
可收到的紅外指令如下:
iRobot Create就是根據以上資訊,不斷地調整自己的方位,找到回家的路。