rviz學習系列---Markers:發送基本形狀(c++)


1.cd ~/catkin_ws/

catkin_create_pkg using_markers roscpp visualization_msgs 

cd src/using_markers/src

gedit basic_shapes.cpp

 

2.寫代碼

 1 #include "ros/ros.h"
 2 #include "visualization_msgs/Marker.h"
 3 
 4 int main(int argc,char** argv)
 5 {
 6     ros::init(argc,argv,"basic_shapes");
 7     ros::NodeHandle n;
 8     ros::Rate r(1);
 9     ros::Publisher marker_pub = n.advertise<visualization_msgs::Marker>("visualization_marker",1);
10 
11     uint32_t shape = visualization_msgs::Marker::CUBE;
12 
13     while(ros::ok())
14     {
15         visualization_msgs::Marker marker;
16         marker.header.frame_id = "/my_frame";
17         marker.header.stamp = ros::Time::now();
18         marker.ns = "basic_shapes";
19         marker.id = 0;
20         marker.type = shape;
21         marker.action = visualization_msgs::Marker::ADD;
22 
23         marker.pose.position.x = 0;
24         marker.pose.position.y = 0;
25         marker.pose.position.z = 0;
26         marker.pose.orientation.x = 0.0;
27         marker.pose.orientation.y = 0.0;
28         marker.pose.orientation.z = 0.0;
29         marker.pose.orientation.w = 1.0;
30 
31         marker.scale.x = 1.0;
32         marker.scale.y = 1.0;
33         marker.scale.z = 1.0;
34 
35         marker.color.r = 0.0f;
36         marker.color.g = 1.0f;
37         marker.color.b = 0.0f;
38         marker.color.a = 1.0;
39 
40         marker.lifetime = ros::Duration();
41 
42         while(marker_pub.getNumSubscribers() < 1)
43         {
44             if(!ros::ok())
45             {
46                 return 0;
47             }
48             ROS_WARN_ONCE("Please create a subscriber to the marker");
49             sleep(1);
50         }
51         marker_pub.publish(marker);
52 
53         switch(shape)
54         {
55             case visualization_msgs::Marker::CUBE:
56                 shape = visualization_msgs::Marker::SPHERE;
57                 break;
58             case visualization_msgs::Marker::SPHERE:
59                 shape = visualization_msgs::Marker::ARROW;
60                 break;
61             case visualization_msgs::Marker::ARROW:
62                 shape = visualization_msgs::Marker::CYLINDER;
63                 break;
64             case visualization_msgs::Marker::CYLINDER:
65                 shape = visualization_msgs::Marker::CUBE;
66                 break;
67 
68         }
69         r.sleep();
70     }
71 
72 }

3.代碼寫完以后:修改CMakeLists.txt

添加

add_executable(basic_shapes src/basic_shapes.cpp)

target_link_libraries(basic_shapes ${catkin_LIBRARIES})

如圖:

 

4.編譯

如下圖,編譯成功

5.運行

一個:roscore

 另開一個:出現warn,和代碼一致

 

另開一個:

 

打開rviz后:

 

 

如上圖,修改Fixed Frame,和代碼一致為:my_frame

修改后

 

點擊Add,彈出如圖框,選擇Marker,OK添加即可,出現變換的四個圖形。

 

參考鏈接:

http://www.robotos.net/thread-2662-1-1.html

http://wiki.ros.org/rviz#Tutorials


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM