ZJU-FAST-Lab / Swarm-Formation

Formation Flight in Dense Environments
GNU General Public License v3.0
406 stars 64 forks source link

想要将代码移植到turtlebot3,遇到速度无法降低到设定范围的问题 #16

Closed ljslam213 closed 1 year ago

ljslam213 commented 1 year ago

作者你好,我最近在Turtlebot3burger上调试你的代码,但最大速度只有0.22。所以对你的代码修改,但输出的速度基本上都超过0.3左右。

我做的修改文件run_in_sim.launch72-75代码,修改如下:

<arg name="max_vel" value="0.15" />
 <arg name="max_acc" value="1" />
 <!--always set to 1.5 times grater than sensing horizen-->
 <arg name="planning_horizon" value="1.5" />

然后,我在traj_server.cpp中输出所有的速度值。

for (int i = 0; i < time_vec_.size(); i++) {
      double tmp_vel2 = (vel_vec_[i](0))*(vel_vec_[i](0)) + (vel_vec_[i](1))*(vel_vec_[i](1)) + (vel_vec_[i](2))*(vel_vec_[i](2));

      //------------- 我添加的代码,用来输出每次运行的速度
      if(tmp_vel2>(0.15*0.15))
        result_file<<"velocity: "<<sqrt(tmp_vel2)<<"    overspeed!"<<"\n";
      else
        result_file<<"velocity: "<<sqrt(tmp_vel2)<<"\n";
      //------------- 

      max_vel2 = (tmp_vel2 > max_vel2) ? tmp_vel2 : max_vel2;
}

下面是一次到达目标点期间,所有运行的速度值,由于结果比较多,这里给出链接。文件名第一个数字表示不同的无人机。

如果有其他可以减低输出的速度的方法,麻烦告诉我。

ZamesNg commented 1 year ago

我遇到过类似的问题,应该是软约束的通病。可以简单算一算: 当你速度限制1.5m/s时,实际速度1.65m/s,那么penalty大概是:1.65^2 - 1.5^2 = 0.4725; 当你速度限制0.15m/s时,实际速度0.30m/s,(和上面的例子一样都是相差0.15m/s),那么penalty大概是 0.3^2 - 0.15^2 = 0.0225,这个penalty很小很小了,几乎可以忽略。 所以一个可行的办法也许是,改变 Swarm-Formation/src/planner/plan_manage/config/normal_hexagon.yaml 里的权重参数:

  weight_swarm        : 50000.0
  weight_feasibility  : 10000.0 ---> 一个更大的数
  weight_sqrvariance  : 10000.0
ljslam213 commented 1 year ago

这样啊,我这两天也在提高这个权重,现在把weight_feasibility <-- 700000,把速度降低到0.19左右,基本满足要求。感谢!