
Линейное движение робота и резка углов в C++
Для приложений движения робота, где робот выполняет линейное движение вдоль запланированных точек движения, обычно робот не достигает этих точек, поскольку на пути должна быть обеспечена постоянная скорость TCP. В этом случае путевые точки не достигаются точно, и робот проходит эти точки на определенном расстоянии (обычно определяемом как радиус окружности).
Практический метод состоит в том, чтобы спроектировать путь, используя прямые линии с постоянной
скоростью, и деформировать углы, чтобы получить плавный переход.
Мы можем представить, что путь робота должен выполнять движение от p0 до p2 на протяжении p1. Для обеспечения движения с постоянной скоростью (например, при сварке или покраске роботов) точка p1 не достигается, а путь от точки p0 до точки p2 изменяется (обычно автоматически в контроллере робота). Мы можем изобразить это движение следующей фигурой.

В этой статье я покажу вам, как вы можете смоделировать этот путь, используя стандартную кривую параболы (которая обычно используется в индустрии робототехники).
Исходный код вы найдете на моем GitHub.
Формулировка решения и моделирование
Путь, соединяющий точки r0 и r2 и проходящий близко к углу r1, определяется следующей системой уравнений:

Рассматривая трехмерный вектор в системе координат XYZ, мы можем просто вычислить такой путь и сравнить с траекторией, не «срезая углы». Как мы обсуждали ранее, чтобы сохранить плавный путь, нам нужно обеспечить постоянную скорость на пути. Это влияет на введение угловой резки (модификация pat). Обратите внимание, что он влияет на «радиус» кривой, поэтому значение этого параметра зависит от приложения, которое выполняет робот.

Чтобы дать вам небольшую демонстрацию того, как это работает на практике, я подготовил несколько простых симуляций робота 2R, в которых траектория строится в координатах XY. Я применил инверсную кинематику (IK) и начертил положение суставов робота. Пожалуйста, рассмотрите приведенные ниже рисунки и обратите внимание на разницу между движением со срезанием углов и без него.



Для построения графика требуется включить заголовочный файл, который должен находиться в той же папке, что и ваш cpp (файл, который вы можете клонировать из моего репозитория).
Ваша программа может быть скомпилирована следующим образом:
//compile g++ my_prog.cpp -o my_prog -I/usr/include/python3.8 -lpython3.8// //run ./my_prog //folder tree ├── my_prog ├── my_prog.cpp ├── matplotlibcpp.h
Спасибо за чтение.