I’m currently working on controlling a 6-axis industrial robot using joint-space trajectories. My goal is to generate motion profiles that follow a 7th-degree polynomial to have full control over velocity, acceleration, and jerk, similar to what’s often done in advanced trajectory planning for smoother, more precise motion.
So far, I’ve implemented the trajectory generation in C on the B&R side, but I’d love to leverage virtual axes in my PLC (I’ve used this approach in other projects and find it very effective).
My question:
Is there a way to achieve this 7th-degree polynomial trajectory generation using mappMotion, mappCNC, or mappRobotics?
I’ve dug through the documentation and the Community but haven’t found any clear references to polynomial-based trajectory planning beyond standard profiles
Has anyone here tackled a similar use case or found a workaround? Or is there a feature I might be missing in the B&R ecosystem?
Any insights, documentation pointers, or examples would be greatly appreciated!
There are some additional Features like Rounding with a polynom, combine tow linear segments via a radius.
There is the Compressor function. Compressor
But it is stated that this function is not usable for 6Axis Robots. And it is not stated which degree the polynome does have.
If you have your own generator you can use the OnlinePathInfluence to send the TCP Coordinates in a cyclic stream to the PathPlanner. In this way you can use the Kinematics Supported by B&R and you do not have the need to calculate the Transformations. MC_BR_OnlinePathInfluence
It’s certainly possible but the tools aren’t built in. The only polynomial support is going to be for cam generation and usage, which I have used in similar use cases, but doesn’t get you much.
What I would look at isn’t if it’s possible, but what parts of Mapp Motion you still want. If you are already generating the paths, you can just use MC_BR_MoveCyclicPosition on the axes. What parts are you trying to keep, Interpreter, feed forward torques?
To give a bit more detail I will try to explain deeper my problem
Working projet: “Control in articular position of 4 Staubli 6 axis robots”
In this project I control 4 robots in articular position based on 24 virtual axis on the PLC side.
I generate trajectories of each the 4 robots in a separate own-made digital twin, this integrate the inverse kinematics, I generate each axis positions every 4ms and save it in a binary file that is read later by the PLC.
The motion profile follow Trapeziodal speed, like classic motion profile, example:
On the PLC side each axis use MoveCyclicPosition and position is changed every 4ms based on the data in the binary file.
This works on these robot because the robot controller use filter on the position too smooth the trajectory, so I don’t have to handle jerk.
Actual projet: “Control in articular position of a Fanuc robot”
On this project the “problem” is that Fanuc require to send position with a contiuous acceleration and jerk, so a polynomial motion profile, they recommend 5th degree polynomial, but to be sure to have the control on the jerk too I use 7th degree polynomial.
This is integrate on my own-made digital twin and same thing is done generate the binary file with all articular position.
As on the Fanuc controller they monitored the jerk, I don’t know if I can use same principe as for Staubli, using MoveCyclicPosition on each axis.
As I can’t use jerk on virtual axis, I think that the virtual axis will use infinite jerk and so I think on the firsts samples the Fanuc controller will return an error of Jerk limit, due to numeric derivation of the position.
So I manually generate motion profile like this:
I would like to keep on the PLC side a “virtual robot” with commands and status, like this using the communication I sent the actual positions of my virtual robot to the robot controller.
So using MC_BR_MoveCyclicPosition I need to make some test with the Fanuc controller, one thing I didn’t mention is that I would like to be able to use some other MpAxis feature too, like MoveAbsolute when the robots aren’t replaying a pre-generated trajectory, I would like to be able to move them too, like go to home position for example. But if I use the actual MpAxis generation I will have some error on the robot.
That is clear, but if you are using MoveCyclicPos it doesn’t matter if the axis has a jerk input, it just follows exactly what you give it every cycle (there are interpolation options), if your input path is smooth and continuous the output will be too.
I was in contact with development and got some additional info i like to share.
MappMotion (6.6.0) does not have a interface which allows user to program splines directly in a MotionProgramm for the PathPlanner. Some experimental one existed in motion legacy (ARNC0) which were only internaly used for university studies and have not been released. They were based on geometry, no time information.
If there is an interesst for a deeper discussion with the Team from B&R you can reach out to your sales contact, so they could organise a meeting.
Until now i had only contact with a Fanuc Robot, as “Start Program” and the Robot used its own Controller.
I think it will be shown in B&R as a 3rd Party Fieldbus Device with some Status,Control-Datapoints and some SetPositions.
If you like to use a B&R Axis Objekt i think this could be a UseCase for the PureVAx - DS402 DSP Mode.
As I work for research institute I’ll reach out my local B&R contact, to maybe know a bit more about this!
For the Fanuc Robot, Fanuc recently release “StreamMotion” without validation of the Japan Headquarter, now it’s just an option. This option add a UDP socket on the Fanuc Controller that give access, using the API they provide, to control the robot in position (every 8ms for the moment).
You could set-up an axes-group without mechanical system consisting of 6 slave axes. Then use virtual axes and set up velocity, acceleration and jerk limits. Use motion programs to move your axes synchronously to whatever end positions you need. This will create a profile with limited (but non-continuous) jerk.
Do you need continuous jerk as well? If yes, you could perhaps apply a jerk filter and use the jerk filtered position to compute the derivates yourself.
(But be careful to have a perfect sync of pos, vel, acc, jerk and snap then. There are a some pitfalls..)