# Rviz-dev **Repository Path**: LadissonGitee/rviz-dev ## Basic Information - **Project Name**: Rviz-dev - **Description**: rviz定制化开发examples - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-07 - **Last Updated**: 2025-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 以下是 **Rviz 定制化开发的基础操作**,涵盖从开发环境的搭建到实现简单插件的全过程。 --- ### 1. **环境准备** #### 必备工具 - **ROS**:安装您使用的 ROS 版本(如 Noetic 或 Foxy)。 - **Rviz**:随 ROS 安装包一并安装。 - **C++ 编译工具链**:确保安装了 `gcc` 和 `g++`。 - **Qt**:Rviz 基于 Qt,需要支持 Qt5 或更高版本。 - **OGRE**:Rviz 使用 OGRE 图形引擎,通常已包含在 ROS 安装中。 #### 创建工作空间 ```bash mkdir -p ~/rviz_plugin_ws/src cd ~/rviz_plugin_ws catkin_make ``` #### 安装Rviz依赖 如果没有安装 Rviz: ```bash sudo apt-get install ros--rviz ``` 将 `` 替换为您的 ROS 版本。 --- ### 2. **创建插件包** 在工作空间中创建一个新的 ROS 包: ```bash cd ~/rviz_plugin_ws/src catkin_create_pkg my_rviz_plugin rviz roscpp std_msgs ``` --- ### 3. **编写插件代码** #### 创建基本结构 进入包的 `src` 目录,创建插件的源文件: ```bash cd ~/rviz_plugin_ws/src/my_rviz_plugin/src touch my_display.cpp ``` --- #### 实现一个简单的 Display 插件 **`my_display.cpp`:** ```cpp #include #include #include namespace my_namespace { class MyDisplay : public rviz::Display { public: MyDisplay() { ROS_INFO("MyDisplay Plugin Created"); } ~MyDisplay() override { ROS_INFO("MyDisplay Plugin Destroyed"); } protected: void onInitialize() override { ROS_INFO("Initializing MyDisplay"); scene_node_ = scene_manager_->getRootSceneNode()->createChildSceneNode(); } void onEnable() override { ROS_INFO("Enabling MyDisplay"); } void onDisable() override { ROS_INFO("Disabling MyDisplay"); scene_node_->setVisible(false); } private: Ogre::SceneNode* scene_node_; }; } // namespace my_namespace #include PLUGINLIB_EXPORT_CLASS(my_namespace::MyDisplay, rviz::Display) ``` --- ### 4. **创建插件描述文件** 在 `my_rviz_plugin` 包的目录中创建 `plugin_description.xml`: ```bash cd ~/rviz_plugin_ws/src/my_rviz_plugin mkdir resource touch resource/plugin_description.xml ``` **`plugin_description.xml`:** ```xml A custom Rviz display plugin. ``` --- ### 5. **修改CMakeLists.txt** 编辑 `my_rviz_plugin` 包的 `CMakeLists.txt` 文件,添加以下内容: ```cmake find_package(catkin REQUIRED COMPONENTS rviz roscpp std_msgs ) find_package(Qt5 REQUIRED COMPONENTS Widgets) catkin_package() include_directories(${catkin_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}) add_library(my_rviz_plugin src/my_display.cpp) target_link_libraries(my_rviz_plugin ${catkin_LIBRARIES} Qt5::Widgets) install(TARGETS my_rviz_plugin LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) install(FILES resource/plugin_description.xml DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) ``` --- ### 6. **编译插件** 返回工作空间根目录,编译插件: ```bash cd ~/rviz_plugin_ws catkin_make source devel/setup.bash ``` --- ### 7. **运行插件** 启动 Rviz,并加载插件: ```bash rviz ``` 在 Rviz 界面中: 1. 点击 `Add` 按钮。 2. 在 `By Display Type` 下选择 `my_namespace::MyDisplay`。 3. 查看插件是否正常加载。 --- ### 8. **扩展功能** #### 添加自定义属性 在插件中添加用户可调参数,例如调整显示对象的大小或颜色。 ```cpp #include private: rviz::FloatProperty* size_property_; protected: void onInitialize() override { size_property_ = new rviz::FloatProperty("Size", 1.0, "Set the size of the object", this); } ``` #### 渲染3D对象 在 `onInitialize` 方法中,使用 OGRE 添加 3D 对象: ```cpp Ogre::Entity* entity = scene_manager_->createEntity(Ogre::SceneManager::PT_CUBE); scene_node_->attachObject(entity); ``` #### 订阅 ROS 话题 插件可以订阅 ROS 话题,实现动态更新: ```cpp #include #include private: ros::Subscriber sub_; protected: void onInitialize() override { sub_ = update_nh_.subscribe("topic_name", 1, [this](const std_msgs::Float32::ConstPtr& msg) { ROS_INFO("Received data: %f", msg->data); }); } ``` --- ### 9. **调试插件** - 使用 `rviz` 的调试日志检查插件运行状态。 - 确保插件动态库可以正确加载,运行时路径配置正确。 - 使用 `rosconsole` 输出调试信息。 --- 通过以上步骤,您就可以开发一个简单的 Rviz 插件,并根据实际需求扩展功能。若有更复杂的需求(如动态交互、复杂渲染),可以基于此基础进一步学习 OGRE 和 Qt。