SimSpark comes with different robot models for use by agents. The physical representation of each model is stored in an .rsg file. The visual aspects of the model are stored in .obj and .mtl files.
See Creating New Robots for information on making your own models.
The Nao humanoid robot manufactured by Aldebaran Robotics. Its height is about 57cm and its weight is around 4.5kg. Its biped architecture with 22 degrees of freedom allows Nao to have great mobility. rcssserver3d simulates Nao nicely, as you can see.
This section is quite important to the agent development for the specific perceptors and effectors used to represent this robot. The Nao robot model is equipped with a powerful selection of perceptors and effectors to provide a widespread information base for agent development.
- The Nao robot possess a gyroscope and a accelerometer, to keep track of radial as well as axial movement of itself in the three dimensional space. Both are located at the center of the torso, therefore the only available identifier to these perceptors is “torso”.
- In order to detect contact with the ground or other objects in the simulation, one force resistance perceptor in each foot indicates the actual pressure on it. Possible identifiers are “lf” and “rf”, for the left and the right foot.
- To get visual information about different objects in its environment the Nao robot possess a restricted vision perceptor at the center of its head. Note: The visual perception is described in a right hand system facing the x-axis.
- For communication purposes it is equipped with a say effector and the corresponding hear perceptor.
- The position of each joint is represented by a hinge joint perceptor and manipulable through the corresponding hinge joint effector. A complete list of all available joints of the Nao robot and their corresponding identifiers is listed in the table below. The arrangement of the joints and their relative orientation is shown in figure Nao's anatomy.
- The gamestate perceptor is used to inform about the actual play time and play mode.
|No.||Description||Hinge Joint||Perceptor name||Effector name|
|3||Left Shoulder Pitch||||laj1||lae1|
|4||Left Shoulder Yaw||||laj2||lae2|
|5||Left Arm Roll||||laj3||lae3|
|6||Left Arm Yaw||||laj4||lae4|
|7||Left Hip YawPitch||||llj1||lle1|
|8||Left Hip Roll||||llj2||lle2|
|9||Left Hip Pitch||||llj3||lle3|
|10||Left Knee Pitch||||llj4||lle4|
|11||Left Foot Pitch||||llj5||lle5|
|12||Left Foot Roll||||llj6||lle6|
|13||Right Hip YawPitch||||rlj1||rle1|
|14||Right Hip Roll||||rlj2||rle2|
|15||Right Hip Pitch||||rlj3||rle3|
|16||Right Knee Pitch||||rlj4||rle4|
|17||Right Foot Pitch||||rlj5||rle5|
|18||Right Foot Roll||||rlj6||rle6|
|19||Right Shoulder Pitch||||raj1||rae1|
|20||Right Shoulder Yaw||||raj2||rae2|
|21||Right Arm Roll||||raj3||rae3|
|22||Right Arm Yaw||||raj4||rae4|
(time (now 93.60)) (GS (t 0.00) (pm BeforeKickOff)) (hear 0.00 self 1000-501) (GYR (n torso) (rt -0.35 -0.36 -0.01)) (ACC (n torso) (a 0.20 -0.20 9.79)) (HJ (n hj1) (ax 0.33)) (HJ (n hj2) (ax -3.31)) (See (G2R (pol 17.55 -3.33 4.31)) (G1R (pol 17.52 3.27 4.07)) (F1R (pol 18.52 18.94 1.54)) (F2R (pol 18.52 -18.91 1.52)) (B (pol 8.51 -0.21 -0.17)) (P (team teamRed) (id 1) (head (pol 16.98 -0.21 3.19)) (rlowerarm (pol 16.83 -0.06 2.80)) (llowerarm (pol 16.86 -0.36 3.10)) (rfoot (pol 17.00 0.29 1.68)) (lfoot (pol 16.95 -0.51 1.32))) (P (team teamBlue) (id 1) (rlowerarm (pol 0.18 -33.55 -20.16)) (llowerarm (pol 0.18 34.29 -19.80)))) (HJ (n raj1) (ax 31.72)) (HJ (n raj2) (ax -20.12)) (HJ (n raj3) (ax -0.01)) (HJ (n raj4) (ax 40.04)) (HJ (n laj1) (ax 64.37)) (HJ (n laj2) (ax 19.96)) (HJ (n laj3) (ax 0.09)) (HJ (n laj4) (ax -40.11)) (HJ (n rlj1) (ax -0.06)) (HJ (n rlj2) (ax 20.31)) (HJ (n rlj3) (ax -39.24)) (HJ (n rlj4) (ax 20.02)) (HJ (n rlj5) (ax 0.04)) (FRP (n rf) (c 0.01 -0.01 -0.02) (f -0.21 0.21 19.77)) (HJ (n rlj6) (ax 0.21)) (HJ (n llj1) (ax -0.01)) (HJ (n llj2) (ax 0.00)) (HJ (n llj3) (ax 19.70)) (HJ (n llj4) (ax -41.02)) (HJ (n llj5) (ax 20.31)) (FRP (n lf) (c 0.01 -0.01 -0.02) (f -0.21 0.20 25.45)) (HJ (n llj6) (ax -0.16))
Besides the perceptors and effectors it’s also quite important to the agent development to be aware of the parameters used to construct the robot. The body measurements and the arrangement of the different body parts is shown in Nao's box model.
A detailed description of the Nao configuration is given by the following table:
|Body part||Hinge Joint|
0.100, 0.100, 0.180
|neck||torso||0, 0, 0.090||0.05|| Cylinder
L: 0.080 R: 0.015
|HJ1||0, 0, 0||0,0,1||-120||120|
|head||neck||0, 0, 0.065||0.35|| Sphere
|HJ2||0, 0, -0.005||1,0,0||-45||45|
|shoulder||torso|| 0.098, 0, 0.075(r)
-0.098, 0, 0.075(l)
|AJ1||0, 0, 0||1,0,0||-120||120|
|upperarm||shoulder|| 0.010, 0.020, 0(r)
-0.010, 0.020, 0(l)
0.07, 0.08, 0.06
|elbow||upperarm|| -0.010, 0.070, 0.009(r)
0.010, 0.070, 0.009(l)
|AJ3||0, 0, 0||0,1,0||-120||120|
|lowerarm||elbow||0, 0.050, 0||0.2|| Box
0.050, 0.110, 0.050
|hip1||torso|| 0.055, -0.010, -0.115(r)
-0.055, -0.010, -0.115(l)
|LJ1||0, 0, 0|| -0.7071, 0, 0.7071(r)
-0.7071, 0, -0.7071(l)
|hip2||hip1||0, 0, 0||0.125|| Sphere
|LJ2||0, 0, 0||0,1,0|| -45(r)
|thigh||hip2||0, 0.010, -0.040||0.275|| Box
0.070, 0.070, 0.140
|shank||thigh||0, 0.005, -0.125||0.225|| Box
0.080, 0.070, 0.110
|ankle||shank||0, -0.010, -0.055||0.125|| Sphere
|LJ5||0, 0, 0||1,0,0||-45||75|
|foot||ankle||0, 0.030, -0.040||0.2|| Box
0.080, 0.160, 0.020
- Name is the body part name of Nao
- Parent is the parent of the body
- Translation is the offset relative to its parent (in meter)
- Mass is the mass of this body (in kilogram)
- Geometry is the size of its geometry representation (in meter)
- Name is the joint name installed on this body
- Anchor is the offset of the joint anchor relative to the body that installed on in meter
- Axis is the joint axis relative to the body that installed on (x, y, z-orientation of the axis)
- Min is the min angle that the joint can reach (in degrees)
- Max is the max angle that the joint can reach (in degrees)
Note: All values are relative to the torso coordinate system! (which faces the y-axis)
The Nao robot model is implemented in the rsg files under rcssserver3d/data/rsg/agent/nao in the following files.
|box_appearance.rsg||Install a box which is for the GL render|
|box_physics.rsg||Install a box that has physics effect(ODE related)|
|box_physics_nocollider.rsg||Install a box that only has dynamics effect (mass, linear velocity, etc). But it can never collide to the others|
|box_physics_with_handler.rsg||Not only do the job as file box physics.rsg, but also install a touchperceptorhandler under the BoxCollider Node|
|ccylinder_appearance.rsg||Install a capped cylinder which is for the GL render|
|ccylinder_physics.rsg||Install a capped cylinder that has physics effect(ODE related)|
|ccylinder_physics_nocollider.rsg||Install a capped cylinder that only has dynamics effect (mass, linear velocity, etc) so it can never collide to the others|
|contactjointhandler.rsg||Install a contactjointhandler to handle the collisions|
|dragcontroller.rsg||Install a DragController|
|goal.rsg||Install the goal|
|hingejoint.rsg||Install a hingejoint|
Soccerbot is a humanoid robot with 20 degrees of freedom (DOF). It was used in the RoboCup 3D Soccer Simulation League for many years, but has been replaced by Nao.
Its dimensions are quite unrealistic for a real humanoid robot which is due to instabilities in the physics simulation at the time the robot was first modeled. This is a serious shortcoming of this robot model. Another issue is that the joint ranges are not limited in the current model. This allows for very unrealistic movements which can be fun to watch, but can lead to unfair behavior in a competition.
The Soccerbot has several kinds of perceptors available. It uses a (omni-directional) vision perceptor to get information about objects in its environment. In order to detect the contact with the ground and the resulting force at the feet, it is equipped with a Force Resistance Perceptor in each foot. It can sense the current simulation time with a GameState Perceptor and the change in orientation of its torso with a GyroRate Perceptor. Furthermore, it has HingeJoint Perceptors and UniversalJoint Perceptors that sense the angle of each joint. An overview over the joint perceptors and effectors are tabulated below.
Here is an example message received by agent from the server in a single simulation cycle including sense information from all the perceptors of the agent.
(time (now 19.60)) (GYR (n torso) (rt -0.02 -0.01 -0.00)) (See (F1L (pol 10.34 45.02 -16.70)) (F2L (pol 68.43 174.14 -2.56)) (F1R (pol 103.28 -86.10 -1.66)) (F2R (pol 123.46 -123.42 -1.43)) (G1L (pol 27.94 165.40 -6.96)) (G2L (pol 35.03 168.43 -5.56)) (G1R (pol 106.49 -104.59 -1.83)) (G2R (pol 108.57 -108.33 -1.80)) (B (pol 56.95 -122.42 -3.02)) (P (team RoboLog) (id 2) (pol 10.50 -179.98 -0.07))) (UJ (n laj1 2) (ax1 0.00) (ax2 90.63)) (UJ (n raj1 2) (ax1 -0.00) (ax2 90.63)) (HJ (n laj3) (ax 90.77)) (HJ (n raj3) (ax -90.77)) (HJ (n laj4) (ax 87.96)) (HJ (n raj4) (ax 88.40)) (HJ (n llj1) (ax 0.03)) (HJ (n rlj1) (ax -0.02)) (UJ (n llj2 3) (ax1 -0.03) (ax2 0.02)) (UJ (n rlj2 3) (ax1 -0.02) (ax2 0.01)) (HJ (n llj4) (ax 0.05)) (HJ (n rlj4) (ax 0.04)) (TCH (n lf) (val 1)) (UJ (n llj5 6) (ax1 0.05) (ax2 -0.01)) (TCH (n rf) (val 1)) (UJ (n rlj5 6) (ax1 0.04) (ax2 -0.00))
|left upper arm||0.445m||0.398m||0.506m||0.2kg|
|right upper arm||0.445m||0.398m||0.506m||0.2kg|
|left lower arm||0.445m||0.316m||0.6m||0.2kg|
|left lower arm||0.445m||0.316m||0.6m||0.2kg|
Perceptor and Effector Names
|Connection between||Joint type||Perceptor name||Effector name|
|Shoulder - body||Universal joint||laj1_2 raj1_2||lae1_2 rae1_2|
|Upper arm - shoulder||Hinge joint||laj3 raj3||lae3 rae3|
|Forearm - upper arm||Hinge joint||laj4 raj4||lae4 rae4|
|Hip - body||Hinge joint||llj1 rlj1||lle1 rle1|
|Upper leg - hip||Universal joint||llj2_3 rlj2_3||lle2_3 rle2_3|
|Lower leg - upper leg||Hinge joint||llj4 rlj4||lle4 rle4|
|foot - lower leg||Universal joint||llj5_6 rlj5_6||lle5_6 rle5_6|