Some Code to Publish a Marker for RViz2

Marker Sample

This code sends a marker at a rate of 5Hz. The marker is green and positioned in the base_link frame.

Source: marker_sample.py

#!/usr/bin/env python3

import rclpy
from rclpy.node import Node
from visualization_msgs.msg import Marker

class SimpleVisualizationPublisher(Node):
    def __init__(self):
        super().__init__('test_vis')
        self.vis_pub = self.create_publisher(Marker, 'visualization_marker', 10)

        timer_period = 0.2 # seconds
        self.timer = self.create_timer(timer_period, self.publish_marker)
    
    def publish_marker(self):
        marker = Marker()
        marker.header.frame_id = "base_link";
        marker.header.stamp = self.get_clock().now().to_msg()
        marker.ns = "my_namespace";
        marker.id = 0

        marker.type = Marker.SPHERE;
        marker.action = Marker.ADD;
        marker.pose.position.x = 1.0
        marker.pose.position.y = 1.0
        marker.pose.position.z = 1.0
        marker.pose.orientation.x = 0.0;
        marker.pose.orientation.y = 0.0;
        marker.pose.orientation.z = 0.0;
        marker.pose.orientation.w = 1.0;
        marker.scale.x = 1.0
        marker.scale.y = 0.1
        marker.scale.z = 0.1
        marker.color.a = 1.0; # Don't forget to set the alpha!
        marker.color.r = 0.0
        marker.color.g = 1.0
        marker.color.b = 0.0

        self.vis_pub.publish( marker );

def main(args=None):
    rclpy.init(args=args)

    simple_visualization_publisher = SimpleVisualizationPublisher()

    rclpy.spin(simple_visualization_publisher)

    # Destroy the node explicitly
    # (optional - otherwise it will be done automatically
    # when the garbage collector destroys the node object)
    simple_visualization_publisher.destroy_node()
    rclpy.shutdown()


if __name__ == '__main__':
    main()