AGXWire

../_images/wire.png

AGXWire is a wire model using AGX Dynamics. The agxWire module of AGX Dynamics is used for implementation.

Features of AGXWire

  • Hard to be torn

    Even if the wire is pulled with a strong force it is hard to be torn. For example, it is useful for hanging a container with a crane wire.

  • Good performance for long length

    A general physics engine expresses cables and wires by connecting rigid bodies with a shape such as a capsule and a cylinder with joints.
    Therefore, as the number of rigid bodies increases, the amount of computation increases, and finally the calculation is not completed within real time.
    In this model, the number of elements can be automatically increased / decreased during the simulation.
    This can be reduce computation amount of the simulation.

Note

AGXWire emphasizes speed. The stability of collision response is not high.
It does not correspond to a tough scene such as a robot stepping on wires or sandwiching wires with a door.
In such a situation wire may oscillate and in the worst case the simulation may stop.

Sample

You can check samples to how to use AGXWire. The samples are below. When loading the sample projects with Choreonoid and running the simulation with AGXSimulator, the wire will be displayed.

  • Winch, Wire, Wire link
    • Project file: chorenoid/sample/AGXDynamics/agxWireSample.cnoid

    • Body file: chorenoid/sample/AGXDynamics/agxWireSample.body

  • Fire hose
    • Project file: chorenoid/sample/AGXDynamics/FireHose.cnoid

    • Body file: chorenoid/sample/AGXDynamics/FireHose.body

How to write

Link composition of sample model is as below.

links:
  -
    name: Drum
    parent: Root
    translation: [ -1.0, 0.0, -3.0 ]
    jointType: fixed
    elements:
      -
        type: Shape
        geometry: { type: Cylinder, radius: 0.25, height: 0.2 }
        appearance: { material: { diffuseColor: [ 1.0, 0, 0 ] }}
      -
        type: AGXWireDevice
        radius: 0.02
        resolutionPerUnitLength: 5
        collision: true
        selfCollision: true
        materialName: Wire
        #wireYoungsModulusStretch: 6E10
        #wireSpookDampingStretch: 0.075
        #wireYoungsModulusBend: 6E10
        #wireSpookDampingBend: 0.075
        Winch:
            linkName: Drum
            position: [ 0.0, 0.0, 0.27 ]
            normal: [1.0 , 0.0, 0.0 ]
            pulledInLength: 50
            haulForceRange: [ -50, 50 ]
        Nodes:
          -
            type: free
            linkName: Root
            position: [ -0.27, 0.0, 0.27]
          -
            type: free
            linkName: Root
            position: [ 0.27, 0.0, 0.27]
          -
            type: link
            linkName: Sphere
            position: [ 0.0, 0.0, 0.1]
            #twistStiffness: 1.0E10
            #bendStiffness: 1.0E10
            #superBendReplacedWithBend: true
  -
    name: Sphere
    parent: Root
    translation: [ 1.0, 0.0, 0.0 ]
    jointType: free
    mass: 1.0
    elements:
      -
        type: Shape
        geometry: { type: Sphere, radius: 0.1 }
        appearance: { material: { diffuseColor: [ 0.0, 1.0, 0 ] }}
      -
        type: AGXWireDevice
        radius: 0.04
        resolutionPerUnitLength: 5
        collision: true
        selfCollision: true
        materialName: Wire
        Nodes:
          -
            type: link
            linkName: Sphere
            position: [ 0.0, 0.0, -0.1]
          -
            type: fixed
            linkName: Box
            position: [ 0.0, 0.0, 0.1 ]
  -
    name: Box
    parent: Sphere
    translation: [ 0.0, 0.0, -2.0 ]
    jointType: free
    mass: 5
    elements:
      -
        type: Shape
        geometry: { type: Box, size: [ 0.2, 0.2, 0.2] }
        appearance: { material: { diffuseColor: [ 0.0, 1.0, 0 ] }}
  1. Add AGXWireDevice to the elements part of arbitrary link

  2. Set parameters of the wire

  • Set the radius of the wire to the parameter radius

  • Set the resolution of the wire to the parameter resolutionPerUnitLength

  • Set enable or disable collision between wires, links and other environments to collsion

  • Set enable or disable self collision between the wire and the links which has the wire to selfCollision

  • Set the material of the wire to materialName. Check the reference Additional parameters for physical material.

  • It is recommend to use the material file. Though, you can set parameters such as wireYoungsModulusStretch directly into the body file.

  1. In order to pull out the wire from the winch, set the following

  • Set the link name, which to be used as a winch, to linkName. You can specify any link.

  • Set the pulled out position of the wire to position relative from the link coordinate of the link

  • Set the pulled out direction of the wire to normal relative from the link coordinate of the link

  • Set the length of the wire which stock into the winch to pulledInLength

  • Set the required force to pull out the wire from the winch or put in to haulForceRange

  1. Next, use the Node hash to route the wire in space

  1. Wires can be routed in three ways. The way of routing is specified as type:

  • type: free Route the wire to the specified position. Not fixed.

  • type: fixed Fix the wire at the specified position. The fixed point can rotate freely(balljoint).

  • type: link Connect the wire to the link. The connecting point has twisting stiffness and bending stiffness.

  1. Set the linkName in which coordinate system to route the wire

  • When the link exist in which name is the linkName: Link coordinate

  • When the linkName is empty or not exist link: World coordinate

  1. Set the routing position to position

../_images/wire-detail.png

Explanation of parameters

The parameters are described below.

Wire

parameter

default value

uinit

data type

explanation

type: AGXWireDevice

-

-

string

declaration of using AGXWire

radius

0.02

m

double

radius of the wire

resolutionPerUnitLength

-

m

double

minimum resolution of the wire

collision

-

-

bool

set enable/disable collision between the wire and other objects

selfCollision

-

-

bool

set enable/disalbe self-collision between the wire and the body which has the wire

materialName

-

-

string

name of the material

wireYoungsModulusStretch

6e10

N/m

double

young’s modulus in the stretch direction

wireSpookDampingStretch

0.075

s

double

spook damping in the stretch direction

wireYoungsModulusBend

6e10

N/m

double

young’s modulus in the bending direction

wireSpookDampingBend

0.075

s

double

spook damping in the bending direction

twistStiffness

0

N/m

double

Available at type:link. Twisting stiffness between the wire and the link.

bendStiffness

0

N/m

double

Available at type:link. Bending stiffness between the wire and the link.

superBendReplacedWithBend

false

-

bool

Available at type:link. Make the wire more flexible in the bending direction at the connecting point.

Winch

parameter

default value

uinit

data type

explanation

linkName

-

-

string

link name which to be a winch

position

-

Vec3

pulled out position of the wire

normal

-

Vec3

pulled out direction of the wire

pulledInLength

m

double

length of the wire which store into the winch

haulForceRange

N

Vec2

force required to pull out the wire from or put in the wire to the winch

Node

parameter

default value

uinit

data type

explanation

type

-

-

string

type of routing the wire: set free, fixed, link

linkName

-

-

string

link name in which coordinate system to route the wire

position

-

Vec3

position where locate or fix the wire

Collision settings of the wire

../_images/wire-collision.png
As explained in Features of AGXWire, agxWire does not correspond to the case such as the robot stepping on wires.
However, it is difficult to operate the robot avoiding such a case.
Here are some countermeasures.

Specification

  • Please note that wire material parameters are overridden in the order of material description < direct description .