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 版本代号
2、启动ROS1-RVIZ
2.1 启动核心服务:roscore
source /opt/ros/indigo/setup.bash
roscore &
2.2 启动RVIZ
启动rviz功能包中rviz程序
rosrun rviz rviz
一个空的窗口将会出现
3、简单用法
3.1 点击“Add”
3.2 选择类型
选择一个显示类型,比如网格:Grid
3.3 属性和状态
状态有四种情况:OK、Warning、Error、Disabled
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 <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);
# 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
5.4 配置
1)添加Marker
2)修改固定帧ID
将固定帧Fixed Frame修改为和程序中相同的:marker.header.frame_id = “my_frame”;
5.5 效果
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 效果
6.4 API使用手册
http://docs.ros.org/en/melodic/api/rviz_visual_tools/html/annotated.html