Skip to content

Commit c8c4a6f

Browse files
authored
Add _state suffix to //state subelements (#1455)
Also move definition of //joint_state to its own file and include joint_state.sdf from model_state.sdf and state.sdf for //world/joint states. Signed-off-by: Steve Peters <[email protected]>
1 parent 6483c25 commit c8c4a6f

File tree

9 files changed

+111
-64
lines changed

9 files changed

+111
-64
lines changed

Migration.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,23 @@ ABI was broken for `sdf::Element`, and restored on version 11.2.1.
628628

629629
## SDFormat specification 1.11 to 1.12
630630

631+
### Modifications
632+
633+
1. **state.sdf**, **model_state.sdf**, **joint_state.sdf**, **link_state.sdf**,
634+
**light_state.sdf**: A `_state` suffix has been added to state element names
635+
to match the `.sdf` file names and for consistency.
636+
+ `//state/light` renamed to `//state/light_state`
637+
+ `//state/model` renamed to `//state/model_state`
638+
+ `//state/model/joint` renamed to `//state/model_state/joint_state`
639+
+ `//state/model/light` renamed to `//state/model_state/light_state`
640+
+ `//state/model/link` renamed to `//state/model_state/link_state`
641+
+ `//state/model/model` renamed to `//state/model_state/model_state`
642+
+ `//state/model/link/collision` renamed to `//state/model_state/link_state/collision_state`
643+
644+
1. **state.sdf**: `//state/joint_state` has been added to represent the state of a
645+
`//world/joint` and `//state/insertions/joint` can represent inserted
646+
`//world/joint` elements.
647+
631648
## SDFormat specification 1.10 to 1.11
632649

633650
### Additions

sdf/1.12/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ set (sdfs
2626
imu.sdf
2727
inertial.sdf
2828
joint.sdf
29+
joint_state.sdf
2930
lidar.sdf
3031
light.sdf
3132
light_state.sdf

sdf/1.12/joint_state.sdf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<!-- State information for a joint -->
2+
<element name="joint_state" required="*">
3+
<description>
4+
The joint state element encapsulates variables within a joint that may
5+
change over time, currently limited to the joint angle.
6+
</description>
7+
8+
<attribute name="name" type="string" default="__default__" required="1">
9+
<description>Name of the joint</description>
10+
</attribute>
11+
12+
<element name="angle" type="double" default="0" required="+">
13+
<attribute name="axis" type="unsigned int" default="0" required="1">
14+
<description>Index of the axis.</description>
15+
</attribute>
16+
17+
<description>Angle of an axis</description>
18+
</element>
19+
</element> <!-- End Joint -->

sdf/1.12/light_state.sdf

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<!-- State information for a light -->
2-
<element name="light" required="*">
3-
<description>Light state</description>
2+
<element name="light_state" required="*">
3+
<description>
4+
The light state element encapsulates variables within a light that may
5+
change over time, currently limited to its pose.
6+
</description>
47

58
<attribute name="name" type="string" default="__default__" required="1">
69
<description>Name of the light</description>

sdf/1.12/link_state.sdf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
<!-- State information for a link -->
2-
<element name="link" required="*">
3-
<description>Link state</description>
2+
<element name="link_state" required="*">
3+
<description>
4+
The link state element encapsulates variables within a link that may
5+
change over time, including pose, velocity, acceleration, applied wrench,
6+
and the state of attached collisions.
7+
</description>
48

59
<attribute name="name" type="string" default="__default__" required="1">
610
<description>Name of the link</description>
@@ -27,7 +31,7 @@
2731
</description>
2832
</element>
2933

30-
<element name="collision" required="*">
34+
<element name="collision_state" required="*">
3135
<description>Collision state</description>
3236

3337
<attribute name="name" type="string" default="__default__" required="1">

sdf/1.12/model_state.sdf

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,18 @@
11
<!-- State information for a model -->
2-
<element name="model" required="*">
3-
<description>Model state</description>
2+
<element name="model_state" required="*">
3+
<description>
4+
The model state element encapsulates variables within a model that may
5+
change over time, including object poses, the states of its nested models
6+
and links and joints, and changes in model scale.
7+
</description>
48

59
<attribute name="name" type="string" default="__default__" required="1">
610
<description>Name of the model</description>
711
</attribute>
812

9-
<element name="joint" required="*">
10-
<description>Joint angle</description>
13+
<include filename="joint_state.sdf" required="*"/>
1114

12-
<attribute name="name" type="string" default="__default__" required="1">
13-
<description>Name of the joint</description>
14-
</attribute>
15-
16-
<element name="angle" type="double" default="0" required="+">
17-
<attribute name="axis" type="unsigned int" default="0" required="1">
18-
<description>Index of the axis.</description>
19-
</attribute>
20-
21-
<description>Angle of an axis</description>
22-
</element>
23-
</element>
24-
25-
<element name="model" ref="model_state" required="*">
15+
<element name="model_state" ref="model_state" required="*">
2616
<description>A nested model state element</description>
2717
<attribute name="name" type="string" default="__default__" required="1">
2818
<description>Name of the model. </description>

sdf/1.12/state.sdf

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
<!-- State Info -->
22
<element name="state" required="*">
3+
<description>
4+
The state element encapsulates variables within a world that may change
5+
over time, including object poses, dynamic states such as velocity and
6+
acceleration, a description of objects added to the world, and a list
7+
of objects deleted from the world.
8+
</description>
9+
310
<!-- Name of the world this state applies to -->
411
<attribute name="world_name" type="string" default="__default__" required="1">
512
<description>Name of the world this state applies to</description>
@@ -22,13 +29,14 @@
2229
</element>
2330

2431
<element name="insertions" required="0">
25-
<description>A list containing the entire description of entities inserted.</description>
32+
<description>A list containing the entire description of entities inserted into the world.</description>
2633
<include filename="model.sdf" required="+"/>
2734
<include filename="light.sdf" required="+"/>
35+
<include filename="joint.sdf" required="+"/>
2836
</element>
2937

3038
<element name="deletions" required="0">
31-
<description>A list of names of deleted entities/</description>
39+
<description>A list of names of entities deleted from the world./</description>
3240
<element name="name" type="string" default="__default__" required="+">
3341
<description>The name of a deleted entity.</description>
3442
</element>
@@ -38,4 +46,6 @@
3846

3947
<include filename="light_state.sdf" required="*"/>
4048

49+
<include filename="joint_state.sdf" required="*"/>
50+
4151
</element> <!-- End State -->

test/integration/frame.cc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -213,18 +213,18 @@ TEST(Frame, StateFrame)
213213
sdfStr << "<sdf version ='" << SDF_VERSION << "'>"
214214
<< "<world name='default'>"
215215
<< "<state world_name='default'>"
216-
<< "<model name='my_model'>"
216+
<< "<model_state name='my_model'>"
217217
<< " <frame name='mframe'>"
218218
<< " <pose relative_to='/world'>1 0 2 0 0 0</pose>"
219219
<< " </frame>"
220220
<< " <pose relative_to='mframe'>3 3 9 0 0 0</pose>"
221-
<< " <link name='my_link'>"
221+
<< " <link_state name='my_link'>"
222222
<< " <pose relative_to='lframe'>111 3 0 0 0 0</pose>"
223-
<< " </link>"
224-
<< "</model>"
225-
<< "<light name='my_light'>"
223+
<< " </link_state>"
224+
<< "</model_state>"
225+
<< "<light_state name='my_light'>"
226226
<< " <pose relative_to='lframe'>99 0 22 0 0 0</pose>"
227-
<< "</light>"
227+
<< "</light_state>"
228228
<< "</state>"
229229
<< "</world>"
230230
<< "</sdf>";
@@ -239,8 +239,8 @@ TEST(Frame, StateFrame)
239239
EXPECT_TRUE(worldElem->HasElement("state"));
240240
sdf::ElementPtr stateElem = worldElem->GetElement("state");
241241

242-
EXPECT_TRUE(stateElem->HasElement("model"));
243-
sdf::ElementPtr modelStateElem = stateElem->GetElement("model");
242+
EXPECT_TRUE(stateElem->HasElement("model_state"));
243+
sdf::ElementPtr modelStateElem = stateElem->GetElement("model_state");
244244

245245
// model
246246
EXPECT_TRUE(modelStateElem->HasAttribute("name"));
@@ -271,8 +271,8 @@ TEST(Frame, StateFrame)
271271
}
272272

273273
// link
274-
EXPECT_TRUE(modelStateElem->HasElement("link"));
275-
sdf::ElementPtr linkStateElem = modelStateElem->GetElement("link");
274+
EXPECT_TRUE(modelStateElem->HasElement("link_state"));
275+
sdf::ElementPtr linkStateElem = modelStateElem->GetElement("link_state");
276276
EXPECT_TRUE(linkStateElem->HasAttribute("name"));
277277
EXPECT_EQ(linkStateElem->Get<std::string>("name"), "my_link");
278278

@@ -286,8 +286,8 @@ TEST(Frame, StateFrame)
286286
gz::math::Pose3d(111, 3, 0, 0, 0, 0));
287287
}
288288

289-
EXPECT_TRUE(stateElem->HasElement("light"));
290-
sdf::ElementPtr lightStateElem = stateElem->GetElement("light");
289+
EXPECT_TRUE(stateElem->HasElement("light_state"));
290+
sdf::ElementPtr lightStateElem = stateElem->GetElement("light_state");
291291

292292
// light
293293
EXPECT_TRUE(lightStateElem->HasAttribute("name"));

test/integration/nested_model.cc

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -114,33 +114,33 @@ TEST(NestedModel, State)
114114
sdfStr << "<sdf version ='" << SDF_VERSION << "'>"
115115
<< "<world name='default'>"
116116
<< "<state world_name='default'>"
117-
<< "<model name='model_00'>"
117+
<< "<model_state name='model_00'>"
118118
<< " <pose>0 0 0.5 0 0 0</pose>"
119-
<< " <link name='link_00'>"
119+
<< " <link_state name='link_00'>"
120120
<< " <pose>0 0 0.5 0 0 0</pose>"
121121
<< " <velocity>0.001 0 0 0 0 0</velocity>"
122122
<< " <acceleration>0 0.006121 0 0.012288 0 0.001751</acceleration>"
123123
<< " <wrench>0 0.006121 0 0 0 0</wrench>"
124-
<< " </link>"
125-
<< " <model name='model_01'>"
124+
<< " </link_state>"
125+
<< " <model_state name='model_01'>"
126126
<< " <pose>1 0 0.5 0 0 0</pose>"
127-
<< " <link name='link_01'>"
127+
<< " <link_state name='link_01'>"
128128
<< " <pose>1.25 0 0.5 0 0 0</pose>"
129129
<< " <velocity>0 -0.001 0 0 0 0</velocity>"
130130
<< " <acceleration>0 0.000674 0 -0.001268 0 0</acceleration>"
131131
<< " <wrench>0 0.000674 0 0 0 0</wrench>"
132-
<< " </link>"
133-
<< " <model name='model_02'>"
132+
<< " </link_state>"
133+
<< " <model_state name='model_02'>"
134134
<< " <pose>1 1 0.5 0 0 0</pose>"
135-
<< " <link name='link_02'>"
135+
<< " <link_state name='link_02'>"
136136
<< " <pose>1.25 1 0.5 0 0 0</pose>"
137137
<< " <velocity>0 0 0.001 0 0 0</velocity>"
138138
<< " <acceleration>0 0 0 0 0 0</acceleration>"
139139
<< " <wrench>0 0 0 0 0 0</wrench>"
140-
<< " </link>"
141-
<< " </model>"
142-
<< " </model>"
143-
<< "</model>"
140+
<< " </link_state>"
141+
<< " </model_state>"
142+
<< " </model_state>"
143+
<< "</model_state>"
144144
<< "</state>"
145145
<< "</world>"
146146
<< "</sdf>";
@@ -154,21 +154,22 @@ TEST(NestedModel, State)
154154
sdf::ElementPtr worldElem = sdfParsed->Root()->GetElement("world");
155155
EXPECT_TRUE(worldElem->HasElement("state"));
156156
sdf::ElementPtr stateElem = worldElem->GetElement("state");
157-
EXPECT_TRUE(stateElem->HasElement("model"));
157+
EXPECT_TRUE(stateElem->HasElement("model_state"));
158158

159-
sdf::ElementPtr modelStateElem = stateElem->GetElement("model");
159+
sdf::ElementPtr modelStateElem = stateElem->GetElement("model_state");
160160

161161
// model sdf
162162
EXPECT_TRUE(modelStateElem->HasAttribute("name"));
163163
EXPECT_EQ(modelStateElem->Get<std::string>("name"), "model_00");
164164
EXPECT_TRUE(modelStateElem->HasElement("pose"));
165165
EXPECT_EQ(modelStateElem->Get<gz::math::Pose3d>("pose"),
166166
gz::math::Pose3d(0, 0, 0.5, 0, 0, 0));
167-
EXPECT_TRUE(!modelStateElem->HasElement("joint"));
167+
EXPECT_FALSE(modelStateElem->HasElement("joint"));
168+
EXPECT_FALSE(modelStateElem->HasElement("joint_state"));
168169

169170
// link sdf
170-
EXPECT_TRUE(modelStateElem->HasElement("link"));
171-
sdf::ElementPtr linkStateElem = modelStateElem->GetElement("link");
171+
EXPECT_TRUE(modelStateElem->HasElement("link_state"));
172+
sdf::ElementPtr linkStateElem = modelStateElem->GetElement("link_state");
172173
EXPECT_TRUE(linkStateElem->HasAttribute("name"));
173174
EXPECT_EQ(linkStateElem->Get<std::string>("name"), "link_00");
174175
EXPECT_TRUE(linkStateElem->HasElement("pose"));
@@ -185,20 +186,21 @@ TEST(NestedModel, State)
185186
gz::math::Pose3d(0, 0.006121, 0, 0, 0, 0));
186187

187188
// nested model sdf
188-
EXPECT_TRUE(modelStateElem->HasElement("model"));
189+
EXPECT_TRUE(modelStateElem->HasElement("model_state"));
189190
sdf::ElementPtr nestedModelStateElem =
190-
modelStateElem->GetElement("model");
191+
modelStateElem->GetElement("model_state");
191192
EXPECT_TRUE(nestedModelStateElem->HasAttribute("name"));
192193
EXPECT_EQ(nestedModelStateElem->Get<std::string>("name"), "model_01");
193194
EXPECT_TRUE(nestedModelStateElem->HasElement("pose"));
194195
EXPECT_EQ(nestedModelStateElem->Get<gz::math::Pose3d>("pose"),
195196
gz::math::Pose3d(1, 0, 0.5, 0, 0, 0));
196-
EXPECT_TRUE(!nestedModelStateElem->HasElement("joint"));
197+
EXPECT_FALSE(nestedModelStateElem->HasElement("joint"));
198+
EXPECT_FALSE(nestedModelStateElem->HasElement("joint_state"));
197199

198200
// nested model's link sdf
199-
EXPECT_TRUE(nestedModelStateElem->HasElement("link"));
201+
EXPECT_TRUE(nestedModelStateElem->HasElement("link_state"));
200202
sdf::ElementPtr nestedLinkStateElem =
201-
nestedModelStateElem->GetElement("link");
203+
nestedModelStateElem->GetElement("link_state");
202204
EXPECT_TRUE(nestedLinkStateElem->HasAttribute("name"));
203205
EXPECT_EQ(nestedLinkStateElem->Get<std::string>("name"), "link_01");
204206
EXPECT_TRUE(nestedLinkStateElem->HasElement("pose"));
@@ -215,18 +217,19 @@ TEST(NestedModel, State)
215217
gz::math::Pose3d(0, 0.000674, 0, 0, 0, 0));
216218

217219
// double nested model sdf
218-
EXPECT_TRUE(nestedModelStateElem->HasElement("model"));
219-
nestedModelStateElem = nestedModelStateElem->GetElement("model");
220+
EXPECT_TRUE(nestedModelStateElem->HasElement("model_state"));
221+
nestedModelStateElem = nestedModelStateElem->GetElement("model_state");
220222
EXPECT_TRUE(nestedModelStateElem->HasAttribute("name"));
221223
EXPECT_EQ(nestedModelStateElem->Get<std::string>("name"), "model_02");
222224
EXPECT_TRUE(nestedModelStateElem->HasElement("pose"));
223225
EXPECT_EQ(nestedModelStateElem->Get<gz::math::Pose3d>("pose"),
224226
gz::math::Pose3d(1, 1, 0.5, 0, 0, 0));
225-
EXPECT_TRUE(!nestedModelStateElem->HasElement("joint"));
227+
EXPECT_FALSE(nestedModelStateElem->HasElement("joint"));
228+
EXPECT_FALSE(nestedModelStateElem->HasElement("joint_state"));
226229

227230
// double nested model's link sdf
228-
EXPECT_TRUE(nestedModelStateElem->HasElement("link"));
229-
nestedLinkStateElem = nestedModelStateElem->GetElement("link");
231+
EXPECT_TRUE(nestedModelStateElem->HasElement("link_state"));
232+
nestedLinkStateElem = nestedModelStateElem->GetElement("link_state");
230233
EXPECT_TRUE(nestedLinkStateElem->HasAttribute("name"));
231234
EXPECT_EQ(nestedLinkStateElem->Get<std::string>("name"), "link_02");
232235
EXPECT_TRUE(nestedLinkStateElem->HasElement("pose"));

0 commit comments

Comments
 (0)