Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unclear error message #406

Open
Peter230655 opened this issue Oct 24, 2023 · 0 comments
Open

unclear error message #406

Peter230655 opened this issue Oct 24, 2023 · 0 comments

Comments

@Peter230655
Copy link

To visualise the results of an animation (written using sympy.physics.mechanics) I have this cell in the Jupyter notebook:

start6 = time.time()

times1 = []
resultat1 = []

#=======================
zeitpunkte = 500
#=======================

reduction = max(1, int(len(times)/zeitpunkte))

for i in range(len(times)):
    if i % reduction == 0:
        times1.append(times[i])
        resultat1.append(resultat[i])

schritte1 = len(times1)
resultat1 = np.array(resultat1)
times1 = np.array(times1)
print('number of points considered:',len(times1))

Dmc_loc = [[me.dot(punkt.pos_from(P[0]), uv) for uv in N] for punkt in Dmc]
punkt_loc = [[me.dot(punkt.pos_from(P[0]), uv) for uv in N] for punkt in Po]
Dmc_loc_lam = sm.lambdify(qL + pL, Dmc_loc, cse=True)
punkt_loc_lam = sm.lambdify(qL + pL, punkt_loc, cse=True)


winkel = sm.symbols('winkel')
Rotation1 = sm.Matrix([[sm.cos(winkel), -sm.sin(winkel), 0], [sm.sin(winkel), sm.cos(winkel), 0], [0., 0., 1]])
Rot_lam = sm.lambdify(winkel, Rotation1.T)
Rotation = Rot_lam(np.pi/2.)

TC_store = []
TR_store = []
TP_store = []
body_mesh_store = []
track_store = []
farben = ['orange', 'blue', 'green', 'yellow', 'red']

laengen = l1

# the list of frames A contains the inertial frame A[0] = N. This must not be here
AB = copy(A) # for whatever reason, deepcopy does not work here
AB.pop(0)

for i in range(n):
#for its mass center
    TC = sm.eye(4)
    TC[:3, :3] = (AB[i].dcm(N)) * Rotation
    TC = TC.reshape(16, 1)
    TC_lam = sm.lambdify(qL + pL, TC)   

    TR = sm.eye(4)
    TR[:3, :3] = (AB[i].dcm(N)) * Rotation
    TR = TR.reshape(16, 1)
    TR_lam = sm.lambdify(qL + pL, TR) 
    
    TP = sm.eye(4)
    TP[:3, :3] = (AB[i].dcm(N)) * Rotation
    TP = TP.reshape(16, 1)
    TP_lam = sm.lambdify(qL + pL, TP) 


# store the information about the body, expressed in TAc for every time step.
    TCs = []   # for the ball
    TRs = []   # for the rod
    TPs = []   # for the red dot
    
# Create the TAs, containing 'one TA' for each time step
# resultat contains the results of the numeric integration. 
# where the numeric integration was evaluated
    for k_1 in range(resultat1.shape[0]):
        zeit = times[i]
        TCi = TC_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)  # the balls
        TRi = TR_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)  # the rod
        TPi = TP_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)  # the dot

# TAi[12], TAi[13], TAi[14] hold the location of A[i] w.r.t. N.
# As the axis chosen for solving the equations of motion, and the axis given by pythreejs do not 
# coincide, the values for TAi[..] must be permutated accordingly.
# of course here different locations for center of ball and center of mass.
        TRi[12] = -Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][1]
        TRi[13] =  Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][0]
        TRi[14] =  Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][2]
    
        TCi[12] = -Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][1]
        TCi[13] =  Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][0]
        TCi[14] =  Dmc_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][2] 

        TPi[12] = -punkt_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][1]
        TPi[13] =  punkt_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][0]
        TPi[14] =  punkt_loc_lam(*[resultat1[k_1, l] for l in range(resultat1.shape[1])], *pL_vals)[i][2]

        TRs.append(TRi.squeeze().tolist())
        TCs.append(TCi.squeeze().tolist())
        TPs.append(TPi.squeeze().tolist())
       
    TC_store.append(TCs)
    TR_store.append(TRs)
    TP_store.append(TPs)
    
# Create the objects, which will move
# 1. The ball
    body_geom_C = p3js.SphereGeometry(r1, 12, 12)
    body_material_C = p3js.MeshStandardMaterial(color=farben[i], wireframe=False)
    body_mesh_C = p3js.Mesh(geometry=body_geom_C, material=body_material_C, name='ball_' + str(i))

# 2. Rod
    body_geom_R = p3js.CylinderGeometry(radiusTop=0.05, radiusBottom=0.05, height=laengen[i], 
                    radialSegments=6, heightSegments=10, openEnded=False)
    body_material_R = p3js.MeshStandardMaterial(color='black', wireframe=False)
    body_mesh_R = p3js.Mesh(geometry=body_geom_R, material=body_material_R, name='rod_' + str(i))
    
# 3. the dot    
    body_geom_P = p3js.SphereGeometry(0.25, 12, 12)
    body_material_P = p3js.MeshStandardMaterial(color='red', wireframe=False)
    body_mesh_P = p3js.Mesh(geometry=body_geom_P, material=body_material_P, name='punkt_' + str(i))

# locate the body in 3D space and add the coordinate system of the body
    body_mesh_R.matrixAutoUpdate = False
    body_mesh_R.add(p3js.AxesHelper(0.1))  # length of the axis of the ball system A2
    body_mesh_R.matrix = TR_store[i][0]             # starting point of the animation

    body_mesh_C.matrixAutoUpdate = False
    body_mesh_C.add(p3js.AxesHelper(0.01))    # length of the axis of the center of mass system A2
    body_mesh_C.matrix = TC_store[i][0]          # starting point of the animation
    
    body_mesh_P.matrixAutoUpdate = False
    body_mesh_P.add(p3js.AxesHelper(0.01))    # length of the axis of the center of mass system A2
    body_mesh_P.matrix = TP_store[i][0]          # starting point of the animation
    
    
    body_mesh_store.append(body_mesh_C)
    body_mesh_store.append(body_mesh_R)
    body_mesh_store.append(body_mesh_P)
    

# Create the 'picture'.
# all the 'paramters' are taken by trial and error.
view_width = 1200
view_height = 400

# Values just found by trial an error.
p1, p2 = 5, 5
if n == 2:
    p3 = 18
elif n == 3:
    p3 = 22
else:
    p3 = 30

camera = p3js.PerspectiveCamera(position=[p1, p2, p3],
                                up=[-1.0, 0.0, 0.0],
                                aspect=view_width/view_height)

key_light = p3js.DirectionalLight(position=[0, 0, 10])
ambient_light = p3js.AmbientLight()

axes = p3js.AxesHelper(20)

children = []
for i in range(3*n):
    children = children + [body_mesh_store[i], axes, camera, key_light, ambient_light]

scene = p3js.Scene(children=children)
controller = p3js.OrbitControls(controlling=camera)
renderer = p3js.Renderer(camera=camera, scene=scene, controls=[controller],
                         width=view_width, height=view_height)

# Create the action, simply copied from JM's lecture.

for i in range(n):
    eigenname = 'ball_'+str(i)
    track_C = p3js.VectorKeyframeTrack(
        name="scene/" + eigenname + ".matrix",
        times=times1,
        values=TC_store[i])
    
    eigenname = 'rod_' + str(i)
    track_R = p3js.VectorKeyframeTrack(
        name="scene/" + eigenname + ".matrix",
        times=times1,
        values=TR_store[i])
    
    eigenname = 'punkt_' + str(i)
    track_P = p3js.VectorKeyframeTrack(
        name="scene/" + eigenname + ".matrix",
        times=times1,
        values=TP_store[i])
    
    track_store += [track_C] + [track_R] + [track_P]

duration = times1[-1] - times1[0]
clip = p3js.AnimationClip(tracks=track_store, duration=duration)
action = p3js.AnimationAction(p3js.AnimationMixer(scene), clip, scene)

# avoid error if the animation has not run before this runs.
if start5 != None:
    print(' it tooks {:.3f} sec to run the complete program'.format(time.time() - start6 + start5 - start ))

renderer

I get this error message:


TraitError Traceback (most recent call last)
File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\ipywidgets\widgets\widget.py:766, in Widget._handle_msg(self, msg)
764 if 'buffer_paths' in data:
765 _put_buffers(state, data['buffer_paths'], msg['buffers'])
--> 766 self.set_state(state)
768 # Handle a state request.
769 elif method == 'request_state':

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\ipywidgets\widgets\widget.py:648, in Widget.set_state(self, sync_data)
645 if name in self.keys:
646 from_json = self.trait_metadata(name, 'from_json',
647 self._trait_from_json)
--> 648 self.set_trait(name, from_json(sync_data[name], self))

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\traitlets\traitlets.py:1738, in HasTraits.set_trait(self, name, value)
1736 raise TraitError(f"Class {cls.name} does not have a trait named {name}")
1737 else:
-> 1738 getattr(cls, name).set(self, value)

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\traitlets\traitlets.py:703, in TraitType.set(self, obj, value)
702 def set(self, obj, value):
--> 703 new_value = self._validate(obj, value)
704 try:
705 old_value = obj._trait_values[self.name]

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\traitlets\traitlets.py:735, in TraitType._validate(self, obj, value)
733 return value
734 if hasattr(self, "validate"):
--> 735 value = self.validate(obj, value)
736 if obj._cross_validation_lock is False:
737 value = self._cross_validate(obj, value)

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\traitlets\traitlets.py:2302, in Union.validate(self, obj, value)
2300 except TraitError:
2301 continue
-> 2302 self.error(obj, value)

File c:\Users\Peter\anaconda3\envs\math\Lib\site-packages\traitlets\traitlets.py:841, in TraitType.error(self, obj, value, error, info)
835 else:
836 e = "The '{}' trait expected {}, not {}.".format(
837 self.name,
838 self.info(),
839 describe("the", value),
840 )
--> 841 raise TraitError(e)

TraitError: The 'target' trait of a DirectionalLight instance expected an Uninitialized or an Object3D, not the str 'IPY_MODEL_3f5c3aea-5803-4ed3-9aa5-c7d9447925e9'.

The animation still works as expected, so my question is really more curiosity.
Thanks a lot for any help!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant