Goulib.motion module¶
motion simulation (kinematics)
-
class
Goulib.motion.
PVA
(funcs)[source]¶ Bases:
Goulib.plot.Plot
represents a function of time returning position, velocity, and acceleration
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
html
(**kwargs)¶
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt='svg', **kwargs)¶
-
save
(filename, **kwargs)¶
-
svg
(**kwargs)¶
-
-
class
Goulib.motion.
Segment
(t0, t1, funcs)[source]¶ Bases:
Goulib.motion.PVA
a PVA defined between 2 times, null elsewhere
-
timeWhenPosBiggerThan
(pos, resolution=0.01)[source]¶ search the first time when the position is bigger than pos :params pos: the pos that must at least be reached :params resolution: the time resolution in sec
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
html
(**kwargs)¶
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt='svg', **kwargs)¶
-
save
(filename, **kwargs)¶
-
svg
(**kwargs)¶
-
-
class
Goulib.motion.
Segments
(segments=[], label='Segments')[source]¶ Bases:
Goulib.motion.Segment
can be initialized with a list of segment (that of course can also be a Segments) :param label: a label can be given
-
__init__
(segments=[], label='Segments')[source]¶ can be initialized with a list of segment (that of course can also be a Segments) :param label: a label can be given
-
insert
(segment, autoJoin=True)[source]¶ insert a segment into Segments :param segment: the segment to add. must be in a range that is not already defined or it will rise a value error exception :param autoJoin: if True and the added segment has the same starting position as the last segment’s end
and both velocity are 0 then a segment of (pos,v=0,a=0) is automatically added. this help discribing movements only where there is curently a movement
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
dt
()¶
-
endAcc
()¶
-
endJerk
()¶
-
endPos
()¶
-
endSpeed
()¶
-
endTime
()¶
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt='svg', **kwargs)¶
-
save
(filename, **kwargs)¶
-
startAcc
()¶
-
startJerk
()¶
-
startPos
()¶
-
startSpeed
()¶
-
startTime
()¶
-
svg
(**kwargs)¶
-
timeWhenPosBiggerThan
(pos, resolution=0.01)¶ search the first time when the position is bigger than pos :params pos: the pos that must at least be reached :params resolution: the time resolution in sec
-
-
class
Goulib.motion.
SegmentPoly
(t0, t1, p)[source]¶ Bases:
Goulib.motion.Segment
a segment defined by a polynomial position law
-
__call__
(t)¶
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
dt
()¶
-
end
()¶
-
endAcc
()¶
-
endJerk
()¶
-
endPos
()¶
-
endSpeed
()¶
-
endTime
()¶
-
html
(**kwargs)¶
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt='svg', **kwargs)¶
-
save
(filename, **kwargs)¶
-
start
()¶
-
startAcc
()¶
-
startJerk
()¶
-
startPos
()¶
-
startSpeed
()¶
-
startTime
()¶
-
svg
(**kwargs)¶
-
timeWhenPosBiggerThan
(pos, resolution=0.01)¶ search the first time when the position is bigger than pos :params pos: the pos that must at least be reached :params resolution: the time resolution in sec
-
-
class
Goulib.motion.
Actuator
(stateMachine, vmax, acc, name='', pos=<Quantity(0, 'meter')>, distPerTurn=<Quantity(1, 'millimeter')>, angle=<Quantity(0, 'degree')>, mass=<Quantity(1, 'kilogram')>, friction=<Quantity(0, 'newton')>)[source]¶ Bases:
object
simulate an actuator. each movements are recorded in a Segments object the goal of this class is to simplify the writing in most common cases
Params stateMachine: a stateMachine. the only requirement for the simulation is to have a .time as V(time,’s’) and a .displayMove boolean Params acc: the default acceleration of the actuator Params vmax: the default vmax Params name: name of the actuator Params pos: the initial position Params distPerTurn: the distance of the actuator per motor (or reductor) turn Params angle: if 0, the mass is moving horizontally, if 90° vertically: CAREFULL in that case the bigger the position, the higher Params mass: the mass to move (for both intertia and lifting force) Params friction: the friction force TODO: currently no difference between u0 and udynamique intertia of the pulley should be taken into consideration
WARNING: the maxForce simulation is minimalist: as we know nothing about the reversibility of the grears and where is the friction, friction is always added even if it might be compensated by the mass in the case we go down
-
__init__
(stateMachine, vmax, acc, name='', pos=<Quantity(0, 'meter')>, distPerTurn=<Quantity(1, 'millimeter')>, angle=<Quantity(0, 'degree')>, mass=<Quantity(1, 'kilogram')>, friction=<Quantity(0, 'newton')>)[source]¶ Params stateMachine: a stateMachine. the only requirement for the simulation is to have a .time as V(time,’s’) and a .displayMove boolean Params acc: the default acceleration of the actuator Params vmax: the default vmax Params name: name of the actuator Params pos: the initial position Params distPerTurn: the distance of the actuator per motor (or reductor) turn Params angle: if 0, the mass is moving horizontally, if 90° vertically: CAREFULL in that case the bigger the position, the higher Params mass: the mass to move (for both intertia and lifting force) Params friction: the friction force TODO: currently no difference between u0 and udynamique intertia of the pulley should be taken into consideration
WARNING: the maxForce simulation is minimalist: as we know nothing about the reversibility of the grears and where is the friction, friction is always added even if it might be compensated by the mass in the case we go down
-
move
(newpos, relative=False, time=None, wait=True, vmax=None, acc=None)[source]¶ moves the actuator to newpos :params newpos: the new absolute position :params time: the starting time of the move. by default (None) the state machine time will be used but
one can force the starting poing in the past typically to do parallel moves of different actuatorsParams vmax: by default the values given at initialisation, but a value for this move can be given Params acc: by default the values given at initialisation, but a value for this move can be given
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
-
class
Goulib.motion.
TimeDiagram
(actuators, stateMachines=[], fromTime=None, toTime=None)[source]¶ Bases:
Goulib.plot.Plot
Params stateMachines: [(stateMachine,pos,posShift),...] -
__init__
(actuators, stateMachines=[], fromTime=None, toTime=None)[source]¶ Params stateMachines: [(stateMachine,pos,posShift),...]
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
html
(**kwargs)¶
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt='svg', **kwargs)¶
-
save
(filename, **kwargs)¶
-
svg
(**kwargs)¶
-
-
Goulib.motion.
ramp
(dp, v0, v1, a)[source]¶ Parameters: - dp – float delta position or None if unknown
- v0 – float initial velocity or None if unknown
- v1 – float final velocity or None if unknown
- a – float acceleration
Returns: float shortest time to accelerate between constraints
-
Goulib.motion.
trapeze
(dp, vmax, a, v0=0, v2=0)[source]¶ Parameters: - dp – float delta position
- vmax – float maximal velocity
- a – float acceleration
- v0 – float initial velocity, 0 by default
- v2 – float final velocity, 0 by default
Returns: tuple of 6 values:
- time at end of acceleration
- position at end of acceleration
- velocity at end of acceleration
- time at begin of deceleration
- position at begin of deceleration
- total time
-
Goulib.motion.
Segment2ndDegree
(t0, t1, start, end=None)[source]¶ calculates a constant acceleration Segment between start and end
Parameters: - t0,t1 – float start,end time. one of both may be None for undefined
- start – (position, velocity, acceleration) float tuple. some values may be None for undefined
- end – (position, velocity, acceleration) float tuple. some values may be None for undefined
Returns: the function can cope with almost any combination of defined/undefined parameters, among others (see tests):
- Segment2ndDegree(t0,t1,(p0,v0),p1) # time interval and start + end positions + initial speed
- Segment2ndDegree(t0,t1,(p0,v0,a)) # time interval and start with acceleration
- Segment2ndDegree(t0,t1,None,(p1,v1,a)) # time interval and end pva
- Segment2ndDegree(t0,None,(p0,v0),(p1,v1)) # start + end positions + velocities
- Segment2ndDegree(t0,None,(p0,v0,a),(None,v1)) # start pva + end velocity
- Segment2ndDegree(None,t1,p0,(p1,v1,a)) # end pva + start position
the function also accepts some combinations of overconstraining parameters:
- Segment2ndDegree(t0,t1,(p0,v0,a),p1) # time interval, start pva, end position => adjust t1
- Segment2ndDegree(t0,t1,(p0,v0,a),(None,v1)) # time interval, start pva, v1=max vel => adjust t1
Raises: ValueError – when not enough parameters are specified to define the Segment univoquely
-
Goulib.motion.
Segment4thDegree
(t0, t1, start, end)[source]¶ smooth trajectory from an initial position and initial speed (p0,v0) to a final position and speed (p1,v1) * if t1<=t0, t1 is calculated
-
Goulib.motion.
SegmentsTrapezoidalSpeed
(t0, p0, p3, a, T=0, vmax=inf, v0=0, v3=0)[source]¶ Parameters: - t0 – float start time
- p0 – float start position
- p3 – float end position
- a – float specified acceleration. if =0, use specified time
- T – float specified time. if =0 (default), use specified acceleration
- vmax – float max speed. default is infinity (i.e. triangular speed)
- v0 – initial speed
- v3 –
final speed if T <> 0 then v3 = v0 v1 +——-+
/ / + v3
- v0 +
- | | |
t0 t1 t2 t3