(十二)ROS在rviz中的不同位置显示文字(visualization_msgs::MarkerArray的使用)

本文实现在rviz中指定位置显示文字

1.在特定地方显示一行文字

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include<iostream>
using namespace std;
int main( int argc, char** argv )
{
    ros::init(argc, argv, "showline");
    ros::NodeHandle n;
    ros::Publisher markerPub = n.advertise<visualization_msgs::Marker>("TEXT_VIEW_FACING", 10);
    visualization_msgs::Marker marker;
    marker.header.frame_id="/odom";
    marker.header.stamp = ros::Time::now();
    marker.ns = "basic_shapes";
    marker.action = visualization_msgs::Marker::ADD;
    marker.pose.orientation.w = 1.0;
    marker.id =0;
    marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING;

    marker.scale.z = 0.2;
    marker.color.b = 0;
    marker.color.g = 0;
    marker.color.r = 255;
    marker.color.a = 1;

    ros::Rate r(1);
    int k=0;
    while(1)
    {
        geometry_msgs::Pose pose;
        pose.position.x =  (float)(k++)/10;
        pose.position.y =  0;
        pose.position.z =0;
        ostringstream str;
        str<<k;
        marker.text=str.str();
        marker.pose=pose;
        markerPub.publish(marker);
        cout<<"k="<<k<<endl;
        r.sleep();
    }
    return 0;
}

如上例子,动态的在geometry_msgs::Pose pose 处(x = (float)(k++)/10)显示当前的k值.
这里写图片描述

2.在同时在不同地方显示不同文字

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include<visualization_msgs/MarkerArray.h>
#include<iostream>
using namespace std;
int main( int argc, char** argv )
{
    ros::init(argc, argv, "showline");
    ros::NodeHandle n;
    ros::Publisher markerArrayPub = n.advertise<visualization_msgs::MarkerArray>("MarkerArray", 10);

    visualization_msgs::MarkerArray markerArray;
    ros::Rate r(1);
    int k=0;
    while(k<100)
    {
        visualization_msgs::Marker marker;
        marker.header.frame_id="/odom";
        marker.header.stamp = ros::Time::now();
        marker.ns = "basic_shapes";
        marker.action = visualization_msgs::Marker::ADD;
        marker.pose.orientation.w = 1.0;
        marker.id =k;
        marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING;

        marker.scale.z = 0.1;
        marker.color.b = 255;
        marker.color.g = 255;
        marker.color.r = 255;
        marker.color.a = 1;

        geometry_msgs::Pose pose;
        pose.position.x =  (float)(k)/10;
        pose.position.y =  0;
        pose.position.z =0;
        ostringstream str;
        str<<k;
        marker.text=str.str();
        marker.pose=pose;

        cout<<"k="<<k<<endl;
        markerArray.markers.push_back(marker);
        cout<<"markerArray.markers.size()"<<markerArray.markers.size()<<endl;
        markerArrayPub.publish(markerArray);
        r.sleep();
        k++;
    }
    return 0;
}

如上例子,x间隔0.1m显示当前的k值(x=k/10).
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ktigerhero3/article/details/80483802