我是从这里开始:http://wiki.ros.org/rviz
在它之下,先玩完这一部分:http://wiki.ros.org/rviz/UserGuide
今天要玩这一部分: http://wiki.ros.org/rviz/Tutorials/Markers%3A%20Basic%20Shapes
---------------------------
Description: Shows how to use visualization_msgs/Marker messages to send basic shapes (cube, sphere, cylinder, arrow) to rviz.
Unlike other displays, the Marker Display lets you visualize data in rviz without rviz knowing anything about interpreting that data. Instead, primitive objects are sent to the display throughvisualization_msgs/Marker messages, which let you show things like arrows, boxes, spheres and lines.
This tutorial will show you how to send the four basic shapes (boxes, spheres, cylinders, and arrows). We'll create a program that sends out a new marker every second, replacing the last one with a different shape.Before getting started, let's create a scratch package to calledusing_markers, somewherein your package path:(exbot@ubuntu:~/catkin_ws/src)
catkin_create_pkg using_markers roscpp visualization_msgs
Paste the following into src/basic_shapes.cpp:
https://raw.github.com/ros-visualization/visualization_tutorials/indigo-devel/visualization_marker_tutorials/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 n; ros::Rate r(1); ros::Publisher marker_pub = n.advertise<visualization_msgs::Marker>("visualization_marker", 1); // Set our initial shape type to be a cube uint32_t shape = visualization_msgs::Marker::CUBE; while (ros::ok()) { visualization_msgs::Marker marker; // Set the frame ID and timestamp. See the TF tutorials for information on these. marker.header.frame_id = "/my_frame"; marker.header.stamp = ros::Time::now(); // Set the namespace and id for this marker. This serves to create a unique ID // Any marker sent with the same namespace and id will overwrite the old one marker.ns = "basic_shapes"; marker.id = 0; // Set the marker type. Initially this is CUBE, and cycles between that and SPHERE, ARROW, and CYLINDER marker.type = shape; // Set the marker action. Options are ADD, DELETE, and new in ROS Indigo: 3 (DELETEALL) marker.action = visualization_msgs::Marker::ADD; // Set the pose of the marker. This is a full 6DOF pose relative to the frame/time specified in the 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 = 1.0; // Set the scale of the marker -- 1x1x1 here means 1m on a side marker.scale.x = 1.0; marker.scale.y = 1.0; marker.scale.z = 1.0; // Set the color -- be sure to set alpha to something non-zero! marker.color.r = 0.0f; marker.color.g = 1.0f; marker.color.b = 0.0f; marker.color.a = 1.0; marker.lifetime = ros::Duration(); // Publish the marker while (marker_pub.getNumSubscribers() < 1) { if (!ros::ok()) { return 0; } ROS_WARN_ONCE("Please create a subscriber to the marker"); sleep(1); } marker_pub.publish(marker); // Cycle between different shapes 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(); } }
Now edit the CMakeLists.txt file in yourusing_markers package, and add:
add_executable(basic_shapes src/basic_shapes.cpp) target_link_libraries(basic_shapes ${catkin_LIBRARIES})
具体的Code Explaining见本文的来源网页:http://wiki.ros.org/rviz/Tutorials/Markers%3A%20Basic%20Shapes
You should be able to build the code with:
$ cd %TOP_DIR_YOUR_CATKIN_WORKSPACE% $ catkin_make
实际地址:exbot@ubuntu:~/catkin_ws$ catkin_make
You should be able to run the code with:
rosrun using_markers basic_shapes
Now that you're publishing markers, you need to set rviz up to view them. First, make sure rviz is built:
rosmake rviz
Now, run rviz:
rosrun using_markers basic_shapes rosrun rviz rviz
If you've never used rviz before, please see the User's Guide to get you started.
The first thing to do, because we don't have any tf transforms setup, is to set the Fixed Frames to the frame we set the marker to above, /my_frame. In order to do so, set the Fixed Frame field to "/my_frame".
Next add a Markers display. Notice that the default topic specified, visualization_marker, is the same as the one being published.
You should now see a marker at the origin that changes shape every second:
然后我还突发奇想,复习一下前面初级篇的内容,来完成一个任务:
任务1:
利用 turtlesim turtlesim_node,完成一个从键盘输入int64 x, int64 y, int64 angle, int64_velocity的运动。
分析: 先用my_drivenode1向topic=/turtle1/cmd_vel 发送Message
再接受键盘输入,从而模拟teleop_key 的工作。