Re: [Machinekit] How do I hook into the trajectory planner queue?

2017-05-09 Thread Bas de Bruijn

> On 09 May 2017, at 04:30, Brian Schousek  wrote:
> 
> I'm having good luck achieving microsecond resolution pulse trains using DMA 
> on a Raspberry Pi at near real-time rates, and I'm confident that with some 
> optimization this will be workable for step generation with low cpu usage. I 
> currently have this step generation hacked into a Machinekit configuration 
> which monitors the trajectory planner position pins. When a loop in Python 
> detects a change in axis.0.motor-pos-cmd, for example, it queries 
> axis.0.joint-vel-cmd and creates a stream of n steps at the proper frequency 
> where n is the number of steps that will fit into my millisecond servo loop. 

Python is probably not the right vehicle for realtime tasks (That’s what I 
always understood).
I’m not really sure I understand what you’re trying to accomplish here. Are you 
developing a hardware driver? Are you making a planner?

> 
> The DMA library I am using is capable of synchronizing sequential waveforms, 
> so I would like to be able to look ahead in the trajectory planner queue a 
> step or two and construct the waveforms in advance where possible, which 
> should help solve some latency issues. I have a few questions towards 
> achieving this:
> 
> 1) Is there a better mechanism to detect a new trajectory step than 
> monitoring changes in the position-commanded HAL pin?

You could write a component where you add these samples of axis.0.motor-pos-cmd 
and axis.0.joint-vel-cmd to a ringbuffer. (see delayline component where you 
can add a number of different type of pins to a ringbuffer). Inspect the 
ringbuffer samples to detect these changes and calculate your special stuff.
Perhaps it’s easier to create a 2nd ringbuffer (than modifying the rinbuffer 
samples) for playout.

> 2) Is there visibility into the trajectory planning queue somewhere?

see links below

> 3) Perhaps these are not exposed in the current Python bindings; if not, is 
> there a good example of accessing it via C calls?

I’m not deep enough into that, good starting point I guess would be these:
https://youtu.be/Bg38894LPPg
https://youtu.be/ev_RI4xgzF8

Bas

> 4) Are there any other tips on source code areas I should investigate as 
> resources in putting this together?
> 
> Brian

-- 
website: http://www.machinekit.io blog: http://blog.machinekit.io github: 
https://github.com/machinekit
--- 
You received this message because you are subscribed to the Google Groups 
"Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to machinekit+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.


[Machinekit] How do I hook into the trajectory planner queue?

2017-05-08 Thread Brian Schousek
I'm having good luck achieving microsecond resolution pulse trains using 
DMA on a Raspberry Pi at near real-time rates, and I'm confident that with 
some optimization this will be workable for step generation with low cpu 
usage. I currently have this step generation hacked into a Machinekit 
configuration which monitors the trajectory planner position pins. When a 
loop in Python detects a change in axis.0.motor-pos-cmd, for example, it 
queries axis.0.joint-vel-cmd and creates a stream of n steps at the proper 
frequency where n is the number of steps that will fit into my millisecond 
servo loop. 

The DMA library I am using is capable of synchronizing sequential 
waveforms, so I would like to be able to look ahead in the trajectory 
planner queue a step or two and construct the waveforms in advance where 
possible, which should help solve some latency issues. I have a few 
questions towards achieving this:

1) Is there a better mechanism to detect a new trajectory step than 
monitoring changes in the position-commanded HAL pin?
2) Is there visibility into the trajectory planning queue somewhere?
3) Perhaps these are not exposed in the current Python bindings; if not, is 
there a good example of accessing it via C calls?
4) Are there any other tips on source code areas I should investigate as 
resources in putting this together?

Brian



-- 
website: http://www.machinekit.io blog: http://blog.machinekit.io github: 
https://github.com/machinekit
--- 
You received this message because you are subscribed to the Google Groups 
"Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to machinekit+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.