rviz_marker_绘制直线_矩形框
ROS RVIZ Marker可视化 直线 矩形框
前言:因为最近在研究车道线的拟合,为了直观进行数据的可视化分析,故记录一下 ROS RVIZ中使用marker进行可视化直线和矩形框
可视化直线:
可视化矩形框:
注意:
#使用ros rviz marker需要注意的事项
1.line.lifetime 为marker的维持时间, ros::Duration(); 永远不会被删除
2.需要指定 line.header.frame_id
3.颜色使用,本问增加了colorMap,以支持不同直线显示不同颜色
4.line.id 不能重复,重复Rviz会出现冲突
5.一个line能连接相近的两个点,在绘制矩形时,可先预想几个点的相连
参考链接: https://blog.csdn.net/Fang_cheng_/article/details/116454690
完整代码:
FILE: marker_visual.cpp
#include <iostream>
#include <vector>
#include <string>
#include<iomanip>//必要头文件#include <visualization_msgs/Marker.h>
#include <visualization_msgs/MarkerArray.h>#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <sensor_msgs/PointCloud2.h>#include <Eigen/Core>
#include <Eigen/Geometry>using namespace std ;int makerIdCount = 0 ;
visualization_msgs::MarkerArray lane ;
visualization_msgs::MarkerArray box ;
ros::Publisher marker_pub_lane ;
ros::Publisher marker_pub_box ;vector<vector<int>> colorMap = vector<vector<int>> (11, vector<int>(3)) = {{160,82,45}, {255,140,0},{0,255,0}, {220,20,60},{245,255,250}, {0,0,255},{255,0,255},{255,20,147},{64,224,208} , {255,255,0},{255,0,0 },
};void visualLaneLine(visualization_msgs::MarkerArray &lineMakerArray, vector<Eigen::Vector3d> pointsVec, int id, bool colorUsed, double timeDelay){ visualization_msgs::Marker line ;line.lifetime = ros::Duration(timeDelay,0); // ros::Duration(); 永远不会被删除line.type = visualization_msgs::Marker::LINE_STRIP; // 形状为线line.action = visualization_msgs::Marker::ADD;line.header.frame_id = "camera_init" ;line.ns = "lane";line.scale.x = 0.80;if(colorUsed){ // true 使用彩色 ,false 单调色line.color.r = colorMap[id%10][0]; // 10种颜色选择line.color.g = colorMap[id%10][1]; line.color.b = colorMap[id%10][2]; }else{line.color.r = 160 ; line.color.g = 82 ;line.color.b = 45 ; // 红色}line.color.a = 1.0f ;line.pose.orientation.w = 1;line.id = id ; // 线不同line ID号不能重复for (int i = 0; i < pointsVec.size() ; i ++){geometry_msgs::Point p;p.x = pointsVec[i].x() ;p.y = pointsVec[i].y() ;p.z = pointsVec[i].z() ;line.points.push_back(p);}lineMakerArray.markers.push_back(line);makerIdCount ++ ;
}int main(int argc, char **argv)
{ros::init(argc, argv, "marker visual");ros::NodeHandle n;marker_pub_lane = n.advertise<visualization_msgs::MarkerArray>("visualization_marker_lane_vec", 10);marker_pub_box = n.advertise<visualization_msgs::MarkerArray>("visualization_marker_box", 10);// 生成点 max :(10 20 10) min(-10 -20 -10)Eigen::Vector3d max(10, 20, 10);Eigen::Vector3d min(-10,-20,-10);Eigen::Vector3d p0_b(min.x(), max.y(), max.z());Eigen::Vector3d p1_b(min.x(), min.y(), max.z());Eigen::Vector3d p2_b(min.x(), min.y(), min.z());Eigen::Vector3d p3_b(min.x(), max.y(), min.z());Eigen::Vector3d p4_b(max.x(), max.y(), min.z());Eigen::Vector3d p5_b(max.x(), min.y(), min.z());Eigen::Vector3d p6_b(max.x(), min.y(), max.z());Eigen::Vector3d p7_b(max.x(), max.y(), max.z());// 直线点vector<vector<Eigen::Vector3d>> linesVec(3) ; //存储三条线linesVec[0].push_back(p0_b);linesVec[0].push_back(p1_b);linesVec[1].push_back(p4_b);linesVec[1].push_back(p5_b);linesVec[2].push_back(p6_b);linesVec[2].push_back(p7_b);// 矩形点vector<Eigen::Vector3d> boxPointsVec ;boxPointsVec.push_back(p0_b);boxPointsVec.push_back(p3_b);boxPointsVec.push_back(p2_b);boxPointsVec.push_back(p5_b);boxPointsVec.push_back(p6_b);boxPointsVec.push_back(p1_b); boxPointsVec.push_back(p0_b);boxPointsVec.push_back(p7_b);boxPointsVec.push_back(p4_b);boxPointsVec.push_back(p3_b);boxPointsVec.push_back(p4_b);boxPointsVec.push_back(p5_b);boxPointsVec.push_back(p6_b);boxPointsVec.push_back(p7_b); ros::Rate loop_rate(10);// 可视化直线 // for(int i = 0; i < linesVec.size(); i++ ){// visualLaneLine(lane, linesVec[i], makerIdCount, true, 1000); // }// 可视化boxvisualLaneLine(box,boxPointsVec, makerIdCount, false, 1000); while(ros::ok()){marker_pub_lane.publish(lane);marker_pub_box.publish(box);loop_rate.sleep();}return 0 ;
}
FILE: marker_visual.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch><node pkg="marker_visual" name="marker_visual" type="marker_visual" output="screen"></node>
</launch>
Rviz参考:
参考博客:
Rviz可视化工具Marker示例:目标检测画矩形框
edited by kaho 2022.12.20
rviz_marker_绘制直线_矩形框相关推荐
- Qt绘制直线、矩形、圆
Qt绘制直线.矩形.圆 新建一个Qt Widgets Application工程 添加头文件 #include <QPainter> 添加paintEvent函数,代码如下: void M ...
- iOS 画线 绘制直线、矩形、三角形
转载:http://bravoo.diandian.com/ 在UIView中绘制直线.矩形.三角形 直线 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...
- R统计绘图-corrplot热图绘制细节调整2(更改变量可视化顺序、非相关性热图绘制、添加矩形框等)
上一篇文章推送的是怎样调整corrplot热图的可视化参数,以修改字符和图例位置,数据可视化形式和字符小大和颜色等这篇是一个补充部分,记录怎样修改参数以变量排序方式和突出部分数据.本流程还是使用R统计 ...
- 结构建模设计——Solidworks软件之草图绘制基础图形工具总结(绘制直线、矩形、圆、槽、圆弧、圆角等)
[系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...
- 项目记录一:用Python识别图片中指定颜色标记块并绘制其最小矩形框以及坐标点
记录准研一小白第一次动手实践课题组师姐安排的任务,非常感谢CSDN前辈们所撰写的博客对我的帮助. 一.项目背景 如图所示,有这样一张现场勘测的图片,要实现绘制出图中三个黄色标记块的最小矩形框以及左上角 ...
- cavans图形绘制(直线、矩形、原型、贝塞尔曲线、渐变背景)
一.绘制直线 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF- ...
- 计算机图形学笔记1--新建vs项目及绘制直线、矩形、椭圆
项目创建--VS2019选择MFC应用,更改以下配置 :1.单个文档 2.MFC规范 绘制基础直线.矩形 void Ctest01View::OnLButtonUp(UINT nFlags, CP ...
- java 绘制长方形_Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)...
控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...
- python如何绘制直线_成对绘制直线
我正在做一个网络项目,在这个项目中,我需要在成对的点(节点)之间绘制线(边).目前我正在使用matplotlib.pyplot但问题是pyplot.plot绘图(x,y)从(x[0],y[0])开始, ...
最新文章
- centos7 virtualbox使用internal network 内网模式
- 2017,SAP向云看齐
- Linux关闭开关机动画,centos7删除开机动画及修改启动菜单
- 信息系统项目管理师:第9章:项目人力资源管理-历年真题
- DataTables怎样取消黑白行
- Falsy Bouncer(第二种解决方式)
- ios开发之 -- 自动轮播图创建
- linux gtest安装
- 北京电子科技学院计算机怎么样,北京电子科技学院计算机技术怎么样
- Fast dev didn't succeed, trying another location
- senet-运行和结构篇
- anaconda 清华镜像及对应下载
- oracle的监听服务详解
- ★★iPhone越狱后必装软件和一些心得教程,送给广大的小白们,希望你们能从小白变成“小黑”★★
- 【Android智能硬件开发】【010】安卓读写串口
- Tcl 语言 ——表达式篇
- 二分查找和三分求单峰函数极值
- Mybatis下传入时间条件,查询慢的优化方法
- 基于Android studio有声听书系统 java音乐播放器系统
- Azuki:缔造NFT元宇宙品牌