在ROS中使用Marker向rviz中发布STL物体

  • Post author:
  • Post category:其他
 void StlPub()
  {
    visualization_msgs::Marker block;

    block.type = visualization_msgs::Marker::MESH_RESOURCE;
    block.mesh_resource = "package://block2/meshes/base.stl";
    block.action = visualization_msgs::Marker::ADD;
    block.id = 0;
    block.lifetime = ros::Duration(0);
    block.header.stamp = ros::time()::now();
    block.header.frame_id = "world";
    block.ns = "block";
    //set position
    block.pose.position.x = x ;
    block.pose.position.y = y ;
    block.pose.position.z = z ;
    //set pose/orientation
    block.pose.orientation.x = 0.0;
    block.pose.orientation.y = 0.0;
    block.pose.orientation.z = 0.0;
    block.pose.orientation.w = 1.0;
    //set scale
    block.scale.x = 1;
    block.scale.y = 1;
    block.scale.z = 1;
    // set color.
    block.color.r = 0.5f;
    block.color.g = 0.5f;
    block.color.b = 0.5f;
    block.color.a = 1.0f;

    block_publisher_.publish(block);
  }

Ros官方的,marker教程:rviz/DisplayTypes/Marker – ROS Wiki

对上述代码进行解析,首先是marker的基本设置,时间戳和id之类的,marker的type设置为visualization_msgs::Marker::MESH_RESOURCE,MESH_RESOURCE是特定的mesh加载类型。

marke.mesh_resource 设置为你的stl路径。请注意,后缀需要区分大小写,除了stl,官方说明还可以使用dae模型。

pose.position 是位置设置

pose.orientation 是旋转设置,是四元数

pose.scale 是模型的缩放指数,1代表原尺寸,缩放后尺度 = 原尺度 * scale

color 就是 颜色设置。

一些小问题:

如果在rviz中出现了无法加载模型的情况,以下操作可能会有帮助:

  1. 检查一下文件后缀
  2. 检查一下文件的路径
  3. 启动rviz的时候记得在自己的工程目录下source一下

版权声明:本文为sinat_38679789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。