PSALMS公司

诗篇是吉多·巴格曼为唐纳德·罗德尼建造的自动轮椅1997年,伦敦南画廊举办的“埃尔多拉多九夜”。

“……我们对自动机的恐惧再次被《诗篇》所驾驭,因为空空的轮椅在一段悲伤而孤独的人生旅程中,沿着它的各种轨迹行进,一段无处可去的旅程。它的动作重复着,就像一个不断重复的记忆,一个对另一个生命和另一个旅程的记忆,就像唐纳德·罗德尼的父亲一样……”
(展览手册,简·比尔顿。)

诗篇。2018年9月28日至10月21日,在普利茅斯议会大厦展出大西洋项目。

聚光灯1
诗篇8聚光灯10

1997年伦敦南部画廊“埃尔多拉多九夜”开幕式上的诗篇。

短文发表于媒体空间:http://www.mike-phillips.net/blog/wp-content/uploads/2014/01/mediaspace4.pdf
媒体空间4_page_21
媒体空间4_page_23

作品还展出于:

“不应低估罗德尼作品的政治意义,也不应低估他继续激励年轻艺术家的遗产。”(Keith Piper,Co-curator)。

Guido Bugmann博士的网页追踪了委员会的各种安装和技术细节。
http://www.tech.plym.ac.uk/soc/staff/guidbugm/wheelchair/wheelc.htm
(此处为pdf版本)。
20160922_160322
重启2016。
轮椅使用8个声纳传感器、轴编码器、摄像机和速率陀螺仪来确定其位置。使用归一化RBF节点的神经网络对形成轨迹的25个半圆位置序列进行编码。控制系统包括一台运行用CORTEX-PRO编写的控制程序的笔记本电脑586,并与围绕68000微控制器构建的Rug Warrior板相连。
《诗篇代码》原件(稍作修改)(由吉多·巴格曼提供):

/*嘘!!1*///程序WCSHOW8.CTX//版本97年9月14日,98年3月15日,2003年2月,2008年10月(INIVA画廊伦敦)//版本2009年11月//2012年6月-7月版威康展览//轮椅项目97//wcshow2.ctx的修正//wcshow3.ctx中的轨迹编码//来自wcshow6.ctx/*SH1!1*///变量//新建。包括房间尺寸/*HS!!2*//----------通信变量--------------int Eureka=104,scope_data=110,gyro_data=105,gyror_reset=125int reset_shaft_xyphi=120int battery_data=106整数iint ok_byte=33,ready_byte=44,sending_byte=55,command_send=66int stop_byte=77,stop_motors=99,motor_command=107int消息字节,b1,b2,b3int serial_count,serial_cont_limit=500//限制越小越好浮点float_dataint left_speed=1,right_speed=1向右浮动速度所需=0浮点left_speed_desired=0/*HH2!2*//----------位置变量--------------浮子PI=4*弧(1)浮点phi2,angle1,angle2,delta_phi,angle_difference浮点x_wc=0,y_wc=0.,phi_wc=0浮点x_wc_shift=0,y_wc_shift=零,phi_wc_shift=0浮点old_x_wc=0,old_y_wc=0.,old_phi_wc=0浮点dxwcdt浮点x_wc_predict、y_wc_predict和phi_wc.predict浮动上一个hi_wc、上一个x_wc和上一个y_wc浮子x轴、y轴、phi轴浮动w_x_shaft,w_y_shaft,w_phi_shaft,w0_shaft浮子dx轴dt、dy轴dt和dphi轴dt浮动旧x轴、旧y轴、旧ph轴浮子陀螺、w0陀螺、wp陀螺、dphigyro_dt浮点phi_camera、w_phi_camera和d_phi_camera_dt浮点phi_cam1,phi_cam2浮动x声纳、y声纳、phi声纳浮动w0_sonar、wx_sonar,wy_sonar和w_phi_sonar浮点dx_sonar_dt、dy_sonar-dt、dphi_sonar/dt浮子last_time_shaft,last_time_motor/*HH2!2*//--------轮椅---------浮动增量r=56.5/*HH2!2*//-------------威康信托的运营规模------------浮点max_room_xcm=1000//694浮点数max_room_ycm=1100//1005/*HH2!2*//----------------轨迹---------------//新int节列表[32]/*HH2!2*//--------------神经网络--------------//新浮点θ,θ_下一个,rint步数_nb_max=16int k,当前网格int节_大小[40]/浮子截面_boost=150/基于旧节/浮子截面_boost=50/基于新节点的轨迹float section_boost=90//使用1进行测试。应该是90/基于新节点的现场绘图/浮子截面_boost=0.3/基于非常新的节点+sigma的轨迹浮点强制下一状态/*HH2!2*//----------速度变量----------//新浮子部分_速度[200]int current_section、temp_left_speed和temp_right_speed/*HH2!2*//------------声纳--------------int键盘,颜色,声纳,alarm_persistence=0浮点time_since_last_alarm=0,time_of_last_larm=0int min_range_check=20,max_sonar_array=1500int echo[max_sonar_array]浮点查找标记,xs,ys浮点sonar_dir[8+1],sonar_range[8+1],old_sonar_range[8+1int前障碍,左障碍,右障碍sonar_dir[1]=-PI/2sonar_dir[2]=3*PI/4sonar_dir[3]=-PIsonar_dir[4]=PI/2sonar_dir[5]=PI/2sonar_dir[6]=PI/2sonar_dir[7]=0sonar_dir[8]=PI/4声纳_x[1]=0声纳y[1]=-10声纳_x[2]=-26声纳y[2]=7声纳_x[3]=-26声纳y[3]=37声纳_x[4]=-26声纳_y[4]=51声纳_x[5]=0声纳_y[5]=51声纳_x[6]=26声纳_y[6]=51声纳_x[7]=26声纳_y[7]=37声纳_x[8]=26声纳y[8]=7浮点sonar_d1、sonar_d2、sonar-d3、sonar/d4/*HH2!2*///-----pcmcia卡--------//int端口=256,端口b=257int端口a=8192,端口b=8193//int端口a=992,端口b=993//int端口a=640,端口b=641/(十六进制100,如autoexec.bat中dc24cl.com调用中所定义)/(十六进制3e0=992 dec,如autoexec.bat中dc24cl.com调用中所定义)//十六进制280=十进制640/*HH2!2*////---------视频------------浮动对比度增益=5浮点平均act=0,最大act=0、w0_camera浮子xsize=0.97浮子尺寸=0.97浮动xcenter=0.5浮动y中心=0.5int节点id,max_search=50int Houghinit=0/*HH2!1*//-设置串口模式----//ctx系统“模式com1:1200,n,8,1”//ctx系统“模式com2:9600,n,8,1”//int端口=2//ctx系统“模式com1:9600,n,8,1”ctx系统“模式com1:9600,n,8,1,p”int端口=1//巴基斯坦/*HH1!1*///===定义按钮=========defpan程序按钮“返回”,“弹出”但差距//按钮“发送”、“gosub发送”按钮“STOP”,“gosub STOP_motors”按钮“Motors_on”,“gosub send_motor_command”但差距//按钮“Scope”,“gosub get_Scope_data”按钮“声纳”,“gosub Sonar_scan8”/但差距/按钮“视频”,“gosub get_camer_data”/按钮“QC init”,“gosub Houghinitqc”但差距按钮“Reset_Gyro”,“gosub Reset_Gyro”按钮“Gyro”,“gosub get_Gyro_data”但差距按钮“重置轴”、“gosub Reset_Shaft_position_to_zero”按钮“Shaft_pos”,“gosub get_Shaft_position_data”但差距按钮“轨迹位置”,“gosub procedure_Track_position”pushpan程序/*HH1!1*///图形和窗口浮点最大步长=255graph_default_gridtype 0graph_default_axislabel“步骤”,“数据”graph_default_range 0,0,最大步长,255makegraph数据graph_default_axislabel“范围”,“传感器”graph_default_range 0,0,浮点(max_sonar_array),10标记声纳/win_default_range 0、0、1、1/makewin图像win_default_range-50,-50,50+最大房间_xcm,50+最大空间_ycmmakewin房间//win_plot 0,0,红色//win_line 1000、1100、黄色/*HH121*///构建网络并定义要使用的轨迹段/gosub构建/仅当使用图像时才需要/gosub build_圆形/*HS!!2*///定义节列表//新建-需要反映在“构建轨迹”中i=1至31节列表[i]=-99下一个i//实际使用的部分:节列表[1]=1section_list[2]=2节列表[3]=3节列表[4]=4节列表[5]=13节列表[6]=14截面列表[7]=15节列表[8]=16//现在需要按升序排列。gosub构建的轨迹/*HH1!1*/int ON_BRICKS=0//如果在BRICKS=1->sonar-based obst上。避免禁用int模拟=0//--->如果上述值发生更改,则清除并运行程序/*SH1!1*/结束/*SS!!1*//*嘘!!1*/procedure_track_position://此处设置的初始位置/*HS!!2*/重启程序:w0_轴=1w0_陀螺=1w0_camera=0w0_sonar=1报警持续时间=0float l_arrow=最大room_xcm/15/-----------------------------------/*HH2!2*///初始化机器人位置:/-----------------------------------//在这里,我们决定他从哪里开始,在哪里看。//在最后的节目中,他会自己发现。/gosub程序self_localization//x_wc=最大房间xcm/2x_wc=700//对于Wellcome信托y_wc=0phi_wc=PI/2//朝向房间中部=北部//phi_wc=0//向右。//phi_wc=PI/2-0.35//北,略偏东。/启动序列://set_grid_outputs Sequence_State,1*section_boostset_grid_outputs Sequence_State,5*section_boost(设置网格输出序列状态)old_x_wc=x_wc旧_y_wc=y_wcold_phi_wc=phi_wc旧x轴=x wcold_y_shaft=y_wc旧的phi_shaft=phi_wcgosub重置轴位置gosub复位陀螺仪旧x轴=x wcold_y_shaft=y_wcold_phi_shaft=phi_wc如果模拟=1浮动next_x=x_wcfloat next_y=y_wcfloat next_phi=phi_wc结尾/-----------------------------------/*HH2!2*///初始化机器人的速度和每个部分的速度//新/-----------------------------------浮点base_speed=20//15//13//最大值是多少?//Wellcome适合20岁left_speed=1right_speed=1gosub发送电机命令//预加载电容器并防止//倒退的开始/测试/基本速度=10left_speed_desired=0right_speed_desired=0/----------------------------------------//开始大圆圈-------------对于k=0到12截面速度[k]=0.8*基本速度//为0.7下一个kk=13至24截面速度[k]=0.8*基本速度下一个k对于k=25至48截面速度[k]=基本速度下一个k//开始向内螺旋------------对于k=49到60截面速度[k]=0.9*基本速度下一个kk=61至70截面速度[k]=0.8*基本速度下一个kk=71至78分段速度[k]=0.6*基本速度下一个kk=79至83截面速度[k]=0.5*基本速度下一个kk=84至87截面速度[k]=0.4*基本速度下一个k//八的起始数字------------k=88至94截面速度[k]=0.4*基本速度下一个kk=95至156截面速度[k]=0.5*基本速度下一个kk=157至162截面速度[k]=0.4*基本速度下一个k//开始向外螺旋-------------k=163至166分段速度[k]=0.4*基本速度下一个kk=167至175截面速度[k]=0.5*基本速度下一个kk=176至185截面速度[k]=0.7*基本速度下一个kk=186至199截面速度[k]=0.8*基本速度下一个k/---------------------------------------------------------------/*HH2!2*///主控制回路(获取位置数据、绘图、计算控制)/---------------------------------------------------------------win_active聊天室win_clear(清除)打印“按任意键停止(但不按ESC)”/以便不在通信过程中停止win_移动0,0win_line max_room_xcm,0,4win_line max_room_xcm,最大room_ycm,4win_line 0,最大room_ycm,4win_line 0、0、4初始化计时器last_time_shaft=0last_time_motor=0/*HH2!2*/同时!kbhit()键盘=端口_in(96)//我的声音5000,30如果经过时间(1)>100000初始化计时器last_time_shaft=0last_time_motor=0结尾/*HH2!2*///gosub获取_轴_位置_数据如果模拟=1x轴=x_wc+0.3*(下一个x轴-x_wc)y轴=y_wc+0.3*(下一个y轴)phi_shaft=next_phi//+0.1*(next_pi-phi_wc)其他的gosub获取轴位置数据结尾w_x轴=0.5w_y轴=0.5w_phi_shaft=0.25如果y轴=0&x轴=0转到重新启动_程序结尾/win_line x_shaft、y_shaft,白色/*HH2!2*/gosub预测电流轴位置/gosub获取陀螺数据/w_phi_gyro=0.25/打印“Phi G Y R O=”,Phi_gyro*180/PI/*HH2!2*///gosub get_sonar_data如果模拟=1gosub获取sonar_data结尾/*HH2!2*/gosub check_sonar_validityphi_sonar=phi_sonar+0.45*d _ phi_shaft _ dt/0.45将该值设置为RugWarrior/更新(相同的0.45用于将/“check_sonar_validity”中的角度)/*HH2!2*///如有必要(机器人卡在角落里),重新校准//如果alarm_persistence>6//戈苏布重定标//结尾/gosub获取相机数据/w_phi_camera=0x_wc=(w_x_shaft*x _shaft+w_x_sonar*x _sonar)/(w_x _shave+w_x sonar)y_wc=(w_y_shaft*y_shaft+w_y_sonar*y_sonar)/(w_y_shaft+w_y_sonar)//打印“====++++++y_wc=”,y_wc,“y_shaft=”,y轴/*SH2!2*///打印“====++++++++x_wc=”,x_wc,“x_shaft=”,x轴/*HS!!2*///计算重量平均位置值角度1=phi_shaft角度2=phi_sonar戈苏布角_diff/如果abs(angle_difference)>0.3*PI/w_phi_sonar=0/结束语phi_wc=(phi_shaft*(w_phi_shaft+w_phi_sonar)+w_phi_sonar*角度差异)/(w_phi_shaft+w _phi_sonar)/----wc位置在当前时间估计---/稍后这将是加权平均数/还包括延迟和变化率dbladt/*HH2!2*///重置RugWarrior板中的值如果w_phi_sonar>0 | w_x_sonar>0 | w_y_sonar>0角度1=0角度2=phi_wc戈苏布角_diffphi_wc=角度差异gosub重置轴位置/gosub复位陀螺仪//我的声音1000,30结尾/*HH2!2*//----------位置和声纳图-----------win_fillellipse x_wc-0.1*l_arrow、y_wc-0.1%*l_arlow、x_wc+0.1*l_artow、LBLUEwin_移动x_wc,y_wcwin_line x_wc+l_arrow*cos(phi_wc),y_wc+l_arrow*sin(phi_wc),蓝色//----------声纳图---------------gosub声纳槽/------------------------------/*SH2!2*///使用神经网络计算新的电机指令/------------------------------/(此处简化)//left_speed=15//right_speed=15/gosub反馈_straight_linegosub预测位置控制操作/gosub更新网络/对于圆圈gosub更新网络2gosub计算新电机命令/*HS!!2*///处理障碍物(停止或避开)或执行电机命令temp_left_speed=左速temp_right_speed=右侧速度gosub sonar_saffety//砖块试验禁用/*HH232*///->回避操作(如果是在砖上则不是)如果ON_BRICKS=1转到no_avoidance结尾如果报警计数器<=2//>=2int motion_duration=4500//3200//2800//2400用于短距离回避动作/*SS!!3*/ // 1. 前方障碍物情况->前向转弯如果front_obstacle=1&left_obstale=0&right_obstable=0如果delta_phi<0left_speed=18//10right_speed=1其他的left_speed=1right_speed=18//10结尾gosub发送电机命令ms_播放动作_持续时间打印“逃生后停止”left_speed=0right_speed=0gosub发送电机命令结束语/*HS!!3*/ // 2. 左侧或右侧障碍物->转向逃生//新23.2.03如果left_obstacle=1&right_obstale=0left_speed=18//10right_speed=1gosub发送电机命令ms_delay动作持续时间//1500打印“逃生后停止”left_speed=0right_speed=0gosub发送电机命令结束语如果right_obstacle=1&left_obstale=0left_speed=1right_speed=18//10gosub发送电机命令ms_delay动作持续时间//1500打印“逃生后停止”左速度=0right_speed=0gosub发送电机命令结尾/*SH3!3*/ // 3. 两侧障碍物->不移动如果right_obstacle=1&left_obstale=1left_speed=1right_speed=1gosub发送电机命令打印“两侧挤压”my_sound 3000,150//短促的高痒嘟嘟声消息_播放1500结尾/*HS!!3*/ // 4. 如果前面太近->停止并发出哔哔声(注释掉)/如果声波范围[4]<0&声波范围[5]<0&声纳范围[6]<0/我的声音6000100/结束语/*HH3!3*/ // 4. 逃生后停车//打印“逃生后停止”-如果上面有,现在在每个里面完成。//left_speed=0//right_speed=0//gosub发送电机命令其他的/*HH2!2*///或继续上一命令left_speed=温度left_seed右侧速度=时间右侧速度//gosub发送电机命令//gb 23.10.08结尾/*HH2!2*/no_avoidance:gosub发送电机命令//gb 23.10.08old_x_wc=x_wc旧_y_wc=y_wcold_phi_wc=phi_wc//也用于预测和声纳绘图。。。/巴基斯坦/*SH2!2*/endwhile//巴基斯坦//int bla=获取()gosub停止_电机/----------------------------------------------返回/*SH1!1*//*HS!!1*/prefect_current_shaft_position://延迟可调如果模拟=1返回结尾浮动延迟1=1.20float time_delay_shaft=经过的时间(1)-最后一次时间轴//0.94=与RugW同步发送回值的次数(秒)。//之前的0.6、0.5可以,0.42、0.695//打印“---------------”,时间_播放_轴//注:我假设delay1+delay2(下一个子例程)=总时间延迟//在威康大约2.5秒浮点local_x、local_y、local_phid_x轴_dt=延迟1*(x轴-旧x轴)/时间延迟轴d_y_shaft_dt=延迟1*(y_shaft-旧y_shave)/时间延迟轴角度1=old_phi_shaft角度2=phi_shaft戈苏布角_diffd_phi_shaft _dt=延迟1*(角度差异)/时间延迟_shaft/d_phi_shaft _dt=延迟1*(phi_shaft-旧的高速轴)/时间延迟轴浮子delta_s=sqrt(d_x_shaft_dt*d_x_shaft_dt+d_y_shaft_dt*d_y_shaft_dt)局部x=x轴+增量s*cos(phi轴+0.5*d_phi轴dt)local_y=y_shaft+delta_s*sin(phi_shaft+0.5*d_phi_shaft_dt)local_phi=phi_shaft+d_phi_shaft_dtold_x_shaft=x轴old_y_shaft=y_shaftold_phi_shaft=phi_shaftx_轴=局部_xy轴=本地yphi_shaft=本地phi/win_move本地_x,本地_ylast_time_shaft=经过的时间(1)返回/*HH1!1*/prefect_position_of_control_action://延迟可调如果模拟=1浮动延迟2=1.3//1.75float time_delay_motor=经过的时间(1)-最后一次时间电机//前1.5//打印“----------------”,time_delay_motor浮点local_x、local_y、local_phid_x_wc_dt=延迟2*(x_wc-旧x_wc)/时间延迟电机d_y_wc_dt=延迟2*(y_wc-旧y_wc)/时间延迟电机d_phi_wc_dt=延迟2*(phi_wc-旧_高_wc)/时间_电机/old_x_wc=x_wc/old_y_wc=y_wc/old_phi_wc=phi_wc浮点增量s=sqrt(d_xwc_dt*d_xwc _dt+d_ywc _dt*d_yw _dt)local_x=x_wc+delta_s*cos(phi_wc+0.5*d_phi_wc_dt)本地y=y_wc+delta_s*sin(phi_wc+0.5*d_phi_wc_dt)local_phi=phi_wc+d_phi_wc_dtx_wc_predict=本地xy_wc_predict=本地phi_wc_predict=local_phi/win_move本地_x,本地_y/printf“预测%f,%f,%f\n”,x_wc_predict,y_wc_predictlast_time_motor=经过的时间(1)else//在模拟模式下x_wc_predict=x_wcy_wc_预测=y_wcphi_wc_predict=phi_wc结尾返回/*HH121*/声纳安全:如果ON_BRICKS=1返回结尾//这个例行程序会停止轮椅,直到障碍物移动。//如果1200毫秒后障碍物仍然存在,则控制//返回到主循环,该循环将执行逃逸运动。int轴编码器保持=0int alarm_counter=0/*HS!!2*/检测_障碍物:前障碍=0left_obstacle=0右侧障碍=0//对于声纳=4到6//gosub快速获取onar_range//提前获取新数据//如果声纳范围<150&声纳范围>0//前障碍=1//打印“FRONT=”,声纳,“range=”,sonar_range[sonar]//巴基斯坦/转到sonar_stop//结尾//下一个声纳//主意,不是为了避免杂散的回声而一个接一个地做所有前面的声纳吗?声纳=4gosub快速获取onar_range//提前获取新数据如果声纳范围<150&声纳范围>0前障碍=1结尾声纳=2gosub快速设置sonar_range声纳=3gosub快速获取onar_range声纳=5gosub快速设置sonar_range//提前获取新数据如果声纳范围<150&声纳范围>0前障碍=1结尾声纳=7gosub快速获取onar_range声纳=8gosub快速获取onar_range声纳=6gosub快速获取onar_range//提前获取新数据如果声纳范围<150&声纳范围>0前障碍=1结尾如果声纳范围[2]<80&声纳范围[2]>0left_obstacle=1//打印“声纳2:”,声纳范围[2],“声纳3:”,声纳范围[3]/转到sonar_stop结尾如果sonar_range[8]<80&sonar_range[8]>0右侧障碍=1/转到sonar_stop结尾如果声纳范围[3]<60&声纳范围[3]>0left_obstacle=1/转到sonar_stop结束语如果sonar_range[7]<60&sonar_range[7]>0右侧障碍=1/转到sonar_stop结尾如果front_obstacle=1 | left_obstale=1 | right_obstable=1转到声纳停止结尾如果轴编码器保持=1gosub重置轴位置//gosub复位陀螺仪结束语//打印“无障碍:安全”返回/--------------------------------/*HH2!2*/声纳停止:报警计数器+=1left_speed=0右侧速度=0gosub发送电机命令//我的声音9000100打印“声纳停止”,“障碍物L F R=”,left_obstacle,“”,front_obstale,“”消息_播放1200如果轴编码器保持=0old_x_wc=x_wcold_y_wc=y_wcold_phi_wc=phi_wc轴编码器保持=1结尾如果报警计数器>=2如果轴编码器保持=1gosub重置轴位置gosub复位陀螺仪结尾time_since_last_alarm=过去的时间(1)-最后的报警时间如果timesince_last_alarm<20报警持续时间+=1其他的报警持续时间=0结束语time_of_last_alarm=经过的时间(1)返回结尾转到detect_an_coubler返回/*HH121*/check_sonar_validity:浮子测试_phi=phi_shaft-0.45*d_phi_shaft_dt/在程序中,我们仍然使用之前的phiwc值。/因此,测试值浮子角度公差=12*PI/180//该公差应取决于角速度。//速度快时,测量点少//公差应该增加。浮点xy_tolerance=40w_x_sonar=0w_y声纳=0w_phi_sonar=0x_sonar=0y_声纳=0phi_sonar=0found_flag=0角度1=0角度2=测试_phi戈苏布角_diff/*SS!!2*/如果abs(angle_difference)<angle_tolerance//情况φ=0;看窗帘:sonard2如果abs(sonard2-max_room_ycm+y_wc)<xy_tolerance&sonar_range[3]>0y_声纳+=最大房间ycm-声纳d2phi_sonar=0w_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音2000100结尾如果abs(声纳d1-xwc)<xy公差&声纳范围[1]>0x_sonar+=声纳_d1phi_sonar=0w_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音2000100结尾如果abs(sonard3-max_room_xcm+x_wc)<xy公差和sonar_range[5]>0x_sonar+=最大房间xcm-声纳_d3phi_sonar=0w_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音2000100结尾结尾/*HS!!2*/如果abs(angle_difference-0.5*PI)<angle_tolerance//案例φ=PI/2;看看最近的边墙,或者都是d2左,d4右如果abs(sonar_d4-max_room_xcm+x_wc)<xy_tolerance&sonar_range[7]>0x_sonar+=最大房间xcm-声纳d4phi_sonar=0.5*PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音3000100结尾如果abs(声纳d2-xwc)<xy公差和声纳范围[3]>0x_sonar+=声纳d2phi_sonar=0.5*PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音3000100结尾如果abs(sonard1-ywc)<xy公差&sonarrange[1]>0y_声纳+=声纳d1phi_sonar=0.5*PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音3000100结尾如果abs(sonard3-max_room_ycm+y_wc)<xy_tolerance&sonar_range[5]>0y声纳+=(最大房间ycm-声纳d3)phi_sonar=0.5*PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音3000100结束语结尾/*HH2!2*/如果abs(abs(angle_difference)-PI)<angle_tolerance//案例φ=PI;看窗帘d4如果abs(sonard4-max_room_ycm+y_wc)<xy_tolerance&sonar_range[7]>0y_sonar+=最大oom_ycm-声纳_d4phi_sonar=PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音5000100结尾如果abs(sonard2-ywc)<xy公差&sonarrange[3]>0y_声纳+=声纳d2phi_sonar=PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音5000100结尾如果abs(声纳d3-xwc)<xy公差&声纳范围[5]>0x_sonar+=声纳d3phi_sonar=PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音5000100结尾如果abs(sonard1-max_room_xcm+x_wc)<xy_tolerance&sonar_range[1]>0x_sonar+=最大房间xcm-声纳_d1phi_sonar=PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音5000100结尾结束语/*HH2!2*/如果abs(angle_difference+0.5*PI)<angle_tolerance//案例φ=-PI/2;看边墙d4(小x)和d2大x如果abs(声纳d4-xwc)<xy公差&声纳范围[7]>0x_sonar+=声纳d4phi_sonar=-0.5*PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音4000100/打印“Phi_wc=”,Phi_wc,“Phi_sonar=”,Phi_sonar/巴基斯坦结尾如果abs(sonard2-max_room_xcm+x_wc)<xy公差和sonar_range[3]>0x_sonar+=最大房间xcm-声纳d2phi_sonar=-0.5*PIw_x_sonar+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音4000100结尾如果abs(sonard1-max_room_ycm+y_wc)<xy_tolerance&sonar_range[1]>0y_声纳+=最大房间ycm-声纳d1phi_sonar=-0.5*PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音4000100结尾如果abs(sonard3-ywc)<xy公差&sonarrange[5]>0y_声纳+=声纳d3phi_sonar=-0.5*PIw_y声纳+=0.25w_phi_sonar+=0.25found_flag+=0.25/我的声音4000100结束语结尾/*HH2!2*///平均值如果w_x_sonar>0x声纳=0.25*x声纳/wx声纳结尾如果w_y_sonar>0y声纳=0.25*y声纳/w_y声纳结尾w_x_sonar=0.8*w_x_sonarw_y声纳=0.8*w_y声纳w_phi_sonar=0.8*w_phi_sonar/打印“ywc=”,y_wc,“ysonar=”,y声纳返回/*HH121*/重新校准:打印“重新定位”报警持续时间=0/*HS!!2*/如果sonar_d2<120&sonar_range[3]>0//需要左转角度2=phi_wc角度1=0戈苏布角_diff如果abs(angle_difference)<PI/5y_shaft=最大房间ycm-100y_声纳=y_轴w_y声纳=1w_y_轴=1返回结尾如果abs(angle_difference)-0.5*PI<PI/5x轴=100x_sonar=x轴w_x_sonar=1w_x轴=1返回结尾如果abs(angle_difference)+0.5*PI<PI/5x轴=最大房间xcm-100x_sonar=x轴w_x_sonar=1w_x轴=1返回结尾如果abs(angle_difference)-PI<PI/5y轴=100y_声纳=y_轴w_y声纳=1w_y_轴=1返回结尾返回结尾/*HH2!2*/如果sonar_d4<120且sonar_range[7]>0//需要右转角度2=phi_wc角度1=0戈苏布角_diff如果abs(angle_difference)-PI<PI/5y_shaft=最大房间ycm-100y_声纳=y_轴w_y声纳=1w_y轴=1返回结尾如果abs(angle_difference)-0.5*PI<PI/5x轴=最大房间xcm-100x_sonar=x轴w_x_sonar=1w_x轴=1返回结束语如果abs(angle_difference)+0.5*PI<PI/5x轴=100x_sonar=x轴w_x_sonar=1w_x轴=1返回结尾如果abs(angle_difference)<PI/5y轴=100y_声纳=y_轴w_y声纳=1w_y_轴=1返回结尾返回结尾/*HH2!2*/如果sonar_d3<120且sonar_range[5]>0//朝墙走去角度2=phi_wc角度1=0戈苏布角_diff如果abs(angle_difference)-0.5*PI<PI/5y_shaft=最大房间ycm-100y_声纳=y_轴w_y声纳=1w_y轴=1返回结尾如果abs(angle_difference)<PI/5x轴=最大房间xcm-100x_sonar=x轴w_x_sonar=1w_x轴=1返回结尾如果abs(angle_difference)-PI<PI/5x轴=100x_sonar=x轴w_x_sonar=1w_x轴=1返回结尾如果abs(角度差)+0.5*PI<PI/5y轴=100y_sonar=y_轴w_y声纳=1w_y轴=1返回结尾返回结束语返回/*SH1!1*//*SS!!1*/calculate_new_motor_command:float next_x=节点输出(第一个节点(下一个位置))float next_y=节点输出(first_node(next_Position)+1)float next_phi=节点输出(first_node(next_Position)+2)win_fillellipse next_0.1*l_arrow、next_y-0.1*l_arrow、next_x+0.1*l_arw、next_y+0.1*l _箭头、红色win_move下一个x,下一个ywin_line next_x+l_arrow*cos(next_phi),next_y+l_artow*sin(nexd_phi),黄色/*HS!!2*///下一个点作为目标。phi2=与目标的角度浮点dx=下一个x-x wcfloat dy=下一个y-y_wc浮点分布=sqrt(dx*dx+dy*dy)phi2=999如果dx=0&dy>0phi2=PI/2结尾如果dx=0&dy<0phi2=-PI/2结尾phi2=反正切(dy/dx)如果dy<0&dx<0phi2=phi2+PI结尾如果dy>=0&dx<0phi2=phi2+PI结尾如果dy<0&dx>0phi2=phi2+2*PI//避免所有负角结尾//phi2是机器人应该指向目标的地方/*HH2!2*///----当前机器人航向phi_wc和期望的一个phi2之间的差异/尝试在动作开始时使用预测的角度:/不是一个好主意,预测有很大的跳跃/记录声纳数据时////浮点phip=phi_wc_predict//而不是phiwcfloat sind=(cos(phi2)*sin(phi_wc)-sin(phi2)*cos(phi_wc))浮点cosd=(cos(phi2)*cos(fiwc)+sin(phi2float local_tan=sind/cosd浮点delta_phi=arctan(local_tan)如果sind>=0&cosd<0delta_phi+=PI结尾如果sind<0&cosd<0delta_phi=PI结尾delta_phi=-增量/*SH2!2*//----速度控制------新-威康信托基本速度=区段速度[当前区段]浮动距离0=1//m浮点w1=1/(1+exp(-(0.01*dist-dist0))//距离(单位:m),用于通过与目标的角度进行控制浮点w2=1/(1+exp(+(0.01*dist-dist0))//以m为单位的距离,用于通过航向差异(delta_phi)进行控制//距离效应//打印“w1=”,w1,“w2=”,w2角度1=phi_wc角度2=next_phi戈苏布角_diff//浮点exp2=exp(-0.5*(angle_difference)*(angel_difference))//方向效应浮动速度=0.5*基本速度*(1+exp(-abs(delta_phi))//所有关于根据角度差异调整速度如果phi2=999速度=0结尾//打印“base_speed=”,base_speed,“速度=”,速度//浮点exp3=exp(-0.5*delta_phi*delta_phi)浮点sp_gain=1.1//1都允许过多偏移//0.82+0.9*(exp3)浮点vl1=2*速度/(1+exp(+sp_gain*delta_phi))浮点vr1=2*速度/(1+exp(-sp增益*增量))浮点vl2=2*速度/(1+exp(+sp_gain*angle_difference))浮动vr2=2*速度/(1+exp(-sp增益*角度差异))打印“vl1=”、vl1、“vr1=”,vr1打印“vl2=”、vl2、“vr2=”,vr2left_speed_desired=fmax(1,w1*vl1+w2*vl2)right_speed_desired=fmax(1,w1*vr1+w2*vr2)/浮子sp_gain=0.5+0.3*速度/15/浮子sp_mom=0.2/left_speed_desired=sp_mom*left_seed_dired+(1-sp_mon)*速度/(1+exp(+sp_gain*(delta_phi))/right_speed_desired=sp_mom*right_seed_desired+(1-sp_mon)*速度/(1+exp(-sp增益*(delta_phi))/浮子λ=0.4//旧的良好价值观//----------///浮动速度=0.7*基本速度+0.3*基本速度*(exp1*exp2*exp3)///浮子sp_gain=0.82+0.9*(exp3)浮子sp_mom=0.2//0.22+(0.8/速度)left_speed_desired=(1-sp_mom)*left_seed_dired+sp_mom*浮点(left_sepe)right_speed_desired=(1-sp_mom)*right_seed_dired+sp_mom*浮点(right_sspeed)//浮动λ=0.54*sp_增益//晚上看起来很有希望//浮子λ=0.5//gbtest 090712//-----------left_speed=int(left_seed_dired)right_speed=int(右速度所需)打印“Ldes=”,left_speed_desired,“Rdes.=”,right_speed_desired,”phi_wc=“,180*phi_wc/PI///left_speed=int(left_seped_directed+lambda*(left-speed_direct-float(left_speed))///right_speed=int(right_seped_desired+lambda*(right-speed_desided-float(right_speed))/*SS!!2*/返回/*HS!!1*/send_motor_command://此处为电机偏置。//int方向字节=0//如果right_speed_desired>=0//方向字节+=1//结尾//如果left_speed_desired>=0//方向字节+=2//结尾//包括向后运动//RugWar董事会考虑消息字节=107gosub握手发送字节//速度不得超过+-100message_byte=int(0.80*float(left_speed))+128//Wellcome的0.8分是0.85分//message_byte=int(1.1*float(left_speed))+128//系数1.1补偿了左右不对称//在Penny and Gilles系统中。//现在(2009年11月)似乎是另一种情况,右轮迟缓。gosub握手发送字节//message_byte=右侧速度+128message_byte=int(1.15*float(right_speed))+128gosub握手发送字节//message_byte=方向字节//gosub握手发送字节//包括向后运动//RugWar董事会考虑打印“发送L=”,left_speed,“R=”,right_speed返回/*HH1!1*/停止电机:消息字节=99gosub握手发送字节返回/*SH1!1*//*HS!!1*/get_gyro_data(获取日期):消息字节=105gosub握手发送字节gosub获取float_dataphi_gyro=1.26*PI*浮动数据/180/打印“phi_陀螺=”,180*phi_陀螺/PI返回/*HH1!1*/重置陀螺仪:/gb 23.02.03:未使用陀螺仪。/消息字节=125/gosub握手发送字节//float_data=180*phi_wc/PI/gosub发送float_data返回/*HH1!1*/获取电池数据:整数b3,b2,b1消息字节=106gosub握手发送字节gosub获取float_data返回/*HH1!1*/获取轴位置数据:整数b3,b2,b1消息字节=100gosub握手发送字节//调试//gosub获取float_data//float rr=浮点数据//gosub获取float_data//float ll=浮点数据//结束调试gosub获取float_datax_shaft=浮动数据/巴基斯坦gosub获取float_datay_shaft=浮动数据/巴基斯坦gosub获取float_dataphi_shaft=PI*float_data/180/打印“x轴=”,x轴,“,y轴=”返回/*HH1!1*/重置轴位置:消息字节=120gosub握手发送字节float_data=x_wcgosub发送float_datafloat_data=y_wcgosub发送float_datafloat_data=180*phi_wc/PIgosub发送float_data返回/*HH1!1*/重置轴位置_零:x_wc=0y_wc=0gosub重置_轴位置返回/*SH1!1*//*HS!!1*/float_to_tree_bytes:b3=0int Rest,Counter_base=128当float_data>320.00时float_data=32000.0b3+=1循环结束当float_data<-32000.0时float_data+=32000.0b3+=1循环结束Rest=int(float_data)如果float_data<0.0Rest=-int(float_data)b3=b3+计数器基础结尾b1=土地(Rest,255)b2=休息/256//打印“---b3=”,b3,“b2=”,b2,“b1=”返回/*HH1!1*/获取浮动数据:gosub握手_读取字节b3=以字节为单位gosub握手读取字节b2=以字节为单位gosub握手_读取字节b1=英寸字节如果b3<128float_data=32000*浮点(b3)+256*浮点(b2)+浮点(b1)结尾如果b3>=128float_data=-32000*浮点(b3-128)-256*浮点(b2)-浮点(b1)结尾//打印“---b3=”,b3,“b2=”,b2,“b1=”,B11,“-->Float_data=”,Float_data返回/*HH1!1*/发送浮动数据:gosub浮点到三字节消息字节=b3gosub握手发送字节消息字节=b2gosub握手发送字节消息字节=b1gosub握手发送字节返回/*HH1!1*/握手发送字节:int in_byte,serial_count=0/打印“”in_byte=串行字节输入(端口)//只是清空可能等待okbyte的缓冲区发送字节循环:序列计数+=1串行字节输出端口,消息字节in_byte=串行字节输入(端口)/打印f“%d,”,单位为字节if(in_byte!=ok_byte)&(serial_count<serial_cont_limit)转到send_byte_loop结尾如果serial_count>=serial_cont_limit打印“”打印“发送时RugWarrior没有响应。”打印“请按ESC,重置RugWarrior板。”哔哔声巴基斯坦结束语返回/*HH1!1*/握手_读取字节:int in_byte,in_byte1,serial_count=0/打印“”读_循环:序列计数+=1in_byte=serial_byte_in(端口)in_byte1=串行字节输入(端口)/打印f“%d-%d,”,以字节为单位,以字节1为单位如果((in_byte=300)&(serial_count<serial_cont_limit))|(in_byte1!=in_byte)转到读取操作结尾/打印f“->%d,”,单位为字节如果serial_count>=serial_cont_limit打印“”打印“阅读时RugWarrior没有回应。”打印“请重置并检查电缆或电源。”哔哔声巴基斯坦结束语串行字节输出端口,ok_byte返回/*SH1!1*//*HS!!1*/内部://dg 20,15,标准代码类型dg 40,30,标准代码类型//dg 54,40,标准代码类型mg对比度grid_nodestyle对比度,GREYSC_DISP_STYLE牵引网对比度mg霍夫grid_nodestyle Hough,灰色_显示_样式牵引格栅Houghdg 8,3,标准代码类型mg平均值grid_nodestyle平均值,GREYSC_DISP_STYLE牵引网平均值返回/*HH121*/build_trachicles://新的包括圆直径+元素数浮点x1,y1,phi1,x1next,y1next,phi1next浮点θ,θ_下一个,rint节点id/*HS!!2*///神经网络大小定义/两个圆截面尺寸[1]=12截面尺寸[2]=12截面尺寸[3]=12截面尺寸[4]=12/向内螺旋截面_尺寸[5]=12截面尺寸[6]=10截面尺寸[7]=8截面尺寸[8]=5截面尺寸[9]=5/四个八分之一/截面尺寸[10]=6/截面_尺寸[11]=6/截面尺寸[12]=6/截面尺寸[9]=6截面尺寸[10]=6截面尺寸[11]=6截面尺寸[12]=6截面尺寸[13]=6截面尺寸[14]=6截面尺寸[15]=6截面尺寸[16]=6截面尺寸[17]=6截面尺寸[18]=6截面尺寸[19]=6截面尺寸[20]=6截面尺寸[21]=6/向外螺旋/截面尺寸[26]=3/截面尺寸[27]=4截面尺寸[22]=6截面尺寸[23]=8截面_尺寸[24]=10截面尺寸[25]=12int网络大小=0//i=1至31//对于i=1到4//31:1->4=仅对两个外圆进行编码。阿姆斯特丹/net_size+=节大小[i]//下一个i//WELLCOME TRAJECTORY公司i=1到31//威康如果节列表[i]=-99net_size+=节大小[节列表[i]]结束语下一个i/*HH2!2*//nn版本dg 1,2,输入代码类型mg位置grid_nodestyle位置,GREYSC_DISP_STYLE拉线格栅位置dg 12,int(浮点(net_size)/12)+1,GRBF_NODE_TYPEmg轨迹grid_nodestyle轨迹,GREYSC_DISP_STYLE牵引网轨迹dg 1,1,线性_代码_类型mg序列_状态grid_nodestyle Sequence_State,灰色_显示_样式drawgrid序列_状态/dg 1,1,线性_代码_类型mg特制2grid_nodestyle Special2,灰色_显示_样式特殊牵引网2dg 1,4,线性代码类型mg下一位置grid_nodestyle Next_Position,灰色_显示_样式绘图网格Next_Position连接类型ALL_TO_ALL连接位置,轨迹连接轨迹,下一个位置连接轨迹,序列状态设置权重0设置网格权重轨迹,999999int节=1int last_node=first_node(轨迹)-1对于节点id=last_node+1到last_node+节大小[1]一致节点Sequence_State,节点_id/set_weightsbetnodes first_node(Sequence_State)、nodes_id、section_boost*(float(section)-0.5)下一个节点idlast_node=last_node+节大小[1]截面=2对于nodes_id=last_node+1到last_node+section_size[2]congridnode Special2,节点_id/set_weightsbetnodes first_node(Special2)、nodes_id、section_boost*(float(section)-0.5)/基于旧节set_weightsbetnodes first_node(Special2)、nodes_id、section_boost*(float(nodes_id=first_node(Trajective)+1)-0.5)/基于新节点下一个节点idlast_node=last_node+section_size[2]连接Sequence_State,特殊2set_weightsbetgrids Sequence_State,特殊2,1对于节点_id=last_node+1到first_node(轨迹)+网络大小-1一致节点Sequence_State,节点_id下一个节点id超宽带/*SH2!2*///轨迹尺寸+边距//r=350-低增益引起的误差边缘/浮动裕度=100/画廊设置浮动裕度=50/阿姆斯特丹09和Wellcome 2012的设置/浮动裕度=30/图形设置浮子r0=300//200:一个直径为6m的圆,用于Wellcome Trustfloat dist_from_back_wall=150//未使用?浮点数xc=0.5*max_room_xcm//圆心//float yc=max_room_ycm-dist_from_back_wall-r-边距浮子yc=0.5*max_room_ycm+50//圆心//浮动yc=最大值_room_ycm-xc//iniva//float yc=410//阿姆斯特丹/*嘘!!2*//第一个1/2圆,第1段last_node=first_node(轨迹)-1截面=1浮点start_angle=PI浮点旋转dir=1//1=逆时针//相反(顺时针)=-1r=r0-边缘-10xc=0.5*最大体积xcm/*SH2!2*/gosub编码_半圆/*HS!!2*//第二个1/2圈,第2段截面=2start_angle=0//相反(顺时针)=-1r=r0-边缘-10xc=0.5*最大房间xcm/*SH2!2*/gosub编码_半圆/*HS!!2*//第三个1/2圈,第3段截面=3start_angle=PI//相反(顺时针)=-1r=r0-边缘-10xc=0.5*最大房间xcm/*SH2!2*/gosub编码_半圆/*HS!!2*//第四个1/2圈,第4段截面=4启动角度=0//相反(顺时针)=-1r=r0-边缘-10xc=0.5*最大体积xcm/*SH2!2*/gosub编码_半圆/*HS!!2*//向内螺旋,第5节截面=5start_angle=PI//相反(顺时针)=-1r=(5/6)*(r0-边距)xc=0.5*最大房间xcm-(0.5/6)*(r0-边距)/*SH2!2*///gosub编码器_半圆形/*HS!!2*//向内螺旋,截面6截面=6start_angle=0//相反(顺时针)=-1r=(4/6)*(r0-边距)xc=0.5*max_room_xcm+(0.25/6)*(r0裕度)/*SH2!2*///gosub编码_半圆/*HS!!2*//螺旋向内,第7节截面=7start_angle=PI//相反(顺时针)=-1r=(3/6)*(r0-边距)xc=0.5*最大房间xcm-(0.5/6)*(r0-边距)/*SH2!2*///gosub编码_半圆/*HS!!2*//向内螺旋,截面8==8截面=8start_angle=0//相反(顺时针)=-1r=(2.2/6)*(r0-余量)xc=0.5*最大房间xcm/*SH2!2*//gosub编码器_半圆形/*HS!!2*//---螺旋向内,第9节截面=9start_angle=PI//相反(顺时针)=-1r=(1/6)*(r0-边距)xc=0.5*最大房间xcm-(0.5/6)*(r0-边距)/*SH2!2*///gosub编码_半圆/*HS!!2*//----图8,第10节截面=10start_angle=PIrotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*//gosub编码_半圆形/*HS!!2*//---第11节第8张图截面=11start_angle=0rotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*///gosub编码_半圆/*HS!!2*//---第12节第8张图截面=12start_angle=0rotation_dir=1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*HS!!2*//第13节第8张图截面=13start_angle=PIrotation_dir=1//相反(顺时针)=-1r=(1/2)*(r0-边距)xc=0.5*最大房间xcm-r//r=(1/6)*(r0-边距)//xc=0.5*max_room_xcm-r-(0.25/6)*(r0裕度)/*SH2!2*/gosub编码_半圆/*HS!!2*//第14节第8张图截面=14start_angle=PI旋转_方向=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*/gosub编码_半圆/*HS!!2*//第15节第8张图截面=15start_angle=0rotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*/gosub编码_半圆/*HS!!2*//第16节第8张图截面=16start_angle=0旋转_方向=1//相反(顺时针)=-1r=0.5*(r0裕度)xc=0.5*最大房间xcm-r/*SH2!2*/gosub编码_半圆/*HS!!2*//第17节第8张图截面=17start_angle=PIrotation_dir=1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*HS!!2*//第18节第8张图截面=18start_angle=PIrotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*///gosub编码_半圆/*HS!!2*//第19节第8张图截面=19start_angle=0rotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*///gosub编码_半圆/*HS!!2*//第20节第8张图截面=20start_angle=0rotation_dir=1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*HS!!2*//第21节第8张图截面=21启动角度=PIrotation_dir=1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*嘘!!2*//第22节第8张图截面=22start_angle=PIrotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*///gosub编码_半圆/*HS!!2*//第23节第8张图截面=23start_angle=0rotation_dir=-1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm+r/*SH2!2*///gosub编码_半圆/*嘘!!2*//第24节第8张图截面=24start_angle=0rotation_dir=1//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*HS!!2*//图8,第25节截面=25start_angle=PI//相反(顺时针)=-1r=0.5*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码器_半圆形/*HS!!2*//--螺旋向外,第26节截面=26start_angle=0//相反(顺时针)=-1r=0.5*(1/4)*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*//gosub编码_半圆形/*HS!!2*//---螺旋向外,第27节截面=27start_angle=PI//相反(顺时针)=-1r=0.5*((1/4)+(1/3))*(r0-余量)xc=0.5*最大房间xcm/*HH2!2*//gosub编码器_半圆形/*HH2!2*//螺旋向外,截面28==22截面=28start_angle=0//相反(顺时针)=-1r=(2/7)*(r0-边距)/r=0.5*((2/4)+(1/3))*(r0-余量)xc=0.5*最大房间xcm-r/*SH2!2*///gosub编码_半圆/*HS!!2*//向外螺旋,截面29==23截面=29start_angle=PI//相反(顺时针)=-1r=0.5*((2/4)+(2/3))*(r0-余量)xc=0.5*最大房间xcm/*SH2!2*///gosub编码_半圆/*嘘!!2*//向外螺旋,截面30==24截面=30start_angle=0//相反(顺时针)=-1/r=(4/6)*(r0-边距)r=0.5*((3/4)+(2/3))*(r0-余量)xc=0.5*最大房间xcm-(0.5/6)*(r0-边距)/*HH2!2*///gosub编码_半圆/*HH2!2*//螺旋向外,截面31==25截面=31start_angle=PI//相反(顺时针)=-1//新的1/2圆//r=r0-边缘-10//xc=0.5*最大房间xcm//旧的1/2螺旋输出r=0.5*((3/4)+(3/3))*(r0-余量)xc=0.5*max_room_xcm+(0.25/6)*(r0裕度)/*SH2!2*///gosub编码_半圆/*HS!!2*///设置倒数权重(轨迹<->Sequence_State)int节,last_node=first_node(轨迹)-1浮点previous_phase=0,current_phase=0//截面=1至31//截面=1至4//31//只有2个外圆。阿姆斯特丹i=1至31节=节列表[i]if部分=-99对于nodes_id=last_node+1到last_node+section_size
/float node_sigma=GRBF_node_sigma(节点id)/previous_phase=线权重(线间节点(节点id,第一个节点(序列状态)))/current_phase=前一个阶段+节点_西格玛*节_ boost*浮点(节点_id-第一个节点(轨迹)+1)/set_weightsbetnodes节点id、first_node(Sequence_State)、current_phase/基于全新节点+西格玛set_weightsbetnodes nodes_id,first_node(Sequence_State),section_boost*float(nodes_id-first_node(Trajectory)+1)/基于新节点/set_weightsbetnodes节点id、first_node(Sequence_State)、section_boost*float(section)/基于旧节if节!=2//上述第2节/current_phase=前一个阶段+节点_西格玛*截面_ boost*(浮点(节点_id-第一个节点(轨迹)+1)-0.5)/set_weightsbetnodes first_node(Sequence_State)、nodes_id、current_phase/基于全新节点+西格玛/set_weightsbetnodes first_node(Sequence_State)、nodes_id、section_boost*(float(section)-0.5)/基于旧节set_weightsbetnodes first_node(Sequence_State)、nodes_id、section_boost*(float(nodes_id=first_node(Trajective)+1)-0.5)/基于新节点结尾下一个节点idlast_node=last_node+节大小
结尾//打印“section done=”,section,“last_node=”,last_node//巴基斯坦下一个i//下一节返回/*HH1!1*/encode_half_circle://此处设置新:sigma/如果节>0i=0到section_size
-1θ=start_angle+rotation_dir*float(i)*PI/float(截面尺寸
)theta_next=start_angle+rotation_dir*浮点(i+1)*PI/浮点(截面尺寸
)x1=r*cos(θ)+xcy1=r*sin(θ)+ycphi1=θ+PI/2x1next=r*cos(theta_next)+xcy1next=r*sin(theta_next)+ycphi1next=theta_next+(PI/2)*(rotation_dir)//gb/打印“Theta=”,Theta/巴基斯坦节点id=最后节点+i+1set_weightsbetnodes first_node(位置),节点id,x1set_weightsbetnodes first_node(位置)+1,节点id,y1set_weightsbetnodes nodes_id,first_node(下一个位置),x1next集合权重集合节点节点id,第一个节点(下一个位置)+1,y1next//设置权重设置节点节点id,第一个节点(下一个位置)+2,phi1nextset_weightsbetnodes节点id,第一个节点(Next_Position)+2,sin(phi1next)set_weightsbetnodes节点id,第一个节点(Next_Position)+3,cos(phi1next)//打印“节点=”,节点id/打印i,“,”,180*phi1next/PI//巴基斯坦/set_GRBF_node_sigma节点id,max_room_xcm/15//set_GRBF_node_sigma节点id,25+r/5//阿姆斯特丹set_GRBF_node_sigma节点id,25+r/10/wellcome/用于现场绘图/set_GRBF_node_sigma节点id,20+r/5/用于绘制轨迹/set_GRBF_node_sigma节点id,r/3/设置GRBF_node_sigma节点id,/float(节点id-第一个节点(轨迹)+1)下一个ilast_node=节点id//打印“section done=”,section,“last_node=”,last_node//巴基斯坦/结尾返回/*HH1!1*/建筑_圆形:返回/*HH121*/update_network2://新增。处理结束循环set_node_output first_node(位置),x_wc_predictset_node_output first_node(位置)+1,y_wc_predict/set_node_output first_node(位置)+2,phi_wc_predictupdategrid轨迹int current_grid=轨迹gosub规范化_内部/gosub侧向抑制gosub update_Sequence_State(gosub更新序列状态)/注释掉用于现场绘图current_section=int(node_output(first_node(Sequence_State))/section_boost)打印“====>Section nb=”,node_output(first_node(Sequence_State))/Section_boost,“updategrid Special2/*嘘!!2*///处理回第一状态的循环//最后->切换到下一节之前的三个状态//(解释下面的2.5和3)如果node_output(first_node(Sequence_State))>=(float(net_size)-2.5)*section_boost//从最后一个州跳到第12个州。旧版本。//避开第1节。原因不明。//set_grid_outputs Special2,13*节_boost//set_grid_outputs Sequence_State,13*section_boost(设置网格输出序列状态)//试着跳到第一节的开头。阿姆斯特丹09forced_next_state=3-浮点(网络大小)+(节点输出(第一个节点(序列状态))/节boost)打印“forced_next状态=”,forced_next_state//打印“当前状态=”,node_output(first_node(Sequence_state))/section_boost//巴基斯坦set_grid_outputs特殊2,强制next_state*section_boostset_grid_outputs Sequence_State,强制next_State*section_boost更新网格轨迹/基于新节点结尾/打印“-----Special2=”,node_output(first_node(Special2))gosub更新_文本_位置/drawgrid轨迹、下一个位置、位置、序列状态、特殊2//微克返回/*HH1!1*/update_Next_Position://新建浮点act_sum=0//注意:圆圈闭合时要小心,360=0(但av=180!)更新网格Next_Position//巴基斯坦对于k=first_node(轨迹)到last_node(轨迹)让act_sum=act_sum+节点输出(k)//打印f“%2.20f,”,act_sum下一个k//打印“act_sum=”,act_sum//printf“\n”/已在先前调用的update_Sequence_State中完成如果act_sum>0.0对于k=first_node(Next_Position)到last_node(Next_Position)//打印“节点=”,k,“节点输出=”,节点输出(k)集合节点输出k,节点输出(k)/动作总和下一个k//使用sin和cos计算进入第三个节点的下一个角度。浮点sind=节点输出(第一个节点(下一个位置)+2)浮点cosd=节点输出(第一个节点(下一个位置)+3)/打印“sind=”,sind,“cosd=”,cosd浮点delta_phi=arctan(sind/cosd)如果sind>=0&cosd<0delta_phi+=PI结尾如果sind<0&cosd<0delta_phi=PI结束语设置节点输出第一个节点(下一个位置)+2,增量其他的打印“低活动限制”/巴基斯坦结束语返回/*HH1!1*/update_Sequence_State://新建浮点act_sum=0/float act1=节点输出(first_node(Sequence_State))updategrid Sequence_State(更新网格序列状态)float act1=节点输出(first_node(Sequence_State))对于k=first_node(轨迹)到first_nde(轨迹)+net_size-1让act_sum=act_sum+节点输出(k)下一个k/巴基斯坦k=第一节点(序列状态)/如果act_sum>0.000001如果act_sum>0.0集合节点输出k,节点输出(k)/动作总和/我的声音100100其他的/巴基斯坦集合节点输出k,act1结束语返回/*HH1!1*/角度偏差:浮点sind=(cos(角度2)*sin(角度1)-sin(角2)*cos(角1))浮点数cosd=(cos(角度2)*cos(角1)+sin(角度2float local_tan=sind/cosd浮点角度差异=arctan(local_tan)如果sind>=0&cosd<0角度差异+=PI结尾如果sind<0&cosd<0角度差异-=PI结尾angle_difference=-angle_defference返回/*SH1!1*//*HS!!1*/get_sonar_data://用于自我定位-是否使用?//graph_active声纳//graph_clear(图形_清除)键盘=端口输入(96)//注意:不知怎的,这个读数愚弄了节能系统//就好像按下了一个键,再也没有减速了//几秒钟后数据读数下降。//端口96是键盘芯片8255A(十六进制60)。//打印键盘/消息_播放40声纳=3gosub快速获取onar_range/消息_播放40声纳=1gosub快速设置sonar_range/消息_播放40声纳=5gosub快速获取onar_range/消息_播放40声纳=7gosub快速获取onar_range/ms_播放40/对于声纳=1到8/gosub快速获取onar_range/下一个声纳sonar_d1=声纳范围[1]-声纳y[1]sonar_d2=声纳范围[3]-声纳x[3]sonar_d3=声纳范围[5]+声纳y[5]sonar_d4=声纳范围[7]+声纳_x[7]返回/*HH1!1*/fast_get_sonar_range://ibm thinkpad//声纳范围[声纳]=200//gosub get_sonar_range//gb测试//返回ms_delay 30//20。。。3m时为10msint掩码=2^(声纳-1)int echo_on=1整数iix,iiy端口_输出端口b,掩码/======================//ms_delay 1(毫秒延迟1)端口_输出端口,掩码对于i=0到max_sonar_array-1回波[i]=0//gb 130811如果echo_on=1//echo[i]=端口in(端口b)iix=1到62//50//以在port_in调用之间创建延迟iiy+=iix//ibm thinkpad需要接下来iix//这个延迟也会改变阵列中回声的位置。//用62 ittreaqtio和系数1.42,我们得到了正确的距离。。。//用50 ittreaqtio和系数1.17,我们得到了正确的距离。。。echo[i]=端口输入(端口b)结尾如果echo[i]=掩码&echo_on=1echo_on=0echo[i]=port_in(portb)//运行一次结尾如果echo_on=0echo[i]=mask//模拟其余输入结尾//打印回声[i]下一个i消息_播放1端口_输出端口,0/=====================int i_dist=-1对于i=min_range_check到max_sonar_array-1如果echo[i]=掩码如果i_dist=-1i_dist=ii=最大sonar_array结尾结尾下一个i声纳范围[声纳]=浮标(i_dist)*1.42//1.17//1.19//打印“声纳=”,声纳,“range=”,sonar_range[sonar]返回/*HH1!1*/声纳_扫描8:而1graph_active声纳graph_clear(图形_清除)键盘=端口_in(96)对于声纳=1到8//声纳=5gosub获取sonar_range//gosub获取sonar_range_old//ms_delay 400//50下一个声纳循环结束返回/*HH1!1*/get_sonar_range://当接收到回声时,新测试停止读取回声,gb 27.6.2012浮子dt//声纳=5//g测试int掩码=2^(声纳-1)//int mask=2^(5-1)//gbtest仅从前面的5读取int echo_on=1内部iix,iiyms_delay 30//gb 10ms=3mport_out端口b,掩码//读取地址//消息_播放1/初始化计时器/======================//int掩码=2^(sonar-1)//gbtestport_out端口,屏蔽//ping out对于i=0到max_sonar_array-1回波[i]=0//gb 130811如果echo_on=1//echo[i]=端口in(端口b)对于iix=1到50//1//,在port_in调用之间创建延迟iiy+=iix//ibm thinkpad需要接下来iix//这个延迟也会改变阵列中回声的位置。//利用61 ittreaqtio和系数1.386,我们得到了正确的距离。。。//用62 ittreaqtio和系数1.42,我们得到了正确的距离。。。//用50 ittreqtio和因子1.17,我们得到了正确的距离。。。echo[i]=端口in(端口b)结尾如果echo[i]=掩码&echo_on=1echo_on=0echo[i]=port_in(portb)//再次运行结尾如果echo_on=0echo[i]=掩码//以模拟其余输入结尾//打印回声[i]下一个i消息_播放1端口输出端口,0//重置所有输入?/=====================/dt=经过的时间(1)/-----int i_dist=0/初始化计时器对于i=min_range_check到max_sonar_array-1颜色=绿色/如果land(echo[i],mask)=0如果echo[i]=0颜色=红色结尾/if land(echo[i],mask)=掩码如果echo[i]=掩码颜色=黄色如果i_dist=0i_dist=i/i=最大sonar_array结尾结尾移动浮标(i),浮标(声纳+1)-0.3线浮标(i),浮标(声纳+1)+0.3,彩色下一个i//打印“声纳”,声纳,“,range=”,i_dist,“(dt1=”,dt,“dt2=”,elapsed_time(1),“)”打印“声纳”,声纳,“,范围[cm]=”,浮标(i_dist)*1.17//1.389如果声纳=8打印“”结尾sonar_range[sonar]=浮子(i_dist)*1.17//1.19返回/*HH1!1*/get_sonar_range_old:浮子dtint掩码=2^(声纳-1)整数iix,iiy端口_输出端口b,掩码/初始化计时器/======================端口_输出端口,掩码对于i=0到max_sonar_array-1echo[i]=0//gb 130811echo[i]=端口in(端口b)iix=1到10//在port_in调用之间创建延迟iiy+=iix//ibm thinkpad需要下一个iix//打印回声[i]下一个i端口输出端口,0/=====================/dt=经过的时间(1)/-----int i_dist=0/初始化计时器对于i=min_range_check到max_sonar_array-1颜色=绿色/如果着陆(回波[i],掩码)=0如果echo[i]=0颜色=红色结尾/if land(echo[i],mask)=掩码如果echo[i]=掩码颜色=黄色如果i_dist=0i_dist=i/i=最大sonar_array结尾结尾移动浮筒(i),浮筒(声纳+1)-0.3线浮标(i),浮标(声纳+1)+0.3,彩色下一个i//打印“声纳”,声纳,“,range=”,i_dist,“(dt1=”,dt,“dt2=”,elapsed_time(1),“)”打印“声纳”,声纳,“,范围[cm]=”,浮标(i_dist)*1.389如果声纳=8打印“”结尾声纳范围[声纳]=浮标(i_dist)*1.19//sonar_range[sonar]=浮点(i_dist)*1.19//旧笔记本电脑的值//结尾返回/*HH1!1*/sonar_plot:/-------声纳图------------//------------删除旧数据-------------//打印f“x_wc=%f,y_wc=%f,phi_wc=1%f\n”,x_wc,y_wc,phi_wc//打印“phi_wc=”,phi_wc*180/PI颜色=0//0=黑色对于声纳=1到8xs=old_x_wc+sonar_x[声纳]*cos(old_phi_wc-0.5*PI)-sonar_y[声纳]*sin(old_phi_wc-0.5m*PI)ys=old_y_wc+sonar_y[声纳]*cos(old_phi_wc-0.5*PI)+sonarx[声纳]*sin(old_phi_wc-0.5m*PI)win_移动xs,ysxs=xs+old_sonar_range[声纳]*cos(old_phi_wc-0.5*PI+sonar_dir[声纳)ys=ys+old_sonar_range[声纳]*sin(old_phi_wc-0.5*PI+sonar_dir[声纳])win_line xs、ys、颜色下一个声纳//打印“擦除旧声纳”//巴基斯坦//------------新数据-------------颜色=5//灰色等级对于声纳=1到8xs=x_wc+声纳_x[声纳]*cos(phi_wc-0.5*PI)-声纳_y[声纳]*sin(phi_wc-0.5*PI)ys=y_wc+sonar_y[声纳]*cos(phi_wc-0.5*PI)+sonar_x[声纳]*sin(phi_wc-0.5*PI)win_move xs,ys(冬季移动xs,ys)xs=xs+声纳范围[声纳]*cos(phi_wc-0.5*PI+声纳dir[声纳】)ys=ys+声纳范围[声纳]*sin(phi_wc-0.5*PI+声纳dir[声纳])win_line xs,ys,颜色旧声纳范围[声纳]=声纳范围[声纳]下一个声纳/巴基斯坦返回/*SH1!1*//*SS!!1*//*HS!!1*/查找最小最大值:浮点max_act=0浮动最小值=1int最大节点=0,最小节点=0对于nodes_id=first_node(current_grid)到last_node(current _ grid)如果node_output(nodes_id)>max_actmax_act=节点输出(节点id)max_node=节点id结尾如果node_output(nodes_id)<min_actmin_act=节点输出(节点id)min_node=节点id结尾下一个节点id返回/*HH1!1*/normalize_winner://按因素推进,使获胜者//活动1和最小的活动0gosub查找最小最大ct//升压对于nodes_id=first_node(current_grid)到last_node(current _ grid)设置节点输出节点id,(节点输出(节点id)-最小act)/(最大act最小act下一个节点id返回/*HH1!1*/横向禁止://通过活动节点的平均活动抑制所有//求平均值float av_act=0float node_number=0对于nodes_id=first_node(current_grid)到last_node(current_grid)如果node_output(nodes_id)>0.01av_act=av_act+节点输出(节点id)节点编号=节点编号+1结尾下一个节点idav_act=0.8*av_act/节点编号//当所有活动节点具有相同的输出时,可以防止出现问题如果node_number=1av_act=0结尾//减去平均值对于nodes_id=first_node(current_grid)到last_node(current _ grid)如果node_output(nodes_id)>av_act集合节点输出节点id,节点输出(节点id)-平均act其他的集合节点输出节点id,0结尾下一个节点id返回/*SH1!1*//*#CP=29256:XX=99*/