ros cpp发布许多marker
时间: 2023-08-10 17:09:32 浏览: 123
要发布多个 marker,可以使用一个循环来设置每个 marker 的属性并发布它们。下面是一个简单的示例代码,发布 10 个立方体 marker:
```cpp
#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
int main( int argc, char** argv )
{
ros::init(argc, argv, "marker_publisher");
ros::NodeHandle n;
ros::Publisher marker_pub = n.advertise<visualization_msgs::Marker>("visualization_marker", 10);
ros::Rate r(30);
while (ros::ok())
{
visualization_msgs::Marker marker;
marker.header.frame_id = "map";
marker.header.stamp = ros::Time::now();
marker.ns = "basic_shapes";
marker.id = 0;
marker.type = visualization_msgs::Marker::CUBE;
marker.action = visualization_msgs::Marker::ADD;
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 = 1.0;
marker.scale.x = 1.0;
marker.scale.y = 1.0;
marker.scale.z = 1.0;
marker.color.r = 1.0f;
marker.color.g = 0.0f;
marker.color.b = 0.0f;
marker.color.a = 1.0f;
marker.lifetime = ros::Duration();
for (int i = 0; i < 10; i++) {
marker.id = i;
marker.pose.position.x = i;
marker_pub.publish(marker);
}
r.sleep();
}
}
```
这个例子中,我们使用了一个 `for` 循环来设置每个 marker 的位置和 ID,并在循环内部发布它们。注意,`id` 参数必须是唯一的,因此我们为每个 marker 设置不同的 ID。
另外,我们还将每个 marker 的命名空间设置为 `"basic_shapes"`,这可以帮助 ROS 可视化工具 RViz 将它们分组并显示为单独的对象。
阅读全文