Search Unity

  1. Unity Asset Manager is now available in public beta. Try it out now and join the conversation here in the forums.
    Dismiss Notice

Featherstone's solver for articulations

Discussion in 'Physics Previews' started by yant, Dec 11, 2019.

  1. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    Hi

    As of Unity 2020.1a15, there is a new feature called articulations available. An articulation in this context is a set of bodies that have their relative movement constrained. It's a bit like using Rigidbody in conjunction with ConfigurableJoint but there is now only one component to deal with, and the benefit is that all joints in an articulation are unstretchable by default (thanks to the new Featherstone solver). This means the locked degrees of freedom will never be violated, which is guaranteed by simulating in reduced coordinates.

    Articulations were a new feature in PhysX 4, have a look at this promotional video for inspiration:
    . PhysX 4 upgrade was made available in Unity 2019.3, so articulations can now be exposed too. The current featureset will be somewhat limited though, with the plan of making more available in the later versions, based on your feedback and requests. For now, only forward dynamics are available (=you set forces and drives to obtain poses of all articulation parts). Later on, inverse dynamics might be featured too (=calculate joint forces based on observations).

    As you might have noticed, the main use case for articulations is more or less robotics -- that is areas where accurate body simulation is key. However, it can be applied to traditional game problems too: think ragdolls for instance, various in-game mechanics as well as puzzles that need extra precision.

    I wrote this brief technical intro if you're interested: https://docs.google.com/document/d/1YSbqXH5Pn844-nnstBOFtPtfXJIcjGIA0zQQpaAaX70

    There is also an Nvidia doc: https://gameworksdocs.nvidia.com/Ph...lations.html#reduced-coordinate-articulations

    Known issues:

    • Spherical joint with twist locked or limited to [0, 0] may cause instability
    • Need to fix hierarchical deactivation, currently we only allow bottom to top
    • Articulation bodies have sleeping weirdness
    • Friction type cannot be set to anything other than Patch
    • Articulations without Colliders make the system really unstable
    • Revolute joint will explode if rotated more than 360 deg by target pose
    • Physics.IgnoreCollider has no effect on articulation bodies (adjacent)
    • Revolute joint will crash if twist is locked

    Please let me know what you think. Thanks!

    Anthony
     
    Last edited: Jan 14, 2020
  2. mvaandrager

    mvaandrager

    Joined:
    Apr 24, 2018
    Posts:
    3
    Thanks Yant! some comments on the technical intro:

    I don’t get to see all the joint information when I add a artictulationbody component. I only see the mass field and that’s it.. Ah now I see you have to put it in the hierarchy under the root body to make it appear. Perhaps good to know for others. But if the hierarchy is the way to define connections, how do we create circular joint configurations?

    the damping ratio d is also allowed to be larger than 1. (In this case it is 'overdamped' and really slows down the dynamics.) Is the ‘Damping’ of the drive the actual damping or the damping ratio? My quess it is the damping ratio?

    I’m also very interested in how these articulationbodies are supposed to interact with rigidbodies. Simply through their colliders and that’s it? It seems like it is that simple.. no caveats?
     
    Last edited: Dec 11, 2019
    tigerleapgorge likes this.
  3. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Thanks for creating new thread!
     
    tigerleapgorge and yant like this.
  4. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    The idea is you get to see what's relevant, as opposed to just a dump of everything (compare to ConfigurableJoint). I understand it requires to get the idea that there is a root body that shows just a few settings applicable and you need to add more to get to see the joint-specific settings, but I hope that's for a good reason after all. Articulation body can't be connected to a world point, it's not exactly a good old D6 doodle there inside.

    I left a comment regarding 'd' value on the doc, but will repeat here: stiffness/damping you see as drive parameters are just raw coefficients, not frequency or damping ratios.
     
    mvaandrager and hippocoder like this.
  5. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    They get simulated in the same scene - so rigidbodies bounce off articulations and vice versa naturally by definition. For now, loop joints are not supported so you can't attach articulation to a rigidbody directly.
     
    mvaandrager likes this.
  6. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Suggestion:

    Add planar joint type, you can build this behind the scenes with two prismatic joints to form a plane :)
     
    tigerleapgorge likes this.
  7. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Suggestion/need #2:

    Would be nice to have way to update inertia tensor & center of mass of each ArticulationBody, but is not critical at the moment :D
     
    tigerleapgorge likes this.
  8. tjmaul

    tjmaul

    Joined:
    Aug 29, 2018
    Posts:
    467
    I wrote an extension to ArticulationBody for GetPointVelocity and AddForceAtPosition. I attached the file to this post but here's the code, too. Please check if I got my math right. Testing with simple configurations it intuitively seems correct to me.

    Code (CSharp):
    1. public static class MyExtensions
    2. {
    3.     public static Vector3 GetPointVelocity(this ArticulationBody ab, Vector3 worldPosition)
    4.     {
    5.         var v = ab.velocity;
    6.         var w = ab.angularVelocity;
    7.         var lever = worldPosition - ab.centerOfMass;
    8.  
    9.         return v + Vector3.Cross(w, lever);
    10.     }
    11.  
    12.     public static void AddForceAtPosition(this ArticulationBody ab, Vector3 force, Vector3 worldPosition)
    13.     {
    14.         var lever = worldPosition - ab.centerOfMass;
    15.         ab.AddTorque(Vector3.Cross(lever, force));
    16.         ab.AddForce(force);
    17.     }
    18. }
     

    Attached Files:

  9. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Seems fine:

    https://github.com/NVIDIAGameWorks/.../PhysXExtensions/src/ExtRigidBodyExt.cpp#L397
     
    hippocoder likes this.
  10. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    hey @Kobix, are you sure about Physics.IgnoreCollision not working with articulations? I can't seem to confirm, here is an example that does work for me

    a4075c5b3dfb0a3fec6ce61d13366d8b.gif
     

    Attached Files:

  11. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Hi.

    I will have to test it again. Quick note: The colliders were children GameObjects of ArticulationBody GOs, which doesn't seem to be case in your scenario. Will report ASAP.
     
    Hakazaba and tigerleapgorge like this.
  12. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    btw - feel free to file bugs using the bug reporter inside Editor. Articulations are now part of an official build so we can enjoy tracking and so on. Thanks!
     
    tigerleapgorge likes this.
  13. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Ok, never used this. As I see it, it also sends Unity project, right? I shall create separate project so you can get clean scenes/scenarios :). Should speed things up for you and me :).
     
    tigerleapgorge likes this.
  14. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    Kobix likes this.
  15. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    If anyone needs to set axis in ArticulationBody


    Code (CSharp):
    1. UnityArticulation.anchorRotation = Quaternion.FromToRotation(axis, Vector3.right);
    2.  
     
  16. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Unity crashes with 1 root articulation and 176 articulated prismatic joints. I could file a official bug but I think its no need to here.

    Ok exact number is 65 articulations (1 parent, 64 child). I don't know internals, but it's maybe cause max children is 64 = 2^6
     
    Last edited: Dec 13, 2019
  17. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    No, it still crashes :I.
     
  18. koirat

    koirat

    Joined:
    Jul 7, 2012
    Posts:
    2,073
    Articulations are something I was waiting for.

    btw. is this formula F = (currentPosition - target) * stiffness - (currentVelocity - targetVelocity) * damping
    The same for linear movement and angular movement ?

    I'm a little concerned about the fact that articulated body will be something different than Rigidbody. What will be the interaction, will we be able to connect normal joints to Articulated body ?
    Since unity moved totally into c# maybe it is time to reconsider some interfaces instead of solid classes.

    Secondly will disabling and enabling Articulation reset the initial settings like with normal joints ?
     
  19. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    There is a max limit on the amount of links in the whole articulation in physx.
     
  20. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Isn't it possible to relax this limit? I know that upping it may impose bigger memory hit and CPU hit, but it's just non-sense limit tbh. Isn't it possible to make it modifiable in Project Setting->Physics menu?

    Anyway - I think I figured out that there might be no need for 64 links at the moment.
     
    Last edited: Dec 15, 2019
  21. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Request, not a bug:

    If possible, getting a current position (not just target position) of articualted joint would be nice. I am doing a workaround by tracking local transform rotation :).
     
    joseph114591452 and flimflamm like this.
  22. flimflamm

    flimflamm

    Joined:
    Jan 6, 2020
    Posts:
    43
    Oh god yes. I need this for rotation. Tracking the current rotation away from the starting rotation (within a configurable joint) is, for whatever reason, a nightmare.
     
  23. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Here, I did workaround:

    Code (CSharp):
    1.  
    2.     public class RotationTracker : MonoBehaviour {
    3.  
    4.         public Vector3 LocalRotationAxis;
    5.  
    6.         Vector3 _ortho;
    7.  
    8.         public float Rotation {
    9.             get {
    10.  
    11.                 Vector3 currOrtho = transform.localRotation * _ortho;
    12.                 return  Vector3.SignedAngle(_ortho, currOrtho, LocalRotationAxis);
    13.             }
    14.         }
    15.  
    16.         private void Awake() {
    17.  
    18.             _ortho = transform.localRotation * new Vector3(LocalRotationAxis.y, LocalRotationAxis.z, LocalRotationAxis.x);
    19.         }
    20.     }
    Still gotta calculate LocalRotationAxis from ArticulationBody somehow
     
  24. any_user

    any_user

    Joined:
    Oct 19, 2008
    Posts:
    374
    Thanks for exposing this feature, looks promising!

    I made a few tests, most of it just worked. Here are a few things I think are missing, broken or could be improved:
    • It's not possible to set velocity and angular velocity of a body.
    • A way to connect articulations to rigidbodies would be really useful.
    • Setting target velocity doesn't seem to work in my tests. I tried it with a revolute joint, but there was just no force applied when I set a target speed. Target positions worked.
    • Support for the other friction types would be nice to have.
    • Better gizmos would be nice (currently it's a bit confusing with the overlapping transform handles).
    • Immovable checkbox doesn't update the body if the value is changed in play mode
    I also had a few crashes in the cases mentioned in this thread (revolute joint with default settings, adding too many articulations in a hierarchy).
     
    hippocoder likes this.
  25. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Max 16 articulation bodies can exist for one articulation (which can be limiting)

    Agree about connecting articulations to rigidbodies would be quite super.

    Other friction types would be amazing addition too for more accurate contact simulation (e.g. grabbing).
     
    nialltl and mvaandrager like this.
  26. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    Thanks for your input here on this thread, taking notes re: everything posted here.

    In other topics, there will be 2020.1a20 released soon, and it contains a few changes made around Christmas break there, namely:

    • fix misbehaviour when an articulation was rotated due to drive's target pose over 360 degrees
    • guard from setting invalid over-constrained configurations, make the valid ones explicit in Editor (case 1201743
    • don't display drive limit value properties in articulation body editor inspector when the drive type is not limited (case 1201457)
    • fix ArticulationBody.TeleportRoot that didn't work as expected
    • edit articulation body joints anchors visually from the editor, using transform tools (initial iteration)

    Notice that there was a slight facelift to the ArticulationBody inspector with the aim of making correct states explicit while protecting from entering the invalid configurations. For instance, one can't apparently lock all DoF of a joint - since that degenerates to a Fixed joint, which should be used instead; Prismatic joint expects that only one axis is unlocked and others are locked, and so on.

    Hope that helps.
     
  27. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Glad to hear 360° issue was fixed, it was important fix :).
     
    yant likes this.
  28. z26

    z26

    Joined:
    Mar 15, 2014
    Posts:
    11
  29. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
  30. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
  31. sohojoe

    sohojoe

    Joined:
    Feb 13, 2015
    Posts:
    21
    is it possible to have FreezeRotation Contraints like those in RidgidBody? I am trying to port my Reinforcement Learning environments and I use FreezeRotation for the 2D agents such as hopper and walker
    upload_2020-1-27_22-10-3.png
     
  32. CodeKiwi

    CodeKiwi

    Joined:
    Oct 27, 2016
    Posts:
    119
    Thanks for adding this feature, just thought I’d post some issues I’m having. I’m using Unity 2020.1.0a20.2541.

    If I use a revolute joint I can safely rotate it to any angle. When I use a spherical joint it seems to explode when I move any axis past 180 degrees. I can work around this by just creating three revolute joints instead of the spherical joint (I thought a spherical was already just three revolute joints).

    I’d also like to confirm if the 64 joint limit is for a joint type or per axis e.g. can I have 64 spherical joints or only 21 (xyz rotation, the same as three revolute joints)?

    I get an error when the mass is set to zero. Is it possible to allow for zero mass joints e.g. similar to the FreezeRotation constraints comment by sohojoe: I want to set the root object to immovable, then add an x and y axis prismatic joint and also a z axis revolute joint. This would constrain it to a 2d axis. For this example I’d like the three joints to have no drives (zero stiffness), zero mass (can set to nearly zero for now) and they don’t require collision shapes. The other articulated bodies would then use the standard mass and a collision shapes.

    I’m hoping that inverse dynamics and circular joints will be supported in the future.
     
  33. DavidSWu

    DavidSWu

    Joined:
    Jun 20, 2016
    Posts:
    183
    Very low masses are going to be unstable with just about any solver. I don't know if you can specify joint inertia's that do not propagate to other bodies, but a common technique for freezing DOF is setting the inverse inertia to 0 or the inertia to infinity.
     
  34. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    You may use Box2D if you really wish to use 2D agents.

    But thats messy, better approach might be just correct the agent rotations with PID and ApplyTorque/ApplyForce.
     
  35. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    This is per the whole articulation.
     
  36. Powback

    Powback

    Joined:
    Oct 14, 2014
    Posts:
    1
    I'm having issues trying to reset my agent using ArticulationBody.TeleportRoot using Unity 2020.1.0a20.2541.
    The position does indeed get set, but the velocity increases and causes issues like this: https://powback.com/u/2946b6fc1bde724314b2e5e15c4b5528.mp4

    While using chained bodies the effect is amplified. It causes the body to almost immediately go out of bounds and the position becomes an NaN value. This sometimes cause a Unity crash.

    A reset function would be very helpful to prevent issues like this.

    Edit:
    I should note that the ArticulationBodies work as expected if I'm not teleporting. Resetting is in my case essential due to the nature of the environment. https://powback.com/u/a867d9d89a501b2f243cfccd0ca0b758.png
     
    Last edited: Jan 29, 2020
  37. CodeKiwi

    CodeKiwi

    Joined:
    Oct 27, 2016
    Posts:
    119
    Thanks @yant, normally when I try other Featherstone implementations it’s one link per DOF so unticking the immovable option on the root body would create six links (rotation and position). 64 articulated body components should be more than enough.

    I found that the zero mass error was because I had a collider attached, it works fine after I removed it. I also forgot that I can set an anchor rotation so it’s unlikely that I’d ever go past 180 degrees from the rest rotation.


    I tried a basic hopper with the rotation frozen (could have allowed just the z axis but then it would have fallen over). I’m quite impressed with the new Featherstone solver. When I tried the same thing with standard PhysX rigid bodies the piston would never stay linear on contact, it never had enough force to jump, it didn’t have enough ground friction to move and different masses would break the system (wanted a large base mass with light legs). Thanks again for adding this amazing feature, I’m looking forward to using it in the future.
     
  38. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Amazing :)) How did u control the hopper?
     
  39. CodeKiwi

    CodeKiwi

    Joined:
    Oct 27, 2016
    Posts:
    119
    Thanks, I just used a control pad to test it. The x axis controlled the leg rotation and the y axis controlled the leg length / piston. Because the base rotation is frozen it won’t fall over (might test it with a rigged character / walking animation). I might also unfreeze the base rotation and try a basic control system like in the old “3D One-Leg Hopper” paper.
     
    Fressbrett likes this.
  40. zalo10

    zalo10

    Joined:
    Dec 5, 2012
    Posts:
    21
    +1 for Inverse Dynamics!

    Being able to set joint torques based on observations will be hugely useful for tracked hand systems (where a Leap, Oculus, or Microsoft Hans Tracker is driving an articulation hand in the scene).

    Articulations get us most of the way to those beautifully stable interactions that are seen in MuJoCo simulations like this one:


    Reinforcement learning, physics interactions, and robotics will all benefit (not to mention, it will make it easier/possible for artists to control physical systems as well).

    Thank you!
     
    Lhw6 likes this.
  41. sohojoe

    sohojoe

    Joined:
    Feb 13, 2015
    Posts:
    21
    @yant - could you let me know either way if you plan to support FreezeRotation Constraints as I need the same underlying physics between 2d and 3d agents. Thanks!!
     
  42. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    It does not appear as freezing can be featured in 2020.1 I'm afraid. However, there is a PR in the pipes that exposes a lot of properties familiar from Rigibody API. In particular, we're exposing the inertia tensor manipulation functions that allow you to set specific axis to 0 indicating a type of a rotational DoF lock I believe. Also, there is an API that allows setting joint positions in the reduced space directly - so you'd be able to implement linear DoF lock that way too. Reduced coordinates accessors via ArticulationBody.jointPosition/jointVelocity/jointAcceleration/jointForce is part of 2020.1a22.

    Inverse dynamics is clearly an interesting area -- will be explored for 2020.2+ probably.

    Thanks for your interest in physics.
     
    hippocoder, Kobix and sohojoe like this.
  43. jselstad

    jselstad

    Joined:
    Apr 12, 2016
    Posts:
    6
    Ran a small experiment with the Articulation Bodies to test their stability vs rigid bodies; it's much more stable as long as certain rules are followed.



    The points where both hands disappear are tracking glitches caused by a weak USB connection :( Nothing to do with the Physics...


    1. Crashes
    - I am largely able to avoid crashes by avoiding creating/destroying Articulation Bodies multiple times, and by catching exploding bodies with judicious "TeleportRoot" and "SetImmobile" calls (whenever the hand moves further than 1m away from its target position).

    2. Explosions/Instability
    - Spherical Joints are cursed, even when you set large limits on any combination of axes. I had to remove the spherical joints underneath the top four fingers to keep the explosions per minute to a plausible level.
    - Explosions can be mitigated by turning up the Joint Friction and Damping.

    3. Joint Limit Inversions
    - During explosions, joints can frequently reach an inverted state where they are somehow stuck on the wrong side of their joint limits. I had to disable limits entirely in the video.
    - It's possible this is because the joint lower/upper limits are set to negative and positive numbers (though I was not able to find any combination of two positive numbers that wasn't degenerate, so I suspect this is the intended setting).



    In order to get the hand to move with a reasonable level of control, I use a three-step process:
    1. Counter gravity on the root and each child, simply:
    Code (CSharp):
    1. aBody.AddForce(-Physics.gravity * aBody.mass); // Repeat for children
    2. Counter the body's existing velocity. Just take the finite difference aBody.centerOfMass between FixedUpdates to get the velocity, and then apply a reverse force to the root and each child according to "force = (velocity * mass) / deltaTime". This is approximate, but largely effective... Ideally there would be a function to cancel out an articulationBody's existing inertia/velocities.... Perhaps Damping?

    3. Apply a new velocity using the same formula so that your system arrives at the target destination in one deltaTime (though it rarely ever works out this way...)

    4. Apply a Torque based on the inertia and desired angular velocity.
     
    TigerHix, Lhw6, Fressbrett and 6 others like this.
  44. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Thank you for your interest in us being intersted in physics too!
     
    yant likes this.
  45. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Very beautiful, looks quite functional!
     
  46. kstorey

    kstorey

    Joined:
    May 21, 2018
    Posts:
    6
    I was pointed to this post by a colleague. Really great-looking results!

    Improvements to the spherical joints are incoming. Unfortunately, the Featherstone algorithm doesn't naturally support spherical joints but we are working on a slightly different way of expressing the problem that early experiments suggest should be a lot more stable and also far more flexible.

    There is link and joint damping supported in PhysX. There are also maxLinear/Angular velocity and maxJointVelocity terms, which can be used to limit velocity and ensure that sources of instabilities are controlled. Featherstone articulations are stable if simulated at small time-steps but they can be challenging at larger time-steps. The internal accelerations/forces acting on the articulations are proportional to velocity^2 and this can become unstable when integrated at larger time-steps. This is where damping/clamping comes in to help you. Limiting joint velocities to something like ~20 rads/s and keeping angular velocities under ~30 with some reasonable damping in there tends to work very well with 60hz simulation.

    PhysX provides access to joint torques to be able to apply forces/torques in joint space. There is also access directly to joint angles, joint velocities and joint accelerations. This is also how users can directly set the velocities/poses of articulation links - these buffers can be read from and written to. We also provide joint drives that allow you to set target joint angles or joint velocities that the solver will drive towards, controlled by spring stiffness/damping and maxForce parameters. If these are exposed in unity, you could potentially use these as a replacement to your solutions above.

    The simplest way to make the root link follow a world-space trajectory is to constrain the root link to a kinematic actor and move the kinematic actor. You need to be careful to allow the joint to fail gracefully if it is not able to be satisfied e.g. if you try to push it through the table. To do this, you need to use a soft joint (free motion with a drive component on each axis) and limit the forces that the solver can apply using the maxForce term on the drive. The drive can be incredibly stiff with a reasonable force limit and they should be stable.
     
    Edy, goncalo-vasconcelos and yant like this.
  47. yant

    yant

    Unity Technologies

    Joined:
    Jul 24, 2013
    Posts:
    596
    FYI - 2020.1.0a23 will have these new properties/calls that were asked here before:

    - void AddRelativeForce(Vector3 force)
    - void AddRelativeTorque(Vector3 torque)
    - void AddForceAtPosition(Vector3 force, Vector3 position)
    - Vector3 centerOfMass { get; set; }
    - Vector3 worldCenterOfMass { get; }
    - Vector3 inertiaTensor { get; set; }
    - Quaternion inertiaTensorRotation { get; set; }
    - void ResetCenterOfMass()
    - void ResetInertiaTensor()
    - void Sleep()
    - bool IsSleeping()
    - void WakeUp()
    - float sleepThreshold { get; set; }
    - int solverIterations { get; set; }
    - int solverVelocityIterations { get; set; }
    - float maxAngularVelocity { get; set; }
    - float maxDepenetrationVelocity { get; set; }
    - Vector3 GetRelativePointVelocity(Vector3 relativePoint)
    - Vector3 GetPointVelocity(Vector3 worldPoint)
     
    NotaNaN, Edy and hippocoder like this.
  48. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Hi there. We are simulating robots with Unity (articulations), and around 400hz simulation tends to work quite well (and it is realtime still).

    I know that is not applicable to games with lots of bodies (it gets bogged down quite quickly).
     
  49. Kobix

    Kobix

    Joined:
    Jan 23, 2014
    Posts:
    146
    Nice! Thanks for heads up; so this means we will be able to ramp up articulation quality only when needed (aka. when robot is grabbing something)?

    And one question and request: what parameters should I tune to get precise grabbing/gripping, and how hard is it to get coulomb friction model implemented for articulations?
     
  50. kstorey

    kstorey

    Joined:
    May 21, 2018
    Posts:
    6
    Cough...GPU acceleration...Cough :)