这个就比较简单了,借助于visualization_msgs::MarkerArray,我们可以一次性装载N个不同位置的标记物。然后将该消息发送出去,在rviz上形成一条轨迹。
#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include <visualization_msgs/MarkerArray.h>
int main(int argc, char** argv) {
ros::init(argc, argv, "marker_worker");
ros::NodeHandle nh;
ros::Publisher markerArrayPub = nh.advertise<visualization_msgs::MarkerArray>("visualization_marker", 10);
ros::Rate r(1);
while(ros::ok()) {
visualization_msgs::Marker marker;
visualization_msgs::MarkerArray marker_array;
bool once = true;
for (int i = -10; i < 10; ++i) {
if (once) {
marker.action = visualization_msgs::Marker::DELETEALL;
once = false;
} else {
marker.action = visualization_msgs::Marker::ADD;
}
marker.header.frame_id = "livox_frame";
marker.header.stamp = ros::Time::now();
marker.id = i;
marker.type = visualization_msgs::Marker::SPHERE;
marker.scale.x = 0.5;
marker.scale.y = 0.5;
marker.scale.z = 0.5;
marker.color.a = 1;
marker.color.r = 1;
marker.color.g = 0;
marker.color.b = 0;
marker.pose.position.y = i;
marker.pose.position.z = 0.1*i*i;
marker_array.markers.push_back(marker);
}
markerArrayPub.publish(marker_array);
r.sleep();
}
return 0;
}
这是一条二次曲线的轨迹,当然,我只画了一部分。