rviz學習筆記(一)——Markers: Sending Basic Shapes (C++) 發送基礎形狀


一、創建一個包——進行marker練習

1、創建ROS工作空間和包

mkdir -p ~/catkin_ws/src       #創建工作空間目錄

#創建ROS數據包
catkin_create_pkg using_markers roscpp visualization_msgs   

#打開包根目錄,進行編譯
cd ~/catkin_ws
catkin_make

 

 

2、編寫cpp文件,向rviz發送數據

vim ~/catkin_ws/src/using_marker/src/using_markers.cpp

 

  貼入代碼,代碼中已經附加相關注釋

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>           //可視化

int main( int argc, char** argv )
{
  //初始化ROS,幷且創建一個ROS::Publisher 在話題visualization_marker上面
  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())
  {
    //實例化一個Marker
    visualization_msgs::Marker marker;

    // Set the frame ID and timestamp.  See the TF tutorials for information on these.
    // 設置frame ID 和 時間戳
    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設置一個獨一無二的ID,一個marker接收到相同ns和id就會用新的信息代替舊的
    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類型,初始化是立方體。將進行循環
    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的位置
    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的大小
    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的顏色
    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();
  }
}

 

  在CMakeList.txt文件中加入

add_executable(basic_shapes src/basic_shapes.cpp)
target_link_libraries(basic_shapes ${catkin_LIBRARIES})

 

 

 

3、進行rviz設置

(1)打開roscore

(2)運行編寫的發布器

rosrun using_marker basic_shapes

 

(3)重置rviz,運行rviz

rosmake rviz
rosrun rviz rviz

 

(4)在rviz中進行設置

 

4、rviz最終效果顯示:4個圖形進行連續的變換

一、創建一個包——進行marker練習

1、創建ROS工作空間和包

mkdir -p ~/catkin_ws/src #創建工作空間目錄 #創建ROS數據包 catkin_create_pkg using_markers roscpp visualization_msgs #打開包根目錄,進行編譯 cd ~/catkin_ws catkin_make

 

2、編寫cpp文件,向rviz發送數據

vim ~/catkin_ws/src/using_marker/src/using_markers.cpp

  貼入代碼,代碼中已經附加相關注釋

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>           //可視化 int main( int argc, char** argv ) { //初始化ROS,幷且創建一個ROS::Publisher 在話題visualization_marker上面 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()) { //實例化一個Marker  visualization_msgs::Marker marker; // Set the frame ID and timestamp. See the TF tutorials for information on these. // 設置frame ID 和 時間戳 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設置一個獨一無二的ID,一個marker接收到相同ns和id就會用新的信息代替舊的 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類型,初始化是立方體。將進行循環 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的位置 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的大小 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的顏色 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(); } }

  在CMakeList.txt文件中加入

add_executable(basic_shapes src/basic_shapes.cpp)
target_link_libraries(basic_shapes ${catkin_LIBRARIES})

 

 

3、進行rviz設置

(1)打開roscore

(2)運行編寫的發布器

rosrun using_marker basic_shapes

(3)重置rviz,運行rviz

rosmake rviz
rosrun rviz rviz

(4)在rviz中進行設置

 

4、rviz最終效果顯示:4個圖形進行連續的變換

 


免責聲明!

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



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