ros-industrial / abb_libegm

A C++ library for interfacing with ABB robot controllers supporting Externally Guided Motion (689-1)
BSD 3-Clause "New" or "Revised" License
93 stars 53 forks source link

Append multiple trajectories creates stop during motion between trajectories #144

Closed kappa95 closed 1 year ago

kappa95 commented 1 year ago

Dear community,

I am trying to sending trajectories quite big (magnitudes of 300.000 points) in order to have a continuous path quite long (lasts hours at 10mm/s). The issue that I get is when I am trying to send the whole trajectory (all the points together) the robot is like stopped and moves very discontinuously. It seems that the abb::egm::wrapper::trajectory::TrajectoryGoal object can't contain so many goal points. Hence, I thought to creates buffers of the whole trajectory to append (i.e., using an object std::vector<abb::egm::wrapper::trajectory::TrajectoryGoal>). This seems solves the problem, the issue is that when I am trying to append the trajectory to the robot queue with:

int count{0};
  wait = true;
  bool flag_traj = true;
  abb::egm::wrapper::trajectory::ExecutionProgress execution_progress;
  spdlog::info("2: Add a pose trajectory to the execution queue");
  while (wait)
  {
    if (flag_traj)
    {
      for (const auto &tji : traj_vec)
      {
        count++;
        bool traj_ok = egm_interface.addTrajectory(tji);
        while (!traj_ok)
        {
          spdlog::debug("waiting ok...");
        }
        // Start extrusion
        rws_interface.setIOSignal(extrud_sig, "500");
        // FIXME: surely here is not ok...
        spdlog::debug("Counter: {}", count);
        boost::this_thread::sleep_for(boost::chrono::milliseconds(1000));
      }
      flag_traj = false;
    }
    if (egm_interface.retrieveExecutionProgress(&execution_progress))
    {
      wait = execution_progress.goal_active();
    }
  }

I get two possible problems:

  1. If the pause is too short I got the problem of before (like overflow of the queue)
  2. If it is in the middle I get that robot moves and stops for few instants.

Have you ever get this issue? There are alternatives?

Thank you