Кажется, что вы застряли у стены, потому что колеблетесь на расстоянии 0,6.
Например:
- Двигайтесь под углом к стене, в конечном итоге достигая <0.6f </li>
- Вращаться от стены, останавливаться, когда> 0,6f. Другими словами, 0.6000001f (например)
- Возобновить нормальную траекторию.
- Почти сразу <0,6f </li>
- Перейти к 2
Вы застрянете, слегка наклонившись к стене и немного от нее.
Вам нужна буферная зона. Как только вы окажетесь на расстоянии MIN_DIS от стены, вам нужно повернуть в сторону, пока вы не достигнете некоторого BUFFER_DIS от стены, где BUFFER_DIS> MIN_DIS на достаточную сумму.
EDIT:
Похоже, у вас есть несколько проблем. Сначала вы проверяете, находится ли laser_data рядом со стеной, и вращаетесь ли вы к стене. Вам нужно проверить, не близко ли это к стене, и повернуть к ней.
Во-вторых, вы находитесь в очень узком цикле, регулируя скорость колес. Это, вероятно, приведет к плохим вещам. Вам нужно вызвать функцию trackWall (), когда вы находитесь слишком далеко от стены, которая будет опрашивать laser.isDataReady () в отдельном цикле. Либо так, либо вам нужен конечный автомат в вашем основном цикле опроса. Если нет, то вы бессмысленно регулируете скорость вращения колеса с помощью устаревших данных лазера.
В-третьих, можете ли вы гарантировать, что стена всегда будет в пределах 0,6f? Если нет, ваш робот будет вращаться бесконечно, если он далеко от стены.