rviz官網教程:這裏,其中3-5屬於交互式Markers的教程。
visualization_msgs。
Basic Controls :
interactiveMarkerServer:創建一個實例對象,將所有的InteractiveMarker messages都傳給這個對象:
boost::shared_ptr<interactive_markers::InteractiveMarkerServer> server;
frameCallBack():設置一個timer,用於實現base_link和moving_frame之間的tf座標系變換:
void frameCallback(const ros::TimerEvent&)
{
static uint32_t counter = 0;
static tf::TransformBroadcaster br;
tf::Transform t;
ros::Time time = ros::Time::now();
t.setOrigin(tf::Vector3(0.0, 0.0, sin(float(counter)/140.0) * 2.0));
t.setRotation(tf::Quaternion(0.0, 0.0, 0.0, 1.0));
br.sendTransform(tf::StampedTransform(t, time, "base_link", "moving_frame"));
t.setOrigin(tf::Vector3(0.0, 0.0, 0.0));
t.setRotation(tf::createQuaternionFromRPY(0.0, float(counter)/140.0, 0.0));
br.sendTransform(tf::StampedTransform(t, time, "base_link", "rotating_frame"));
counter++;
}
processFeedback():用於當收到feedback時,將詳細信息打印在終端:
void processFeedback( const visualization_msgs::InteractiveMarkerFeedbackConstPtr &feedback ){...}
...
server->setCallback(int_marker.name, &processFeedback);