Hi Dave,
If you add a few lines of code inside the synchrodofs halmodule.c pin setup function.
You can add a few hal pins there to create an offset.
and then at last do a recompile with the /opt/hal-core/src/hal/components/synchrodofs/hal/./runtest.
/opt/hal-core/src/hal/components/test/test.c exactly shows how to add hal pins and set a value to a pin like the enable pin is doing
over there.
I think kinematics are 1 to 1 connected to lcnc's trajectory tcp output at servo thread speed.
Then the kinematics output can go to the dofs.so or synchrodofs.so modules, depending on what you want.
Could there be a problem with the max velocities if you sync the XYZ movement and then feed that to the kinematic, since one of the 6 axis might have to move faster than the max velocity to keep up the sync?
In general for ruckig, i think it's synchronised to respect the slowest dofs. So yes it could bring you into a problem.
For simple xyz tcp path following, synchronization has in my
opinion not really benefits, it can have even more downsides, like huge memory loads.
Or would I take the 6 output from the kinematics and feed that in to 6 sdofs to keep the motion in sync?
I personally would take the dofs component. /opt/hal-core/src/hal/components/dofs/hal
This is a runtime fast solution. And yes. After the kinematics using a Dofs make's sence.
Some background info. There are options to set some dofs values in the cpp_interface files.
This are all the enums explained :
- //! enum: position, velocity
- in.control_interface=ruckig::ControlInterface::Position;
- //! Phase, ///< Phase synchronize the DoFs when possible, else fallback to "Time" strategy
- //! Time, ///< Always synchronize the DoFs to reach the target at the same time (Default)
- //! TimeIfNecessary, ///< Synchronize only when necessary (e.g. for non-zero target velocity or acceleration)
- //! None, ///< Calculate every DoF independently
- in.synchronization=ruckig::Synchronization::None;
- //! Continuous, ///< Every trajectory duration is allowed (Default)
- //! Discrete, ///< The trajectory duration must be a multiple of the control cycle
- in.duration_discretization=ruckig::DurationDiscretization::Continuous;