Чтож на ютуб по каким то не понятным причинам видео не грузится, поэтому загрузил на ютубру. ТОЛЬКО ЗВУК ЗАРАНЕЕ ВЫКЛЮЧИТЕ. Почему то после загрузки вместо звука шум.
Технический форум по робототехнике.

pashteet писал(а):Выглядит прелесно![]()
Еще бы чуть чуть по плавнее сделать и вообще будет айс
как лучше будет управлять 3-мя дальномерами работающих на объезд препятствий. Значит 3 датчика зафиксировано на платформе один прямо другие направлены вправо и влево под углом 45. Один на подвижной туреле(движения влево-вправо, вверх-вниз, но он скорей всего будет на измерения расстояния работать, поэтому по возможности его не трогаем). С боковым всё понятно препятствие слева поворачиваем вправо и т.д. А как быть с центральным. Допустим ножка стула, не делать же отъезд назад чтоб робот поехал снова вперёд и наткнулся на эту ножку снова. А разворот лишь в одну сторону не то. Если есть идеи внимательно слушаю
) и использовать результаты накопленных в них событий... сколько до этого было поворотов направо или налево.... сколько пройдено расстояния вообще и от последнего поворота...например: если последний поворот был налево и пройдено большое расстояние (например по времени) то поворот налево ещё раз, так как впереди скорее всего стена...
ну или, как то так...
. Ну несколько не обязательно достаточно одной будет. Можно попробовать сделать переменную которая будет изменяться. Типо первый раз перед сабой видит стену, поворачивает влево и изменяет переменную с 0 на 1. А в след. раз когда увидит препятствие уже будет проверять чему равна данная переменная если 0, значит влево, если 1 значит вправо, затем обнуляем переменную.
$regfile = "m16def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Pind.2 = Output : M1f Alias Portd.2
Config Pind.3 = Output : M1b Alias Portd.3
Config Pind.4 = Output : M2f Alias Portd.4
Config Pind.5 = Output : M2b Alias Portd.5
Enable Interrupts
Dim АЦП As Word , Q As Byte
Q = Inp(&H800) 'Q равняется ячеки памяти по адресу &H800
Do
If АЦП >= 500 Then
If Q = 0 Then : Gosub Разворот_вправо : End If
If Q = 1 Then : Gosub Разворот_влево : End If
Else : Gosub Вперёд : End If
Loop
Вперёд:
M1f = 1 : M2f = 1
M1b = 0 : M2b = 0
Return
Разворот_вправо:
Out &H800 , 1 ' записать 1 по адресу &H800
M1f = 1 : M2f = 0
M1b = 0 : M2b = 1
Return
Разворот_влево:
Out &H800 , 0
M1f = 0 : M2f = 1
M1b = 1 : M2b = 0
Return
:$regfile = "m16def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Pind.2 = Output : M1f Alias Portd.2
Config Pind.3 = Output : M1b Alias Portd.3
Config Pind.4 = Output : M2f Alias Portd.4
Config Pind.5 = Output : M2b Alias Portd.5
Enable Interrupts
Dim АЦП As Word , Q As Bit
Q = 0
Do
Start Adc : АЦП = Getadc(2)
If АЦП >= 500 Then : Gosub Отъехать_от_препятствия_спереди : Else : Gosub Вперёд : End If
Loop
Вперёд:
M1f = 1 : M2f = 1
M1b = 0 : M2b = 0
Return
Отъехать_от_препятствия_спереди:
M1f = 0 : M2f = 0
M1b = 1 : M2b = 1
Wait 1
If Q = 0 Then
M1f = 1 : M2f = 0
Else
M2f = 1 : M1f = 0
End If
Wait 1
If Q = 0 Then
M2f = 1 : M1f = 0
Else
M1f = 1 : M2f = 0
End If
'переустанавливаем переменную
If Q = 0 Then
Q = 1
Else
Q = 0
End If
CiSi писал(а):...а что если с помощью этих дальномеров сканировать область перед роботом (или да же вокруг него)..
типа "обнюхать" и решить, что дальше делать 
просто прикольно, обнухал с двух сторон и дальше...