【ROS】RViz使用详解

1、安装

1.1 ROS1-RVIZ

RVIZ的ROS1各个ubuntu版本中的安装命令
ubuntu14.04:

sudo apt install ros-indigo-rviz

ubuntu16.04:

sudo apt install ros-kinetic-rviz

ubuntu18.04:

sudo apt install ros-melodic-rviz

ubuntu20.04:

sudo apt install ros-noetic-rviz

1.2 ROS2-RVIZ

RVIZ的ROS2版本在安装桌面版desktop或者desktop-full时会一起安装
ubuntu18.04:

sudo apt install ros-dashing-desktop

ubuntu20.04:

sudo apt install ros-foxy-desktop

ubuntu22.04:

sudo apt install ros-humble-desktop

1.3 版本代号

【ROS】RViz使用详解_第1张图片

2、启动ROS1-RVIZ

2.1 启动核心服务:roscore

source /opt/ros/indigo/setup.bash
roscore &

2.2 启动RVIZ

启动rviz功能包中rviz程序

rosrun rviz rviz

一个空的窗口将会出现
【ROS】RViz使用详解_第2张图片

3、简单用法

3.1 点击“Add”

【ROS】RViz使用详解_第3张图片

3.2 选择类型

选择一个显示类型,比如网格:Grid
【ROS】RViz使用详解_第4张图片

3.3 属性和状态

状态有四种情况:OK、Warning、Error、Disabled
【ROS】RViz使用详解_第5张图片

4、内置的显示类型

名称 描述 对应的消息
Axes 显示坐标轴
Effort 显示机器人每个旋转关节的力 sensor_msgs/JointStates
Camera 用于显示相机的图像 sensor_msgs/Image, sensor_msgs/CameraInfo
Grid 显示网格
Grid Cells 在网格中绘制单元格,比如导航中障碍物 nav_msgs/GridCells
Image 显示图像 sensor_msgs/Image
InteractiveMarker 显示来自一个或多个 Interactive Marker 服务器的 3D 对象,并可以与它们进行鼠标交互 visualization_msgs/InteractiveMarker
Laser Scan 显示来自激光扫描的数据,具有不同的渲染模式、累积等选项 sensor_msgs/LaserScan
Map 显示地图 nav_msgs/OccupancyGrid
Markers 通过主题标记任意形状 visualization_msgs/Marker, visualization_msgs/MarkerArray
Path 显示来自导航的路径 nav_msgs/Path
Point 绘制点 geometry_msgs/PointStamped
Pose 将姿势绘制为箭头或轴 geometry_msgs/PoseStamped
Pose Array 绘制箭头“云”,绘制姿势数组中的每个姿势 geometry_msgs/PoseArray
Point Cloud(2) 绘制点云 sensor_msgs/PointCloud, sensor_msgs/PointCloud2
Polygon 绘制多边形 geometry_msgs/Polygon
Odometry 里程计 nav_msgs/Odometry
Range 显示表示来自声纳或红外距离传感器的距离测量值的圆锥体 sensor_msgs/Range
RobotModel 显示机器人的视觉
TF 显示tf变换层次结构
Wrench 将扭矩绘制为箭头(力)和箭头 + 圆(扭矩) geometry_msgs/WrenchStamped
Twist 将扭曲的型变绘制为箭头(线性)和箭头 + 圆(角度) geometry_msgs/TwistStamped
Oculus 将 RViz 场景渲染到 Oculus 耳机

5、绘制基本形状

5.1 创建功能包

mkdir -p rviz/src
cd rviz/src
catkin_create_pkg using_markers roscpp visualization_msgs

5.2 编辑源码

vi basic_shapes.cpp
#include 
#include 

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);

  # a)设置初始形状为立方体
  uint32_t shape = visualization_msgs::Marker::CUBE;

  while (ros::ok())
  {
    visualization_msgs::Marker marker;
    # b)设置帧 ID 和时间戳
    marker.header.frame_id = "my_frame";
    marker.header.stamp = ros::Time::now();

    # c)设置名称空间和 ID,要确保在系统中是唯一的
    marker.ns = "basic_shapes";
    marker.id = 0;

    # d)设置标记类型。 初始是立方体CUBE,然后是球体SPHERE、箭头ARROW 和圆柱体CYLINDER,四者之间循环
    marker.type = shape;

    # e)设置标记动作: ADD、DELETE、DELETEALL
    marker.action = visualization_msgs::Marker::ADD;

    # f)设置标记的姿势。 这是相对于标题中指定的帧/时间的完整 6DOF 姿势
    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;

    # g)设置标记的比例——这里的 1x1x1 表示边长 1m
    marker.scale.x = 1.0;
    marker.scale.y = 1.0;
    marker.scale.z = 1.0;

    # h)设置颜色——确保将 alpha 设置为非零值!
    marker.color.r = 0.0f;
    marker.color.g = 1.0f;
    marker.color.b = 0.0f;
    marker.color.a = 1.0;

    marker.lifetime = ros::Duration();

    # i)发布标记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);

    # j)在不同形状之间循环显示
    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();
  }
}

5.3 编译

编译时,注意要在工程根目录编译

cd ~/ros/rviz/
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

5.4 运行

1)终端1运行发布者

rosrun using_markers basic_shapes

2)终端2运行rviz

rosrun rviz rviz

【ROS】RViz使用详解_第6张图片

5.4 配置

1)添加Marker
【ROS】RViz使用详解_第7张图片
2)修改固定帧ID
将固定帧Fixed Frame修改为和程序中相同的:marker.header.frame_id = “my_frame”;
【ROS】RViz使用详解_第8张图片

5.5 效果

【ROS】RViz使用详解_第9张图片

6、使用rviz_visual_tools绘制基本形状

6.1 安装绘制基本形状的封装库

源码:https://github.com/PickNikRobotics/rviz_visual_tools
安装命令:(本人ROS版本为ubuntu20.04 ROS1 noetic,需要更加自己的环境来修改安装命令)

sudo apt install ros-noetic-rviz-visual-tools

6.2 测试

终端1中启动RVIZ

roslaunch rviz_visual_tools demo_rviz.launch

终端2中启动测试demo

roslaunch rviz_visual_tools demo.launch

6.3 效果

【ROS】RViz使用详解_第10张图片

6.4 API使用手册

http://docs.ros.org/en/melodic/api/rviz_visual_tools/html/annotated.html

你可能感兴趣的:(ROS,自动驾驶,机器人,人工智能)