ROS显示路径之visualization/Marker

本教程将向您展示如何发送四个基本形状(盒子、球体、圆柱体和箭头)。我们将创建一个程序,每秒发送一个新的标记,用不同的形状替换最后一个。
1.在工作空间创建一个usingmarker的功能包:

catkin_create_pkg using_markers roscpp visualization_msgs

2.在src/basic _ shapes. cpp中粘贴以下内容:

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>

int main(int argc, char  *argv[])
{
        //初始化
        ros::init(argc, argv, "basic_shapes");
        ros::NodeHandle  nh;

        ros::Rate   r(1);
        ros::Publisher   marker_pub = nh.advertise<visualization_msgs::Marker>("visualization_maker", 1);

        //设置你的初始形状为正方体
        uint32_t  shape = visualization_msgs::Marker::CUBE;  //enum visualization_msgs::Marker::<unnamed>::CUBE = 1

        while(ros::ok())
        {
                visualization_msgs::Marker marker;    //Marker是一个结构体模板
                //设置frame ID 和 timstamp ,具体信息可以参考TF 教程
                marker.header.frame_id = "/my_frame";
                marker.header.stamp = ros::Time::now();

                //为marker设置命名空间和ID,创建不同的ID
                //任何带有相同的命名空间和ID被发送,都会覆盖先前的那个marker
                marker.ns = "basic_shapes";
                marker.id = 0;

                //设置marker的类型。初始化是CUBE, 接着循环SPHERE,ARROW,CYLINDER
                marker.type = shape;

                //设置marker的操作:ADD, DELETE, and new in ROS indigo:3(DELETEALL)
                marker.action = visualization_msgs::Marker::ADD;

                //设置marker的位姿。这是6个自由度,相对于header中特定的坐标系和时间戳
                marker.pose.position.x = 0;
                marker.pose.position.y = 0;
                marker.pose.position.z = 0;
                marker.pose.orientation.x = 0.0;
                marker.pose.orientation.y = 0.0;
                marker.pose.orientation.z = 0.0;
                marker.pose.orientation.w = 0.0;

                //设定marker的大小----- 1x1x1 表示边长为1m
                marker.scale.x = 1.0;
                marker.scale.y = 1.0;
                marker.scale.z = 1.0;

                //设定颜色----- 确保将  alpha  设置为非零值
                marker.color.r = 0.0f;
                marker.color.g = 1.0f;
                marker.color.b = 0.0f;
                marker.color.a = 1.0;

                marker.lifetime = ros::Duration();

                //发布marker
                while (marker_pub.getNumSubscribers() < 1)  //返回与当前发布者建立连接的订阅者的数量
                {
                        if(!ros::ok())
                        {
                                return 0;
                        }
                        ROS_WARN_ONCE("Please create a subsciber to the marker");
                        sleep(1);
                }
                marker_pub.publish(marker);
                
                //不同形状之间循环
                switch (shape)
                {
                case visualization_msgs::Marker::CUBE:
                        shape = visualization_msgs::Marker::SPHERE;
                        break;
                case visualization_msgs::Marker::SPHERE:
                        shape = visualization_msgs::Marker::ARROW;
                        break;
                case visualization_msgs::Marker::ARROW:
                        shape = visualization_msgs::Marker::CYLINDER;
                        break;
                case visualization_msgs::Marker::CYLINDER:
                        shape = visualization_msgs::Marker::CUBE;
                        break;
                }
                r.sleep();
        }
        return 0;
}

3.在CMakeLists.txt文件中加入:

add_executable(basic_shape src/basic_shape.cpp)

target_link_libraries(basic_shape
  ${catkin_LIBRARIES}
)

4.编译执行文件,并启动rviz来订阅话题:visualization_maker,并将坐标系改为:my_frame , 结果如下图:
在这里插入图片描述
本教程主要根据官方教程得来,如有侵权,请立即联系本人做出更改。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `visualization_msgs/marker` 是 ROS 中一个常用的消息类型,用于在可视化工具(如RViz)中显示可视化标记。 `visualization_msgs/marker` 中定义了一组用于描述可视化标记的字段,包括标记类型、位置、方向、颜色、尺寸等等。通过发布这个消息,可将标记显示在可视化工具中,方便用户查看和调试。 常见的标记类型包括箭头、立方体、球体、线段等等,可以通过修改消息中的字段来控制标记的外观和行为。 ### 回答2: visualization_msgs/markerROS(机器人操作系统)中一种消息类型,用于在RViz中可视化数据。它是ROS中一种常见的消息类型之一,广泛应用于机器人控制、数据可视化和仿真等领域。它的主要作用是用于在RViz中显示各种数据对象,包括点、线、面、文本、箭头等。因此,visualization_msgs/marker常被视为“虚拟现实的图像”。 在ROS系统中,RViz是一种开源的3D可视化工具,它能够以可视化方式显示ROS节点所产生和接收的消息。通过使用ROS中预定义的消息类型,如visualization_msgs/marker,可以将实时数据以一种直观的方式呈现给用户。同时,RViz还支持用户自定义消息类型,因此可以满足不同领域、不同应用场景的需求。 在使用visualization_msgs/marker时,开发者需要定义其参数,以指定所需可视化对象的类型、形状、颜色、坐标、大小等属性。例如,可以使用visualization_msgs/marker定义一个球体,其参数包括形状(SPHERE)、大小(scale)、颜色(color)、位置(pose)等。通过将所定义的marker发布到ROS节点上,RViz将自动显示该对象,并可以进行实时更新和互动操作。 总之,visualization_msgs/markerROS系统中一种重要的消息类型,可用于实现ROS节点的数据可视化功能。它提供了丰富的参数和灵活的使用方式,可适应不同领域、不同应用场景的需求,为机器人控制、数据可视化和仿真等领域的开发者和用户提供了强大的工具和支持。 ### 回答3: visualization_msgs/markerROS中的一个消息类型,用于可视化机器人的图形或场景,在可视化过程中通过发布和订阅ROS消息来实现数据交换。例如,当机器人需要显示它当前运动的轨迹时,可以通过发布visualization_msgs/marker消息来显示,这是一种高效且方便的方法。 visualization_msgs/marker包含了许多属性,如颜色、大小、形状、位置等,可以非常灵活地用于机器人的可视化。其主要属性如下: 1.图形类型:可以选择点、线、立方体、球体、箭头等多种图形类型。 2.位置和方向:可以设置图形的位置和方向,以便在场景中呈现出合适的姿态。 3.颜色:可以指定图形的颜色,让机器人更加生动形象。 4.大小:可以根据需要进行相应的调整,使得图形更加美观。 5.生命周期:可以设置图形的生命周期,让图形在一定的时间后消失,从而更好地模拟机器人在现实世界中的行为。 6.相对标记:可以将图形标记为相对而非绝对的,这对于机器人的局部移动非常有用。 总之,visualization_msgs/marker是机器人可视化的一个重要组成部分,它可以将机器人的状态、动作、运动等信息直观地展现出来,帮助用户更好地理解机器人的行为,同时也为机器人的控制和运动提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值