Problem simulating an autorotating rotor

Post Reply
allan
Posts: 8
Joined: Wed Jul 28, 2021 1:30 am

Problem simulating an autorotating rotor

Post by allan »

I am trying to build a model rocket that would land by deploying free-wheeling rotor blades from its nosecone, rather than the usual parachute, basically converting the rocket into a gyro-glider under radio control. I have worked out the basic aerodynamics of the rotor blades, and created a simple simulation of the rotor in autorotation, but I would like to use PyBullet for the dynamics since there will be gyroscopic effects due to asymmetric lift and control forces, resulting in gyroscopic couples where torques applied to the rotor will actually produce rotations at 90 degrees from the torque axes. Ultimately, I would like to model full 3-axis control of my gyro-rocket.

To get started, I am just simulating autorotation in PyBullet without these asymmetric forces. I used velocity control of the main rotor joint where I would calculate the torque from the aerodynamics, and then integrate for the angular velocity. However, I would rather use torque control of the joints so that PyBullet can handle the gyroscopic effects. When I try using torque control of the rotor joint, the angular velocity increases initially as the rotor begins to descend, but at about 81 rpm it stops increasing, despite a significant torque still being applied. This is about 1/3 of the rpm that I was getting with my simple simulation.

I have disabled the default velocity control of the joint using the code in the Quickstart Guide, shown below:

maxForce = 0
mode = p.VELOCITY_CONTROL
p.setJointMotorControl2(objUid, jointIndex,
controlMode=mode, force=maxForce)

I assume there is still some friction or damping built into the joint, but I can't figure out how to turn it off. Any help would be appreciated.
allan
Posts: 8
Joined: Wed Jul 28, 2021 1:30 am

Re: Problem simulating an autorotating rotor

Post by allan »

I did some more searching and found a possible answer on this forum. By default, the maximum angular velocity of a joint is limited, with the default limit being 100 radians/sec. This can be changed using:
p.changeDynamics(body_name, joint_index, maxJointVelocity=10000)
I'll give this a try
Last edited by allan on Tue Aug 31, 2021 5:57 am, edited 1 time in total.
allan
Posts: 8
Joined: Wed Jul 28, 2021 1:30 am

Re: Problem simulating an autorotating rotor

Post by allan »

Unfortunately, this did not solve the problem. At first I thought that it had, but then I realized that I had reverted the program back to velocity control, and when I go back to torque control I still can't get an angular velocity greater than 81 rpm (which is a lot less than 100 radians/sec anyway).
Post Reply