我正在阅读rviz教程,并试图找出如何使用示例代码"teleop_panel“在3d场景中绘制。根据本教程,“RViz中的一个面板是一个图形用户界面小部件,可以停靠在主窗口或浮动。它不会在”显示“面板中显示属性,比如显示,但它可以在3D场景中显示东西。”但是我不知道如何修改源代码来将数据实际注入到3d场景中(比如IMUDisplay插件是如何工作的)。
我的用例是,我希望有一种方法来拥有某种形式的富qt面板(带有控件、指示器等),它可以连接到其他ROS主题并在主要的3d场景中绘制。我认为其他选项(比如显示插件)不可能做到这一点,但我可能错了。
发布于 2022-01-19 19:21:42
从teleop_panel插件教程开始时,向TeleopPanel类添加以下成员:
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!“在3D场景中的0.0。
https://stackoverflow.com/questions/70756336
复制相似问题