sutej kulgod
sutej kulgod

Reputation: 44

Visualizing a line in drake visualizer with C++

The question is related to Is there a way of visualising a line in drake visualizer where I had asked about how to visualize a line in the drake visualizer (about 3 years ago, which worked fine with v0.10.0). I am trying to achieve the same with the new API and was wondering if there was any example/documentation which can guide me on how to publish a line onto the visualizer. My previous method used for publishing a line looks like:

void publishLine(const std::vector<std::vector<double>>& pts,
                 const std::vector<std::string>& path, lcm::DrakeLcm& lcm,
                 std::vector<double> color) {
  long long int now = getUnixTime() * 1000 * 1000;
  nlohmann::json j = {{"timestamp", now},
                      {
                          "setgeometry",
                          {{{"path", path},
                            {"geometry",
                             {
                                 {"type", "line"},
                                 {"points", pts},
                                 {"color", color},
                                 {"radius", 0.1},
                             }}}},
                      },
                      {"settransform", nlohmann::json({})},
                      {"delete", nlohmann::json({})}};

  auto msg = robotlocomotion::viewer2_comms_t();
  msg.utime = now;
  msg.format = "treeviewer_json";
  msg.format_version_major = 1;
  msg.format_version_minor = 0;
  msg.data.clear();
  for (auto& c : j.dump()) msg.data.push_back(c);
  msg.num_bytes = j.dump().size();
  // Use channel 0 for remote viewer communications.
  lcm.get_lcm_instance()->publish("DIRECTOR_TREE_VIEWER_REQUEST_<0>", &msg);
}

Upvotes: 0

Views: 198

Answers (1)

Russ Tedrake
Russ Tedrake

Reputation: 5533

You can use Meshcat::SetLine or Meshcat::SetLineSegments https://drake.mit.edu/doxygen_cxx/classdrake_1_1geometry_1_1_meshcat.html#aa5b082d79e267c040cbd066a11cdcb54

One caveat is that many browsers/webGL implementations do not support the linewidth property in ThreeJS. For thick lines, consider adding a cylinder using SetObject.

Upvotes: 2

Related Questions