Skip to content

Commit a8a9862

Browse files
committed
Remove dependency on robot_descriptions_cpp
1 parent c1efe23 commit a8a9862

File tree

6 files changed

+44
-20
lines changed

6 files changed

+44
-20
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
- Added tools for loading models from a given description struct `RobotSpec` (https://github.com/Simple-Robotics/candlewick/pull/37)
1213
- Added Candlewick visualizer runtime, to be used to (up)load Pinocchio models and submit states to be displayed asynchronously. (https://github.com/Simple-Robotics/candlewick/pull/37)
1314
- Embed Inter Medium font into the application (https://github.com/Simple-Robotics/candlewick/pull/37)
1415

@@ -22,6 +23,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2223
- `core/Device.h` : fix release() function
2324
- Python examples : wrap some import statements in try/except statements (https://github.com/Simple-Robotics/candlewick/pull/37)
2425

26+
### Removed
27+
28+
- Remove dependency on `robot_descriptions_cpp` (https://github.com/Simple-Robotics/candlewick/pull/37)
29+
2530
## [0.7.0] - 2025-07-04
2631

2732
### Added

examples/CMakeLists.txt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ target_include_directories(
88
)
99

1010
if(BUILD_PINOCCHIO_VISUALIZER)
11+
find_package(example-robot-data REQUIRED)
1112
target_sources(ExamplesCommon PRIVATE lib/GenHeightfield.cpp)
12-
target_link_libraries(ExamplesCommon PUBLIC candlewick_multibody)
13-
14-
set(ROBOT_DESCRIPTIONS_CPP_INSTALL OFF CACHE BOOL "")
15-
set(ROBOT_DESCRIPTIONS_CPP_TESTING OFF CACHE BOOL "")
16-
add_subdirectory(robot_descriptions_cpp EXCLUDE_FROM_ALL)
13+
target_link_libraries(
14+
ExamplesCommon
15+
PUBLIC
16+
candlewick_multibody
17+
pinocchio::pinocchio_parsers
18+
example-robot-data::example-robot-data
19+
)
1720
endif()
1821

1922
function(add_candlewick_example filename)
@@ -35,7 +38,6 @@ if(BUILD_PINOCCHIO_VISUALIZER)
3538
add_candlewick_example(
3639
Ur5WithSystems.cpp
3740
CLI11::CLI11
38-
robot_descriptions_cpp
3941
)
40-
add_candlewick_example(Visualizer.cpp CLI11::CLI11 robot_descriptions_cpp)
42+
add_candlewick_example(Visualizer.cpp CLI11::CLI11)
4143
endif()

examples/Ur5WithSystems.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "candlewick/multibody/RobotScene.h"
1515
#include "candlewick/multibody/RobotDebug.h"
16+
#include "candlewick/multibody/RobotLoader.h"
1617
#include "candlewick/primitives/Primitives.h"
1718
#ifdef CANDLEWICK_WITH_FFMPEG_SUPPORT
1819
#include "candlewick/utils/VideoRecorder.h"
@@ -22,8 +23,6 @@
2223
#include <imgui.h>
2324
#include <imgui_impl_sdl3.h>
2425

25-
#include <robot_descriptions_cpp/robot_spec.hpp>
26-
2726
#include <pinocchio/multibody/model.hpp>
2827
#include <pinocchio/multibody/data.hpp>
2928
#include <pinocchio/multibody/geometry.hpp>
@@ -51,6 +50,7 @@
5150
namespace pin = pinocchio;
5251
using namespace candlewick;
5352
using multibody::RobotScene;
53+
using multibody::RobotSpec;
5454

5555
/// Application constants
5656

@@ -218,6 +218,15 @@ static void screenshot_button_callback(RenderContext &renderer,
218218
wHeight, filename);
219219
}
220220

221+
static const RobotSpec ur_robot_spec =
222+
RobotSpec{
223+
"urdf/ur5_gripper.urdf",
224+
"srdf/ur5_gripper.srdf",
225+
std::filesystem::path(EXAMPLE_ROBOT_DATA_MODEL_DIR).parent_path(),
226+
"robots/ur_description",
227+
}
228+
.ensure_absolute_filepaths();
229+
221230
int main(int argc, char **argv) {
222231
CLI::App app{"Ur5 example"};
223232
bool performRecording{false};
@@ -244,8 +253,7 @@ int main(int argc, char **argv) {
244253
// Load robot
245254
pin::Model model;
246255
pin::GeometryModel geom_model;
247-
robot_descriptions::loadModelsFromToml("ur.toml", "ur5_gripper", model,
248-
&geom_model, NULL, true);
256+
loadModels(ur_robot_spec, model, &geom_model, NULL, true);
249257
// ADD HEIGHTFIELD GEOM
250258
// {
251259
// auto hfield = generatePerlinNoiseHeightfield(40, 10u, 6.f);

examples/Visualizer.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "candlewick/multibody/Visualizer.h"
2-
3-
#include <robot_descriptions_cpp/robot_spec.hpp>
2+
#include "candlewick/multibody/RobotLoader.h"
43

54
#include <pinocchio/algorithm/joint-configuration.hpp>
65
#include <pinocchio/algorithm/geometry.hpp>
@@ -12,6 +11,16 @@
1211

1312
using namespace candlewick::multibody;
1413
using std::chrono::steady_clock;
14+
namespace fs = std::filesystem;
15+
16+
static const RobotSpec ur_robot_spec =
17+
RobotSpec{
18+
"urdf/ur5_gripper.urdf",
19+
"srdf/ur5_gripper.srdf",
20+
fs::path(EXAMPLE_ROBOT_DATA_MODEL_DIR).parent_path(),
21+
"robots/ur_description",
22+
}
23+
.ensure_absolute_filepaths();
1524

1625
int main(int argc, char **argv) {
1726
CLI::App app{"Visualizer example"};
@@ -28,8 +37,7 @@ int main(int argc, char **argv) {
2837

2938
pin::Model model;
3039
pin::GeometryModel geom_model;
31-
robot_descriptions::loadModelsFromToml("ur.toml", "ur5_gripper", model,
32-
&geom_model, NULL);
40+
loadModels(ur_robot_spec, model, &geom_model, NULL);
3341

3442
Visualizer visualizer{{window_dims[0], window_dims[1]}, model, geom_model};
3543
assert(!visualizer.hasExternalData());

examples/robot_descriptions_cpp

Submodule robot_descriptions_cpp deleted from d328e66

src/candlewick/runtime/main.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "candlewick/multibody/Multibody.h"
22
#include "candlewick/multibody/Visualizer.h"
3+
#include "candlewick/multibody/RobotLoader.h"
34

45
#include <pinocchio/serialization/model.hpp>
56
#include <pinocchio/serialization/geometry.hpp>
@@ -21,6 +22,7 @@ using cdw::multibody::Visualizer;
2122
constexpr std::string_view CMD_##name = #name
2223

2324
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_models);
25+
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_urdf_spec);
2426
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_state);
2527
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_cam_pose);
2628
CANDLEWICK_RUNTIME_DEFINE_COMMAND(clean);
@@ -80,7 +82,7 @@ auto get_eigen_view_from_spec(const ArrayMessage &spec) {
8082

8183
struct ApplicationContext {
8284
pin::Model model;
83-
pin::GeometryModel geom_model;
85+
pin::GeometryModel visual_model;
8486
zmq::context_t ctx{};
8587
zmq::socket_t sync_sock{ctx, zmq::socket_type::rep};
8688
zmq::socket_t state_sock{ctx, zmq::socket_type::sub};
@@ -102,13 +104,13 @@ bool handle_first_message(zmq::socket_ref sock, ApplicationContext &app_ctx) {
102104
std::array<std::string, 2> model_strings;
103105
obj.convert(model_strings);
104106
app_ctx.model.loadFromString(model_strings[0]);
105-
app_ctx.geom_model.loadFromString(model_strings[1]);
107+
app_ctx.visual_model.loadFromString(model_strings[1]);
106108
// send response only when models loaded.
107109
sock.send(zmq::str_buffer("ok"));
108110

109111
SDL_Log("Loaded model with %d joints", app_ctx.model.njoints);
110112
SDL_Log("Loaded geometry model with %zd gobjs",
111-
app_ctx.geom_model.ngeoms);
113+
app_ctx.visual_model.ngeoms);
112114
return true;
113115
} else {
114116
SDL_Log("First message must have header \'%s\', got \'%s\'. Retry.",
@@ -203,7 +205,7 @@ int main(int argc, char **argv) {
203205
Visualizer::Config config;
204206
config.width = window_dims[0];
205207
config.height = window_dims[1];
206-
Visualizer viz{config, app_ctx.model, app_ctx.geom_model};
208+
Visualizer viz{config, app_ctx.model, app_ctx.visual_model};
207209

208210
run_main_loop(viz, app_ctx);
209211

0 commit comments

Comments
 (0)