exponenta event banner

Предотвращение препятствий с помощью TurtleBot и VFH

В этом примере показано, как использовать ROS Toolbox и TurtleBot ® с векторными гистограммами полей (VFH) для устранения препятствий при управлении роботом в среде. Робот бродит, двигаясь вперед, пока препятствия не встают на пути. controllerVFH объект вычисляет направления управления, чтобы избежать объектов при попытке движения вперед.

(Необязательно) Если вы еще не установили TurtleBot (моделируемый или реальный), установите виртуальную машину с тренажером Gazebo и пакетом TurtleBot. Для установки и настройки TurtleBot в беседке см. раздел Начало работы с беседкой и моделируемым TurtleBot (ROS Toolbox).

Подключитесь к TurtleBot, используя IP-адрес, полученный при установке.

rosinit('192.168.233.133',11311)
Initializing global node /matlab_global_node_90736 with NodeURI http://192.168.233.1:61063/

Создайте издателя и подписчика для совместного использования информации с классом VFH. Абонент получает данные лазерного сканирования от робота. Издатель посылает роботу команды скорости.

Используемые темы предназначены для моделирования TurtleBot. Настройте имена тем для конкретного робота.

laserSub = rossubscriber('/scan');
[velPub,velMsg] = rospublisher('/mobile_base/commands/velocity');

Настройка объекта VFH для предотвращения препятствий. Установите UseLidarScan свойство для true. Укажите свойства алгоритма для спецификаций робота. Задать целевое направление как 0 для того, чтобы проехать прямо.

vfh = controllerVFH;
vfh.UseLidarScan = true;
vfh.DistanceLimits = [0.05 1];
vfh.RobotRadius = 0.1;
vfh.MinTurningRadius = 0.2;
vfh.SafetyDistance = 0.1;

targetDir = 0;

Настройка объекта Rate с помощью rateControl, который может отслеживать время вашего цикла. Этот объект также можно использовать для управления скоростью, с которой работает цикл.

rate = rateControl(10);

Создайте контур, который собирает данные, вычисляет направление рулевого управления и управляет роботом. Установите время цикла 30 секунд.

Используйте абонента АФК для сбора данных лазерного сканирования. Создать lidarScan путем задания диапазонов и углов. Рассчитайте направление управления с помощью объекта VFH на основе входных данных лазерного сканирования. Преобразование направления рулевого управления в требуемую линейную и угловую скорость. Если направление поворота не найдено, робот останавливается и выполняет поиск, поворачиваясь на месте.

Управляйте роботом, отправляя сообщение, содержащее угловую скорость и требуемую линейную скорость, с помощью издателя ROS.

while rate.TotalElapsedTime < 30

	% Get laser scan data
	laserScan = receive(laserSub);
	ranges = double(laserScan.Ranges);
	angles = double(laserScan.readScanAngles);
 
	% Create a lidarScan object from the ranges and angles
        scan = lidarScan(ranges,angles);
        
	% Call VFH object to computer steering direction
	steerDir = vfh(scan, targetDir);  
    
	% Calculate velocities
	if ~isnan(steerDir) % If steering direction is valid
		desiredV = 0.2;
		w = exampleHelperComputeAngularVelocity(steerDir, 1);
	else % Stop and search for valid direction
		desiredV = 0.0;
		w = 0.5;
	end

	% Assign and send velocity commands
	velMsg.Linear.X = desiredV;
	velMsg.Angular.Z = w;
	velPub.send(velMsg);
end

Этот код показывает, как можно использовать алгоритмы Navigation Toolbox™ для управления роботами и реагирования на динамические изменения в их среде. В настоящее время цикл заканчивается через 30 секунд, но могут быть установлены другие условия выхода из цикла на основе информации о сети АФК (т.е. положение робота или количество сообщений лазерного сканирования).

Отключение от сети АФК

rosshutdown
Shutting down global node /matlab_global_node_90736 with NodeURI http://192.168.233.1:61063/