ROS中进行大陆ARS408雷达点云的可视化及二次开发(一)


  毫米波雷达在恶劣环境的鲁棒性要远强于激光雷达,同时还能够返回物体的相对速度等信息,同时其价格较低,具有相当高的性价比。实验室目前需要在一些恶劣环境下进行雷达辅助相机检测,实现多模态的融合。第一步,就是需要进行相机和雷达的联合标定工作,因此首先需要对雷达在ubuntu下进行可视化与接口开发,近一周来完成了雷达的相关工作,将工作总结如下:

一 硬件准备

  1. 毫米波雷达:本文选用大陆ARS408雷达,其性能参数如下:
    在这里插入图片描述
图1.大陆雷达参数表

在这里插入图片描述

图2.大陆毫米波雷达

  总结来说,ARS404-21 是大陆 40X 毫米波雷达传感器系列中入门产品,可以适用于不同的应用场景,具有低成本,坚固耐用 高性能和操作可靠安全性高等特征,测试距离到达170米。

二 驱动准备

安装环境
名称版本
ROS版本ROS Melodic
驱动器版本peak-linux-driver-8.12.0
ubuntu系统ubuntu 18.04

  大陆雷达支持CAN通信,我们电脑是无法直接进行CAN的通信的,因此就需要借助CAN转USB的驱动器,读取雷达的点云数据。
  经过筛选,我们使用了毫米波雷达官方推荐的peak-driver驱动器进行数据的转换(peak-driver的驱动程序下载),下面进行安装,注意,要选择自己需要的版本号,这里使用peak-linux-driver-8.12.0版本,建议跟着我的来

2.1 首先安装依赖:
$ sudo apt-get install flex
$ sudo apt-get install libpopt-dev
$ sudo apt-get install can-utils
#然后将刚才下载好的驱动程序解压
$ tar -zxvf peak-linux-driver-8.1.tar.gz
$ cd peak-linux-driver-8.1
$ make clean
$ make net=NO_NETDEV_SUPPORT
$ sudo make install
2.2 检验是否正确安装
$ sudo modprobe pcan
$ cat /proc/pcan

在这里插入图片描述
结果应该是这样的,那就对了。

2.3 启动雷达并检查数据
$ sudo ifconifg can0 up #启动雷达can0接口,此时回车后,驱动器开始启动并接受信息
$ candump can0 #显示接受的雷达信息

在这里插入图片描述
 经过以上步骤,验证完成,说明安装成功,准备下一步软件环境搭建工作。

三 ROS工作环境搭建

 经过以上步骤,下面需要对数据进行抽象化,也就是利用ROS的RVIZ进行数据的显示,以确定到底雷达信息的可视化信息确定雷达是否满足我的要求,包括最远距离、角度分辨率等参数。

3.1 安装socket can依赖

github链接

$ git clone https://github.com/Project-MANAS/socket_can.git
$ cd socket_can
$ mkdir build
$ cmake ..
$ sudo make install #安装成功
3.2 安装ars_40X开发包

github链接

  1. 创建ROS工作环境
      创建当前的工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone https://github.com/Project-MANAS/ars_40X.git
$ cd ..
$ catkin_make

由此,完成对ars_40X的编译,可以启动ros的功能包进行可视化工作。
2. 启动可视化功能包

#进入到catkin_ws工作空间
$ source ./devel/setup.bash #更新ROS的工作空间集合
$ roslaunch ars_40X ars_40X.launch visualize:=true obstacle_array:=true

四 测试

在这里插入图片描述

毫米波雷达点云可视化

  可以看到,点云数据清晰地显示在界面中。

五 总结

  1. 首先,在最后一步的安装过程中,遇到了一些问题,但是都通过google解决了,主要是缺少costmap_converter的问题,可以网上搜索安装一下。
  2. 其次,最后的catkin_make过程中,出现了socket_can.hpp找不到的问题,通过将源码中库的引用<>改成“”可以解决包找不到的问题,如下图 #include “socket_can/socket_can.hpp”。
    在这里插入图片描述
  3. 存在的问题:没有对原来的雷达点云进行滤波,存在较多的杂点,下一步工作将在雷达点云滤波工作展开,会进行填坑的。

二次开发

https://blog.csdn.net/weixin_43253464/article/details/121769827

参考链接:
https://zhuanlan.zhihu.com/p/406235662
https://www.peak-system.com/PCAN-USB.199.0.html?L=1
https://blog.csdn.net/ost_csdn/article/details/104962144

  • 32
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 87
    评论
ROS,可以使用RViz来可视化点云数据。但是,如果您需要更高级的可视化功能,可以使用VTK库来创建自定义的点云可视化程序。下面是一个基本的VTK点云可视化程序: ```cpp #include <vtkSmartPointer.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkPLYReader.h> #include <vtkPoints.h> #include <vtkPointData.h> #include <vtkVertexGlyphFilter.h> int main(int argc, char* argv[]) { // 初始化ROS节点 ros::init(argc, argv, "ros_vtk_point_cloud_visualization"); ros::NodeHandle nh; // 读取点云数据 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile<pcl::PointXYZ> ("input.pcd", *cloud); // 创建VTK点云数据 vtkSmartPointer<vtkPoints> vtkPoints = vtkSmartPointer<vtkPoints>::New(); for (size_t i = 0; i < cloud->points.size(); i++) { vtkPoints->InsertNextPoint(cloud->points[i].x, cloud->points[i].y, cloud->points[i].z); } // 创建VTK点云数据的Actor vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New(); polyData->SetPoints(vtkPoints); vtkSmartPointer<vtkVertexGlyphFilter> vertexGlyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New(); vertexGlyphFilter->SetInputData(polyData); vertexGlyphFilter->Update(); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(vertexGlyphFilter->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); // 创建渲染器和渲染窗口 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New(); renWin->AddRenderer(renderer); renWin->SetSize(640, 480); // 创建交互器 vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renWin); // 开始渲染 interactor->Start(); return 0; } ``` 在上面的程序,我们首先使用ROS读取了点云数据,然后创建了一个VTK的点云数据,并将其渲染到一个窗口。请注意,上面的程序只是一个基本的模板,您可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

naca yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值