前言这个六足机械人是我在大四做的,是我大学本科生活的最初一个小我项目。至于为什么我要做六足机械人,还要从高考完以后说起:那时刚考完的我一向想做一些成心机的工作,直到有一天我发现了一个叫PVCBOT的网站,里面记录了很多若何利用PVC材料来建造简单机械人的教程,其中有一款叫做PVC六足机械昆虫(见下图)的机械人完全震动了我,那时看完教程以后我就下定决心也要做一个类似的六足机械人,因而我便从懒猫侠先辈那边采办了六足机械人套件(今朝应当已经绝版了),并筹算依照供给的教程完成自己的六足机械人,但无法那时的我所把握的常识太少,什么单片机、串口通讯、舵机PWM、电源治理、传感器、舵机控制板等都不懂,出格是机械结构方面我更是一窍欠亨,所以大一那会儿我还闹出了笑话:用硬纸板做六足机械人的肢体,在安装好舵机并通电测试后,眼睁睁地看着自己的“纸板六足”在舵机的震动下不竭地解体。。。 PVC六足机械昆虫 经过大一那次失利以后,我决议临时停止该项目标开辟,转而先去进修那些有关嵌入式开辟的根本常识,等今后有才能的时辰再去自力完成这个六足机械人。很荣幸的是在我大学本科行将竣事的时辰,我已把握了充足的常识来完成阿谁已经困扰我已久的机械人项目,因而我花了几周的时候完成了这个六足机械人,算是了结了自己的一个心愿吧。 概述六足仿朝气械人是一个具有十八个枢纽自在度的迷你多足机械人,它可以实现红外遥控、超声波避障等根基功用。机械人的硬件焦点为Arduino Nano,并采用串口通讯的方式与24路舵机控制板停止数据交互,从而间接完成对一切舵机扭转角度的切确控制,终极使机械人可以以各类分歧的步态停止移动。固然,这个机械人项目标软件照旧开源,具体代码可以从我的GitHub仓库上获得。 六足仿朝气械人图1 建造六足机械人的全部建造进程首要分为机械和电子两部分,其中机械部分我是按照懒猫侠在其博客上公布的第五版六足肢体装配教程来完成一切拼装的,由于教程中每一步的图片都很是清楚,所以机械这部分没花费我太多的时候和精神。而电子部分则全数是我自己设想的,虽然道理难度不大,可是要按照机械人的机械结构来挑选洞洞板的摆放位置而且要完成其上电子元件的结构和焊接工作确切也比力费功夫,而且有的时辰假如处置的欠好还要返工,不外所幸自己在焊电路前就已经计划好了,所以电路部分的建造也还算顺遂。 在接下来的篇幅中,我会尽能够具体地讲授机械人建造进程中的一些具体步和谐细节,假如你对机械人的道理和最初的结果更感爱好的话,可以跳过本小节间接阅读道理和结果章节。 机械
以下图所示,六足的小腿部分首要由两片PVC材质的肢体经过叠加而成,而枢纽部分则利用的是9G金属齿舵机,只要两个自攻螺丝即可将PVC肢体牢安稳定在舵机上,从而保证六足小腿在与空中打仗时可以有充足的气力来支持全部躯体。 六足小腿1 由因而六足机械人,所以一样结构的小腿要再做五个出来。留意:机械人的躯体每边有三个小腿,左右两两对称,所以在组装的时辰肢体和舵机安装的位置是有讲求的,要保证结构对称且不能装反。 六足小腿2
枢纽 六足大腿的枢纽结构比之前先容过的小腿枢纽要稍微复杂一些,由于大腿的枢纽包括了机械人足体高低和前后两个维度的活动,所以需要两个舵机来实现。以下图所示,首先我们利用螺丝将一个舵机牢固在方形的枢纽肢体里。 六足大腿枢纽1 接着我们要反复以上的安装步调再建造出六个类似的肢体结构。不外在建造的进程中也要留意机械人左右两侧各三个肢体结构要连结对称。 六足大腿枢纽2 然后我们需要将六个舵机别离插入到之前预留好的肢体空槽里,并保证每组的两个舵机在位置上是相互垂直的,即下图中舵机圆形扭转轴的朝向要一前一上。 六足大腿枢纽3 接下来安装六足大腿枢纽的牢固片,行将牢固片卡到下图中正面阿谁舵机的圆形扭转轴上。牢固片,望文生义是用来牢固的,用在这里主如果避免枢纽处的两个舵机因足体的震动而相互之间出现位置上的偏移。 六足大腿枢纽4 最初别离利用两条塑料扎带对每组枢纽停止进一步的加固,其中一条从牢固片上方穿过,起到束紧牢固片的感化,而另一条则穿过枢纽侧面的小孔对结构停止牢固。 六足大腿枢纽5 大腿 六足的大腿是由两个PVC材质的长方形连杆组成,从下图中可以很清楚地看到每个连杆的左右两侧均安装有配套的舵盘,它们的感化主如果用于毗连六足的小腿枢纽和大腿枢纽。 六组大腿
以下图所示,利用螺丝将之前已经建造好的六对小腿和大腿肢体对应毗连在一路。虽然拧螺丝自己没什么难度,可是在哪个位置用螺丝来牢固舵机还是有规定的:即舵机在被肢体毗连牢固之前要让其扭转轴回归到原始的中点位置上(扭转范围为0~180°的舵机,其中点位置为90°),这样做的目标是让一切的舵机都可以具有最合适的活动范围,从而避免机械人在移动时出现足体活动差池称的情况。至于若何让舵机回归中点,一种法子是利用现成的舵机调试板,只要移动旋钮即可调理舵机的位置;另一种是编写Arduino法式,让舵机在上电后自动归中。我用的是第二种方式,感受结果还不错。 六足足体1 接下来,我们要把六足的足体全数安装到其顶部躯体上。同理,在安装前要确保需要毗连牢固的舵机已经回归到中点位置,除此之外还要提早规定好躯体的哪一侧是机械人的头部,哪一端是机械人的尾部,不要在安装的时辰把足体装反了。 六足足体2 如图所示,我们首先可以找一个稍微有点高度的物品将机械人顶部垫高,然后利用扎带依次将每个足体的三条舵机线绑缚起来,这样不但看上去加倍美妙,便于以后的整理和连线,而且也可以有用阻止舵机线与活动中的足体发生缠绕甚至被扯断等情况的出现,究竟自己大学在机械人基地的时辰就曾亲身履历过机电线在机械臂移动的进程中被狠狠地扯断的悲剧。。。 六足足体3 最初,我们只需要把锂电池用扎带牢固在底部躯体的尾部,然后将供电线和充电线别离引出,再把一切已经扎好的舵机线依照顺序塞到躯体傍边,并用螺丝将顶部和底部两个躯体拧紧合二为一便大功乐成了(由于这部分没有摄影,所以就用笔墨论述了orz)。 电子
下图是机械人的电源治理模块。电源治理模块首要包括电源、降压电路和控制电路等,具体的道理部分请看下面道理中的电源治理章节。 电源治理模块正面 下图是电源治理模块的后背。为了让焊接后的电路连结整洁、美妙,我尽能够采用锡接走线的方式来完成各元件的电气毗连,而没法子走线的地刚刚利用传统的飞线停止毗连。虽然锡接走线的优点很明显,可是它的弱点也比力突出:一个是浪费焊锡,另一个就是轻易短路,其中短路题目对机械人的影响还是挺严重的,我记得自己之前就有一次不谨慎把已经上电的电源治理模块随意放在六足机械人的顶部躯体上,令我没想到的是牢固躯体的螺丝的头部恰好卡在电路后背电源正负极锡接走线的中心,成果不可思议。。。 所以,在上电测试之前,大师要先用万能表对焊接过的电路停止短路测试,一定要确保没有过剩的焊锡渣残留在电路板上,而且对于利用锡接走线方式焊接的电路板,一定不要让厥后背间接与潜伏具有导电功用的介质停止打仗,可以适当天时用铜柱将板子架高大概用热熔胶把板子后背全都覆盖住,以避免短路题目标发生。 电源治理模块后背 在确保电路不存在任何能够潜伏的短路题目后,可像下图所示的那样,对电路模块停止上电测试。测试首要检测电源降压能否到达预期设定的数值,开关的通断逻辑能否正确等。 电源治理模块上电测试
下图是机械人的控制单元模块。该控制单元模块首要由Arduino Nano控制板、HMC58883L电子罗盘传感器、MPU6050惯性丈量传感器(图中的底座上未插入)、HC-SR04超声波传感器和红外接收管等组成,为了方便在模块出现题目时可以对其停止更换,我在洞洞板上焊接了一些棑母底座,这样模块便可以间接插在棑母底座上,拆卸很方便。此外,有关电路道理部分的具体先容可以阅读下面的道理章节。 控制单元模块正面 下图是控制单元模块的后背。跟上面已经先容过的电源治理模块一样,我利用的仍然是锡接走线+飞线的方式对元件停止焊接,由于电气毗连比力多,所以焊完以后要对电路停止加倍周全和仔细的检查。 控制单元模块后背 以下图所示,由于我的Arduino Nano控制板的USB转串口在之前的寻光小车尝试中因短路题目被烧坏了,所以我用的是专门为Arduino最小系统板烧写Bootloader的USBtinyISP编程器来下载法式。经测试,一切模块均能一般工作,那末接下来的工作就只剩下将机械人全数组装好,然后编写和调试代码了。 控制单元模块上电测试 道理硬件以下是该仿生六足机械人的硬件系统毗连图: 六足仿朝气械人道理图 由上图可知,六足机械人的硬件系统首要由舵机控制、电源治理、焦点主控、数据感知和数据通讯共五部分组成,接下来停止具体的先容:
金属齿舵机 本项目六足机械人所装备的舵机具体型号为YZW Y09G,由于该舵机内部机电减速齿轮组利用金属材质打造,所以其价格上要比常见的辉盛SG90塑料齿舵机贵一些,可是性能却相当出色。该舵机标准输入电压范围为4.8v~6.0v(电压稍大于6v也没题目),扭矩范围在1.3kg/cm~1.6kg/cm之间,经测试,十八个舵机配合感化的扭矩可以根基满足支持机械人躯体以及锂电池等相关负载的需求。固然,由于定位精度有限,所以舵机遇存在控制上的死区题目,我的处理法子主如果经过软件补差的方式来消除这个机械结构上的误差,使机械人可以尽能够正确地到达预定的方针位置。 舵机控制板 舵机控制板望文生义就是可以用于控制多个舵机的电路板,由于传统经过编写法式让单片机输出多路PWM控制信号对于大部分的机械人爱好者来说比力复杂,所以就有高手们将MCU和相关外围电路封装在一路开辟了便于利用的舵机控制板。此外,舵机控制板一般城市带有一个PC真个调试软件,只要在建立串口通讯的条件下拖动软件界面上的滑块,便能切确且实时地操控舵机的扭转角度,而且还能将调试好的行动组合在一路构成行动组并下载到舵机控制板的芯片中停止保存,为以后焦点主控经过串口对其停止挪用奠基根本。本项目六足机械人利用的是懒猫侠早期开辟的一款24路舵机控制板,具体利用方式见24路舵机控制板板利用说明。
电源治理应当算是机械人硬件控制系统里除了焦点主控之外最重要的模块了,究竟传感器坏了机械人还可以四周移动,可是电源部分坏了的话机械人可就只是一个静止的模子了。由于本项目六足机械人采用十八个舵机作为枢纽履行器,所以虽然9G舵机的耗电量相对标准舵秘密小很多,可是十八个舵机加起来所需要的电流巨细还是相当惊人的,是以经过一段时候的考量,我终极挑选了一款参数为7.4v 850mAh的锂电池组作为机械人的电源,其电能满足六足机械人的动力需求。 除了锂电池电源之外,从上面的硬件系统毗连图中还可以看到有两个降压电路,其中一个降压电路利用L2596 DC-DC模块将一路电源的电压降到标准的5V,用于给Arduino Nano主控制板供电,而另一路利用的是D25XB80大功率整流桥,它具有标称800V的最大逆向电压和25A的额定前向电流,在锂电池组布满电的情况下(标称7.4v的锂电池组布满电的电压大要在8.4v左右),毗连一片D25XB80可以使电压整体降到大要6.9v,经测试给24路舵机控制板和18个舵机供电是没有题目标。 最初为了方便控制锂电池电源的输入和降压后电源的输出,我并联毗连了三个开关,并在并联歧路中别离加入了三个LED灯用作电源闭合或断开的显现。关于电源治理的其他内容,大师可以参考一下懒猫侠写的六足机械人动力的分析 这篇博文。
焦点主控首要负责分析传感器反应返来的数据,然后给舵机控制板发出行动指令,间接驱动舵机运转到指定角度。在本项目中我利用的焦点主控为Arduino Nano,它体型较小,且具有很是丰富的开辟教程和器件驱动库,很轻易上手。
数据感知模块首要包括HC-04超声波测距传感器、HMC5883L电子罗盘传感器、MPU6050惯性丈量传感器和红外接收管,其中超声波测距传感器用来帮助六足机械人避开其正前方的障碍物,而红外接收管则和常见的迷你红外遥控器一同组成了全部六足机械人的遥控系统,红外接收管可以接收经过38kHz载频二次调制天生的红外信号,并将解码后的数据发送给Arduino Nano主控停止相关处置。HMC58883L和MPU6050这两个传感器首要用于六足机械人的活动感知,经过收集它们的数据并停止简单的融合处置便能获得机械人在空间中的位置关系,从而为以后批改机械人在移动进程中的途径误差供给数据上的保障。不外由于那时开辟时候有限,所以这一部分暂未触及。
数据通讯包括红外通讯、串口通讯和蓝牙通讯三部分。其中,红外通讯在上面的数据感知部分已经停止过简要的先容了,即采用NEC的编码格式将数据停止响应的编码或解码,并经过红外线的方式完成遥控指令数据的传输;串口通讯则首要用在焦点主控和舵机控制板之间,按照舵机控制板所规定的数据格式,主控可以发送指令来控制一个舵机或多个舵机扭转到指定的位置;最初的蓝牙通讯可以使PC端上的软件与舵机控制板之间建立起无线毗连,方便六足机械人行动的调试。 软件
hexapod_bionic_robot.h 该头文件界说了 #define HEXAPOD_BIONIC_ROBOT_H #include <Arduino.h> #include <IRremote.h> #define PIN_IR 2 #define PIN_TX 3 #define PIN_RX 4 #define PIN_TRIG 5 #define PIN_ECHO 6 #define PIN_LED 13 #define DIR_INIT 1 #define DIR_STOP 1 #define DIR_FRONT 2 #define DIR_BACK 3 #define DIR_LEFT 4 #define DIR_RIGHT 5 #define MODE_REMOTE 25 #define MODE_AUTO 26 #define RADIX 10 #define RUNTIME 2400 #define TIMEOUT 30000 class HexapodBionicRobot { public: HexapodBionicRobot(IRrecv *ir_receiver, decode_results *ir_results); void avoidFrontObstacle(void); void handleInfraredInformation(void); void handleUltrasonicDistance(void); void moveRobotBody(uint8_t direction, uint8_t times); uint32_t getInfraredInformation(void); float getUltrasonicDistance(void); private: int mode_flag_; float duration_; float distance_; IRrecv *ir_receiver_; decode_results *ir_results_; }; #endif // HEXAPOD_BIONIC_ROBOT_H hexapod_bionic_robot.cpp 该源文件实现了 #define DEBUG 1 HexapodBionicRobot::HexapodBionicRobot(IRrecv *ir_recviver, decode_results *ir_results) : ir_receiver_(ir_recviver), ir_results_(ir_results) { pinMode(PIN_LED, OUTPUT); pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); mode_flag_ = MODE_REMOTE; duration_ = 0.0; distance_ = 0.0; } void HexapodBionicRobot::avoidFrontObstacle(void) { float distance = getUltrasonicDistance(); Serial.println(distance); if (distance == false) { return ; } else if (distance <= 2.5) { moveRobotBody(DIR_STOP, 2); } else if (distance <= 5.0) { moveRobotBody(DIR_BACK, 2); } } void HexapodBionicRobot::handleUltrasonicDistance(void) { float distance = getUltrasonicDistance(); if (distance == false) { return ; } else if (distance <= 5.0) { digitalWrite(PIN_LED, HIGH); #if DEBUG Serial.println("Warning! Distance is too close!!!"); #endif } else { digitalWrite(PIN_LED, LOW); } #if DEBUG Serial.print("Distance: "); Serial.print(distance); Serial.println("cm"); #endif delay(100); } void HexapodBionicRobot::handleInfraredInformation(void) { float distance = 0.0; uint32_t ir_results = getInfraredInformation(); if (ir_results == false) { return ; } else { #if DEBUG Serial.print("Infrared code: "); Serial.println(ir_results, HEX); #endif if (ir_results == 0XFF629D) { mode_flag_ = MODE_REMOTE; } else if (ir_results == 0XFFE21D) { mode_flag_ = MODE_AUTO; } if (mode_flag_ == MODE_REMOTE) { digitalWrite(PIN_LED, LOW); if (ir_results == 0xFF02FD) { moveRobotBody(DIR_FRONT, 2); delay(RUNTIME); } else if (ir_results == 0xFF9867) { moveRobotBody(DIR_BACK, 2); delay(RUNTIME); } else if (ir_results == 0xFFE01F) { moveRobotBody(DIR_LEFT, 2); delay(RUNTIME); } else if (ir_results == 0xFF906f) { moveRobotBody(DIR_RIGHT, 2); delay(RUNTIME); } else if (ir_results == 0xFFA857) { moveRobotBody(DIR_STOP, 2); delay(RUNTIME); } avoidFrontObstacle(); } else if (mode_flag_ == MODE_AUTO) { digitalWrite(PIN_LED, HIGH); while (ir_results != 0XFF629D) { ir_results = getInfraredInformation(); moveRobotBody(DIR_FRONT, 2); delay(RUNTIME); avoidFrontObstacle(); } mode_flag_ = MODE_REMOTE; } } } void HexapodBionicRobot::moveRobotBody(uint8_t direction, uint8_t times) { char string_direction[5]; char string_times[5]; itoa(direction, string_direction, RADIX); itoa(times, string_times, RADIX); Serial.print("#"); Serial.print(string_direction); Serial.print("G"); Serial.print(string_times); Serial.println("C"); } uint32_t HexapodBionicRobot::getInfraredInformation(void) { if (ir_receiver_->decode(ir_results_)) { ir_receiver_->resume(); return ir_results_->value; } else { return false; } } float HexapodBionicRobot::getUltrasonicDistance(void) { duration_ = 0.0; distance_ = 0.0; digitalWrite(PIN_TRIG, LOW); delayMicroseconds(10); digitalWrite(PIN_TRIG, HIGH); delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); duration_ = pulseIn(PIN_ECHO, HIGH, TIMEOUT); if (duration_ == 0.0) { return false; } else { distance_ = duration_ * 0.017; return distance_; } }
hexapod_bionic_robot_test.ino 该测试代码的道理很是简单,首先 #include <hexapod_bionic_robot.h> IRrecv g_ir_receiver(PIN_IR); decode_results g_ir_results; void setup() { Serial.begin(115200); Serial.println("#1G2C"); g_ir_receiver.enableIRIn(); } void loop() { HexapodBionicRobot hexapod_bionic_robot(&g_ir_receiver, &g_ir_results); hexapod_bionic_robot.handleInfraredInformation(); } 功效以下是建造完成后的功效图和测试视频: 六足仿朝气械人图2 六足仿朝气械人图3 六足仿朝气械人图4 六足仿朝气械人图5
总结回忆起当初,自己就是看了六足机械昆虫-你的下一个足式移动机械人这篇教程才起头迷上六足机械人的,没想到大四快结业的时辰自己能有机遇完成这个属于自己的六足仿朝气械人,说真话当看到六足机械人第一次从团身状态下依靠自己的气力站立起来时,我的心里是非常冲动的,虽然由于舵机的力矩偏小致使机械人的足体在支持空中时会有稍微吱吱的发抖,可是得益于十八个枢纽自在度,六足机械人可以做出很多机械人都没法做出的复杂行动,我想这也许就是多足机械人的魅力地点吧! 不外话说返来,对于机械人初学者来说,建造一个六足机械人的难度相较于轮式机械人还是很是大的,而且投入的时候和资金本钱也比力多。假如你的脱手才能和技术水平充足强,且跟我一样以为六足机械人很是酷的话,你也可以尝试去做一台属于自己的六足机械人并为它扩大更多成心机的功用(比如我加入了MPU6050和HMC5883L模块来做机械人活动感知与改正,惋惜因时候有限没能实现)。最初我总结一下能成功便宜六足机械人所需要的三个关键身分:1、从始至终发自心里的酷爱;2、具有机械、电子和软件方面的专业常识;3、为实现终极方针而对峙不懈的尽力! |
写在前面的话:这是4月11日,我在太火鸟主办的蛋年创新大会上的分享,整理文字后,在
作为电子科学与技术or集成电路or微电子专业的学生,相信大家都深深体会过被《半导体物
一、一些背景介绍做硬件之前我一直在互联网金融行业,做过P2P平台、现金贷产品和信贷
半导体是这两年国家重点发展的行业,到底什么是半导体?生活中所有的物体按照导电性大
我的教育背景是化学类专业,但我却误打误撞地成为了一名芯片制造行业(半导体行业)的
昨天中兴董事长殷一民召开记者会,在记者会上说,美国制裁将使公司立即休克,但我们绝
以下文章来源于很无名少年 ,作者很无名少年。对半导体感兴趣的朋友可以关注从业者石
在软件行业中,工业软件是一个小众产业,却是工业制造的大脑和神经,在产业链中发挥关
来源:内容来自「老和山下的小学僧」,谢谢。芯片,以储量最丰富成本最廉价的二氧化硅
芯片测试主要分两种:实验室测试和量产测试。从名字就知道,实验室测试一般是应用工程
今年11月初在北京召开的 IEEE/RAS Humanoids 会议中,作者去听了这样一个Workshop: Hu
前言这个六足机器人是我在大四做的,是我大学本科生涯的最后一个个人项目。至于为什么
华为的芯片是在2022年9月15日这天正式断供的,距今已经快8个月的时间了,我们聊聊看目
015月5日晚,中国最大、也是最先进的半导体晶圆厂——中芯国际,突然宣布将在国内科创
先进制造业·导读◇中国制造“大而不强”,突出表现是工业软件弱小和受制于人。没有强
家庭装修的小伙伴们注意了,是时候该为自家装套智能家居了,智能家居包括智能窗帘、智
大家都是电子行业的人,对芯片,对各种封装都了解不少,但是你知道一个芯片是怎样设计
关注了咱们差评的小伙伴肯定还记得,上个月的时候我们讨论了一下苹果造的那颗胶水芯片
看行业分析报告就上搜搜报告,每日不定时更新各行业报告、券商报告、外刊、金融电子书
我的同事大痣童鞋,根据她近两年来使用小米智能家居的亲身体验,从省钱又实用的角度,
声明:本站内容由网友分享或转载自互联网公开发布的内容,如有侵权请反馈到邮箱 1415941@qq.com,我们会在3个工作日内删除,加急删除请添加站长微信:15314649589
Copyright @ 2022-2044 杭州共生网络 www.gongshengyun.cn Powered by Discuz!