如何使用 ROS rviz 面板绘制 3d 场景?

How to use a ROS rviz panel to draw in 3d Scene?

我正在学习 rviz 教程,并试图找出如何使用示例代码“teleop_panel”在 3d 场景中绘制。根据教程,这应该是可能的“RViz 中的面板是一个 GUI 小部件,可以停靠在主 window 中或浮动。它不会像显示器那样在“显示”面板中显示属性,但它可以在 3D 场景中展示事物。”但我不知道如何修改源代码以将数据实际注入 3d 场景(如 IMUDisplay 插件的工作方式)。

我的用例是我想有一种方法来拥有某种形式的丰富的 qt 面板(带有控件、指示器等),可以连接到其他 ROS 主题并在主要 3d 场景中绘制。我不相信其他选项(例如 Display 插件)可以做到这一点,但我可能是错的。

从 teleop_panel 插件教程开始时,将以下成员添加到 TeleopPanel class:

Ogre::SceneManager* scene_manager_;
Ogre::SceneNode* childScene;
rviz::MovableText* helloWorldText;

接下来将以下代码添加到 onInitialize() 方法中:

scene_manager_ = vis_manager_->getSceneManager();
childScene = scene_manager_->getRootSceneNode()->createChildSceneNode();

helloWorldText = new rviz::MovableText("Hello World!");
childScene->attachObject(helloWorldText);
helloWorldText->setColor(Ogre::ColourValue::Red);
helloWorldText->setCharacterHeight(2);
helloWorldText->setVisible(true);

最后要清理添加以下析构函数:

TeleopPanel::~TeleopPanel() {
    // Destroy the child scene node since we don't need it anymore.
    scene_manager_->destroySceneNode(childScene);
}

现在当您加载面板时,您应该会看到“Hello World!”在 3D 场景中为 0.0。