Source code for choirbot.guidance.distributed_control.formationcontrol
import numpy as np
from numpy.linalg import norm
from .distributed_control import DistributedControlGuidance
[docs]class FormationControlGuidance(DistributedControlGuidance):
"""
Formation Control
Implements a formation control law for systems....
"""
[docs] def __init__(self, update_frequency: float, gain: float=0.1, pose_handler: str=None, pose_topic: str=None, input_topic = 'velocity'):
"""
Init method
"""
super().__init__(update_frequency, pose_handler, pose_topic, input_topic)
self.formation_control_gain = gain
self.weights = self.get_parameter('weights').value
[docs] def evaluate_input(self, neigh_data):
u = np.zeros(3)
for ii, pos_ii in neigh_data.items():
error = pos_ii.position - self.current_pose.position
u += self.formation_control_gain*(norm(error)**2- self.weights[ii]**2) * error
return u