在Rviz中显示带有纹理的Marker消息

该文介绍了如何在Ubuntu18.04和ROSMelodic环境下,利用Blender2.78进行UV贴图,然后导出DAE文件,通过ROS消息类型visualization_msgs::Marker在Rviz中以MESH资源形式显示模型纹理。过程涉及设置模型单位,选择面进行贴图,以及C++代码实现纹理的发送。

【应用背景】

根据工程要求,需要把一些试验设备具象化到 Rviz 界面中进行示意,通过调研发现,Rviz 有两种方式可以显示模型纹理:

1、通过 robot_description 发布URDF模型描述

2、通过 visualization_msgs::Marker 发布MESH模型描述

这里主要讲述第二种

【系统环境】

Ubuntu 18.04

ROS Melodic

Blender 2.78

【软件安装】

  • 首先进入下面官网,找到 Blender  2.78 的linux版本并下载到本地

Index of /release/

  •  下载下来之后,只需要解压提取出来,并双击 blender 图标即可打开软件

 【正式流程】

  • 打开 blender

  •  设置单位 --> 米

  •  设置大小 --> 按 N 调出属性面板

  •  选择需要贴纹理的模型面 --> 编辑模式、线框、面

  •  进入UV贴图模式 --> 右键选中上表面,按 U ,展开;上方选择UV Editing模式

  •  选择图片进行贴图 --> 左下选择“图像”——打开图像

  •  导出dae文件 --> 左上“文件”,“导出”,“Collada”,“包括UV贴图”,“包括材质贴图”

  •  编写c++代码,发送dae纹理到rviz中
visualization_msgs::Marker marker;
marker.scale.x = 0.7;
marker.scale.y = 0.7;
marker.scale.z = 1.0;
marker.lifetime.sec = 10000;
marker.type = visualization_msgs::Marker::MESH_RESOURCE;
marker5.mesh_resource = "file://" + pkg_path_ + "/rviz/mesh/mk.dae";
marker5.mesh_use_embedded_materials = true;
marker5.header.frame_id = "/map";
marker5.pose.position.x = 2;
marker5.pose.position.y = -3;
marker5.pose.orientation = tf::createQuaternionMsgFromYaw(-pi/2.0);
  •  结果展示

 【完结撒花】

点个关注不迷路哦!谢谢捧场

### 在RVIZ中可视化ROS发布的Marker消息 在ROS中,可以通过`visualization_msgs/Marker`消息类型实现自定义几何形状的可视化,并在RVIZ显示。以下是如何在RVIZ中查看ROS发布的Marker的方法。 #### 发布Marker消息 首先需要创建一个ROS节点来发布`visualization_msgs::Marker`类型的消息。该消息可以包含各种类型的几何形状,例如线段、立方体等。以下是使用C++创建并发布一个线段(LINE_STRIP)Marker的示例代码: ```cpp #include <ros/ros.h> #include <visualization_msgs/Marker.h> #include <geometry_msgs/Point.h> int main(int argc, char** argv) { ros::init(argc, argv, "line_segment_marker"); ros::NodeHandle nh; // 创建一个Publisher用于发布Marker ros::Publisher marker_pub = nh.advertise<visualization_msgs::Marker>("visualization_marker", 10); // 定义一个Marker对象 visualization_msgs::Marker line_marker; line_marker.header.frame_id = "map"; line_marker.header.stamp = ros::Time::now(); line_marker.ns = "line_segments"; line_marker.id = 0; line_marker.type = visualization_msgs::Marker::LINE_STRIP; line_marker.action = visualization_msgs::Marker::ADD; // 设置线段的颜色和透明度 line_marker.color.r = 1.0; line_marker.color.g = 0.0; line_marker.color.b = 0.0; line_marker.color.a = 1.0; // 设置线段的宽度 line_marker.scale.x = 0.1; // 线宽为0.1米 // 添加两个点以构成线段 geometry_msgs::Point p1, p2; p1.x = 0.0; p1.y = 0.0; p1.z = 0.0; p2.x = 5.0; p2.y = 5.0; p2.z = 0.0; line_marker.points.push_back(p1); line_marker.points.push_back(p2); // 发布Marker while (ros::ok()) { marker_pub.publish(line_marker); ros::spinOnce(); } return 0; } ``` #### RVIZ配置 接下来,在RVIZ中添加相应的显示模块以接收和渲染Marker消息: 1. 启动RVIZ:运行命令`rviz`打开可视化工具。 2. 添加Marker显示模块:点击左下角的“Add”按钮,搜索并选择“Marker显示类型。 3. 设置Topic:在Marker显示模块的设置中,将Topic设置为`visualization_marker`,与代码中发布的主题一致。 4. 调整坐标系:确保Global Options中的Fixed Frame设置为`map`或其他合适的坐标系,以便正确显示。 通过上述步骤,可以在RVIZ中实时查看由ROS节点发布的Marker消息。这包括线段、立方体等多种形式的可视化内容,具体取决于所发布的Marker类型[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值