[精品]10月19日虚拟机器人材料
10月19日虚拟机器人材料
启动后,出现4个选择:
一、 快速启动:快速启动运行部分程序实例。另外可以导入或者导出外部的程序实例。
二、 场地编辑:
在场地上点鼠标右键设置属性:可以改变场地的大小,修改场地的名字,最重要的是可以导入外部的图片在作为场地的背景。比如要虚拟机器人走轨迹,我们可以通过PHOTOSHOP等绘图工具自己绘制一条轨迹曲线,然后将它应用到我们的场地中。其中要注意两点:图片的
需要为JPEG格式,并且放到map文件夹下;所画的线条不能太粗也不能太细,经我们多次实验发现线条粗细在PHOTOSHOP中选择3或者4最为合适。
在场景组件选择中有常用和标识点两中,场景组件中有火焰,方体等,选择你需要的组件——添加部件——点场地中的位置,就可以把组件放到场地上了,然后在组件上点鼠标右键设置长宽高和坐标等属性;标识点里面主要是定义启动程序后机器人的初始点和最后的终点等,如不定义,则启动程序时自己放机器人的位置。
三、 机器人搭建:
启动后只能看到一个主机(有的书上叫主板),搭建机器人的组件主要有以下:
1( 传感器:指南针传感器(模拟:传感器正向指向不同的方向,有不同的数值)、
火焰传感器(模拟:离火焰越近值越小)、灰度传感器(模拟:颜色越深值越大)、
碰撞传感器(数字:只有0和1两个值
明碰还是没有碰)、红外避障传感器(数
字:只有0和1两个值表明前方一定距离内有障碍还是没有障碍)。
2( 马达:分Z马达和直流电机,Z马达的样子就像个Z,轮子需要安装到它上面;
直流电机,灭火机器人需要安装风扇,就需要利用它。
3( 轮子:轮子分为万向轮和小轮宽胎,万向轮方便转弯,所以它一般安装在前方。
小轮宽胎用于稳定机器人行走,至少需要两个安装在后方。
4( 其他配件:铜柱和风扇,机器人灭火的时候需要用到它们。
安装过程:省略
端口设置:两Z马达一般设置为0和1;直流电机设置为2;模拟端口(2-6和16-24);数字端口(7-15)
安装过程中注意:传感器的位置(前方还是后方,左还是右,传感器的位置很大程度上决定程序的编写);Z马达的端口(0还是1,决定了转弯的时候哪一边转的快,哪一边转的慢,或者是谁正转谁反转);传感器的感应夹角和感应距离(过早感应或过晚感应程序编写不同,也有可能出现感应不到物体或者卡死不动等现象)
四、 进入仿真
1( 规则选择:不同的比赛项目对传感器数量,马达转速等都有要求,不同的比赛主办
方会事先给出规则。(可以从其他地方找到规则导入)
2( 场地选择:你现在要运行的程序的场地
3( 编写程序(这部分下面专门说明)
4( 选择机器人
然后下一步开始测试
五、 程序的编写
下面以几个实例来说明:
(1) 控制一个虚拟机器人在空白场地上全速行驶2秒后停下来
图形下的程序流程如下: C语言程序:
1
void main()
{
motor(0,100);
motor(1,100);
sleep(2.0);
stop();
}
(2) 走简单轨迹机器人,走一条自己绘制的S形曲线
1( 先用PHOTOSHOP绘制一条S形线,保存为JPEG格式,并在map文件夹下,在场
地属性里选择场景纹理,选择你所画的图片,保存场景。
2( 机器人搭建,需要2个Z马达,2个小轮胎,1个万向轮,2个灰度传感器,Z马达
端口设置为0和1(以左0右1为例);灰度传感器,端口设置为5和6(左6右5
为例)
3( 程序编写如下:
图形下的程序流程 C语言程序:
void main()
{
while(1)
{
if( analog(5)>200)
{ motor(0,30); motor(1,-30); } else
{
if( analog(6)>200)
{
motor(0,-30);
motor(1,30); } else { motor(0,100);
motor(1,100);
}
}
} (3) 机器人走迷宫并灭火程序:
} 1( 机器人的搭建:需要2个Z马达,2个小轮胎,1个万向轮,3个红外线避障传感器,
2
直流电机1个,铜柱若干,火焰传感器3个
先实现走迷宫,程序如下:
void main()
{
while(1) { if( digital(8)==1 ||
digital(9)==1)
{ motor(0,50); motor(1,-50);
}
else {
if( digital(7)==1)
{
motor(0,100);
motor(1,100);
} else {
motor(0,-50); motor(1,50);
}
}
} }
走迷宫的时候用了7,8,9号3个端口,当8号或者9号探测到障碍的时候,这时候向右转,在8号和9号都没有探测到而7号探测到的时候直接行走,如果3个传感器都没有探测到障碍,那么向左转。
这时候还是应该继续右转 这时候该直行了 这时候该右转 这时候该左转
然后要加上灭火
3
图形下的程序流程如下:
火焰传感器分布: 5 4 6
4
C语言程序代码:
void main()
{
while(1) { 当3个火焰传感器中的某一个的探测值小于 if( analog(4)<100 || analog(5)<100 || analog(6)<100)
{ 100,表示离火焰已经比较近了,这时候进入 if( analog(5)<80) 方向微调时期,目的就是让风扇更接近火焰, { 风方便灭火。 motor(0,100);
motor(1,100);
sleep(0.1); 当最中间火焰传感器的值小于80时,再让机 off(0); off(1); 器人前进了0.1 秒,这时候离火焰更近,停 motor(2,100); 止马达0和1,启动直流电机2,带动风扇转 sleep(1.0); 动,开始灭火,灭火时间延迟1秒 } else {
if( analog(4)<50)
{ motor(0,-20); motor(1,20); 可能出现的左右微调时间,在这段时间下,
} 移动速度较慢,若左边探测值很小,表明火 else 焰在左方,向左转一点,反之右转一点 { motor(0,20);
motor(1,-20);
}
} } else
{
if( digital(8)==1 || digital(9)==1) { motor(0,50);
motor(1,-50);
} else {
if( digital(7)==1) 在离火焰很远的地方,走正常的迷宫 {
motor(0,100); motor(1,100); }
else
{ motor(0,-50); motor(1,50);
}
} } }
}
此程序非优化,实际在调试过程中有时候会卡住或者灭不了火,需要不断调整传感器的感应夹
角、感应半径,或者调整程序中设置的模拟信号的程序分支触发值,有的程序代码也根本不会 5
执行到,同样的程序有可能在不同的机器上,有时候通的过,有时候就通不过。
目前的虚拟机器人,省上组织的比赛项目一般为:
组的机器人走迷宫(如第3个实例的前半部分);初中组的为机器人走迷宫灭火(火焰有多支,需要一一灭掉并达到指定点);高中组的为机器人走八卦图(程序较为复杂,特别是临场很容易机器人走卡,完不成任务)。
比赛的地图:比赛的地图和软件自带的地图并不一样,由参加比赛时现场决定为准。所以平时训练需要提供多种不同形式的地图,提高学生应变能力。
比赛的胜负:在能完成任务的情况下,谁花的时间最少,谁就是最优胜者。所以比赛的时候已经能够完成任务了,还要考虑如何调整才能让机器人花的时间更少,需要对程序进行优化,让机器人少走路,走的更快等。
因为这个仿真软件不够成熟,厂家也在不断更新,在实际应用中会出很多错,也会出很多奇怪的现象。所以在比赛的时候都是只能去适应它,程序或许逻辑没有问题,但是也需要做不断的调整和修改才能完成任务。
最后,由于没有
,以上内容都是我们在实际应用中实践而写,或许会有一些问题,若兄弟学校以后也搞此类活动,可以共同探讨软件的一些不足和更优化的方法
双流中学实验学校
2007年10月
6
7