我正在使用虚拟势场来控制2D环境中一组机器人的移动,它们的位置由x和y坐标矩阵给出。虚拟势场取决于许多变量,其中一个是机器人间距离。我的代码的简短(简化)示例如下所示。
x = sym('x',[4 2]); % four robots with x and y coordinates
xd = sym('xd',[1 2]); % a single destination
F = sym(ones(4,1)); % one potential function for each robot
for i=1:size(x,1)
for j=1:size(x,1)
if i~=j
F(i) = F(i)/norm(x(i,:)-x(j,:))^2; % infinite potential when any two robots collide
end
end
F(i) = F(i) * norm(x(i,:)-xd)^2; % add an attraction force to the goal
end
所以现在我已经为潜在的领域创建了符号表达式,我需要找到它们的衍生物,这样我才能应用最陡的下降。现在我想知道:我是否使用函数gradient
或diff
获取关于位置的导数是否有所不同?澄清一下:对于机器人i
,我想采用与xi_1
和xi_2
相关的衍生物。
答案 0 :(得分:1)
如上所述,你的问题接近于数学而非编程。 gradient只是将导数推广到多维度。是的,对于2-D平面中的移动,使用sym/gradient
是有意义的。如the documentation states,如果您仅为第二个参数指定标量,则sym/gradient
将等同于sym/diff
。要正确计算二维渐变,第二个参数必须是双元素向量,例如[xi_1 xi_2]
。