使用 C++ 在 drake 可视化工具中可视化一条线

Visualizing a line in drake visualizer with C++

这个问题与 Is there a way of visualising a line in drake visualizer 有关,我曾在其中询问如何在 drake 可视化工具中可视化一条线(大约 3 年前,它在 v0.10.0 上运行良好)。我正在尝试使用新的 API 实现相同的效果,并且想知道是否有任何 example/documentation 可以指导我如何将一行发布到可视化工具上。我以前用于发布一行的方法如下所示:

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);
}

您可以使用 Meshcat::SetLineMeshcat::SetLineSegments https://drake.mit.edu/doxygen_cxx/classdrake_1_1geometry_1_1_meshcat.html#aa5b082d79e267c040cbd066a11cdcb54

需要注意的是,许多 browsers/webGL 实现不支持 ThreeJS 中的 linewidth 属性。对于粗线,请考虑使用 SetObject.

添加圆柱体