Lidar系列-2、Ubuntu20.04中Velodyne VLP-16点云数据实时处理与ROS集成

保姆级教程:在Ubuntu 20.04上搞定Velodyne VLP-16雷达的ROS驱动与Rviz可视化(含网络配置避坑) 本文提供了一份详细的Velodyne VLP-16激光雷达在Ubuntu 20.04上的ROS驱动安装与Rviz可视化教程,涵盖硬件连接、网络配置、驱动编译及点云可视化等关键步骤。特别针对SLAM应用中常见的网络配置问题提供了避坑指南,帮助开发者快速搭建激光雷达开发环境。 阅读详情

1. 从硬件连接到ROS世界:你的VLP-16启动指南

嘿,朋友们,上次我们聊了怎么在Ubuntu 20.04上把Velodyne VLP-16给点亮并看到点云,算是迈出了第一步。今天咱们玩点更深入的,不仅要看到数据,还要学会怎么在ROS里实时地“玩转”这些数据,让它们能为你的机器人导航或者三维建模真正出力。我在这行摸爬滚打十来年,从最早的几线雷达到现在的高精度固态激光雷达都折腾过,深知第一步的硬件连接和基础配置如果没搞对,后面所有高级处理都是空中楼阁。所以,咱们先花点时间,把地基打牢。

很多人拿到VLP-16,接上电源和网线,照着教程配好IP,一运行roslaunch,诶,点云出来了,就觉得大功告成了。其实这才刚刚开始。真正的挑战在于,如何让这股源源不断的点云数据流,稳定、高效地进入你的ROS系统,并且能被你自定义的程序实时处理。这中间涉及到网络配置的稳定性、ROS驱动节点的参数调优、以及数据格式的深入理解。我见过不少项目,在实验室里跑得好好的,一上车或者一上机器人,点云就时有时无,或者延迟巨大,问题往往就出在这些基础的“稳”字上。

我们先快速回顾并深化一下硬件连接和网络配置。VLP-16通过一个接口盒连接,供电是标准的220V交流电,这个没得商量,你得确保电源稳定,尤其是在移动平台上,逆变器的质量很关键。数据线就是一根普通的网线,直连到你电脑的以太网口。这里有个我踩过的坑:千万别用电脑的WiFi和有线网同时连接不同的网络,这会导致路由表混乱,雷达数据包可能发不出去或者收不到。最好的做法是,连接雷达时,禁用WiFi,让有线网成为唯一的活跃网络接口。

网络配置是核心。上期说了要把电脑的IP设为192.168.1.77,子网掩码255.255.255.0。但为什么是这个网段?因为VLP-16的出厂默认IP是192.168.1.201。它们必须在同一个网段(192.168.1.x)才能通信。你可以打开浏览器访问http://192.168.1.201,如果能打开一个配置页面,恭喜你,硬件连接和网络通路基本没问题。这个页面里你可以改雷达的IP、端口、转速、回波模式等。我强烈建议,在第一次使用时,用网线直连电脑进行所有初始配置和测试,排除路由器或交换机的干扰。配置完成后,你可以选择恢复雷达的出厂设置,或者记录下你修改的IP,以后电脑的IP就要跟着改到对应网段。

2. 深入ROS驱动:不只是启动launch文件

好了,硬件通了,我们进入软件世界。上期我们通过apt-get安装了ros-noetic-velodyne包,然后从GitHub拉取了驱动包进行编译。这个过程看似简单,但里面有几个细节决定了你后续处理的灵活性和性能。

首先,apt-get安装的包和从GitHub克隆的包是什么关系?apt安装的是二进制包,它提供了核心的驱动节点和基本的launch文件,开箱即用,适合快速验证。而从GitHub克隆的velodyne仓库是源代码,它包含了所有的驱动、转换算法和工具源码。我个人的习惯是,以GitHub源码为主,因为你可以查看、修改甚至调试里面的代码。比如,你可以修改点云转换的算法,或者调整节点发布的队列长度来优化性能。编译时,记得用catkin_make -DCMAKE_BUILD_TYPE=Release来获得更好的运行时性能,尤其是你打算做实时处理的话。

启动雷达的经典命令是:

roslaunch velodyne_pointcloud VLP16_points.launch

这个launch文件干了啥?它其实启动了三个核心节点:

  1. velodyne_driver节点:负责与雷达硬件通信,通过以太网接收原始的雷达数据包,并发布为velodyne_packets这个Topic。
  2. velodyne_pointcloud节点:这是数据处理的核心。它订阅velodyne_packets,将原始的、编码的数据包解码,并根据雷达的校准文件(通常位于velodyne_pointcloud/params/目录下)转换成三维点云坐标。它最终发布出我们最常用的/velodyne_points这个Topic,消息类型是sensor_msgs/PointCloud2。
  3. static_transform_publisher节点:发布一个从velodyne坐标系到base_link(或你指定的其他坐标系)的静态坐标变换。这个对于后续将点云数据与其他传感器(如IMU、相机)的数据融合至关重要。

如果你想深入了解数据流,可以分别启动这些节点,并观察它们之间的Topic连接:

rosrun velodyne_driver velodyne_node _model:=VLP16 _ip_address:=192.168.1.201
rosrun velodyne_pointcloud cloud_node _calibration:=/path/to/your/calibration.yaml

通过rqt_graph工具,你可以清晰地看到这个数据流水线。理解这个架构,是你进行任何自定义实时处理的基础。

3. 实时点云数据流的订阅与初处理

现在,点云数据已经像自来水一样,通过/velodyne_points这个“水管”哗哗地流出来了。我们的任务就是接上自己的“水龙头”(ROS节点)来用这些水。在ROS中,我们通过编写一个订阅者(Subscriber) 节点来实现。

假设你已经在你的ROS工作空间(比如叫my_lidar_ws)里,创建一个新的功能包:

cd ~/my_lidar_ws/src
catkin_create_pkg my_pointcloud_processor roscpp sensor_msgs pcl_ros

这里我们引入了pcl_ros,它是ROS和点云库PCL之间的桥梁,是做点云处理的神器。

接下来,在src文件夹里创建一个C++文件,比如simple_processor.cpp。这个节点的核心任务就是订阅/velodyne_points。下面是一个最基础的框架:

#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>

// 定义一个回调函数,每当收到新的点云消息时,这个函数就会被自动调用
void cloudCallback(const sensor_msgs::PointCloud2ConstPtr& input_cloud) {
    // 1. 将ROS的PointCloud2消息转换为PCL格式的点云,方便处理
    pcl::PointCloud<pcl::PointXYZI>::Ptr pcl_cloud(new pcl::PointCloud<pcl::PointXYZI>);
    pcl::fromROSMsg(*input_cloud, *pcl_cloud);

    // 2. 实时处理逻辑从这里开始
    // 例如:打印当前帧的点云数量
    ROS_INFO_STREAM("Received cloud with " << pcl_cloud->size() << " points.");

    // 你可以在这里添加任何处理代码,比如滤波、分割、聚类等
    // ...
}

int main(int argc, char** argv) {
    // 初始化ROS节点,名字叫“simple_processor”
    ros::init(argc, argv, "simple_processor");
    ros::NodeHandle nh;

    // 创建一个订阅者,订阅名为“/velodyne_points”的Topic。
    // 消息类型是sensor_msgs::PointCloud2。
    // 队列大小设为10,意味着如果处理不过来,最多缓存10帧消息,旧的会被丢弃。
    ros::Subscriber sub = nh.subscribe<sensor_msgs::PointCloud2>("/velodyne_points", 10, cloudCallback);

    // ros::spin()会让程序进入循环,不断地检查是否有新消息到来,并调用对应的回调函数。
    // 这是一个阻塞调用,直到节点被关闭。
    ros::spin();

    return 0;
}

在CMakeLists.txt中添加编译规则,然后catkin_make编译。编译成功后,先启动雷达驱动roslaunch velodyne_pointcloud VLP16_points.launch,再运行你的节点rosrun my_pointcloud_processor simple_processor。如果一切正常,你会在终端里看到源源不断的点云数量输出。恭喜你,你已经成功接入了实时点云数据流! 这是所有高级应用的第一步。

4. 核心实战:在ROS节点中实现实时点云处理

光是接收数据还不够,我们要对数据做点事情。VLP-16每秒产生约30万点,实时处理的关键是高效和轻量。我们不能在一帧数据上花费超过一帧时间(比如,如果雷达10Hz,处理时间最好小于100ms)。下面我分享几个最常用、也最实用的实时处理模块,你可以像搭积木一样把它们组合到你的cloudCallback函数里。

第一个积木:直通滤波(PassThrough)。VLP-16是360度扫描,但你的机器人可能只关心前方一定范围内的区域。比如,我们只保留X轴(雷达前方)0到20米,Y轴(左右)-5到5米范围内的点,滤除太远和两侧的干扰。

#include <pcl/filters/passthrough.h>
void cloudCallback(...) {
    // ... 转换到PCL ...

    pcl::PointCloud<pcl::PointXYZI>::Ptr filtered_cloud(new pcl::PointCloud<pcl::PointXYZI>);
    pcl::PassThrough<pcl::PointXYZI> pass;
    pass.setInputCloud(pcl_cloud);
    pass.setFilterFieldName("x");
    pass.setFilterLimits(0.0, 20.0);
    pass.filter(*filtered_cloud);

    pass.setInputCloud(filtered_cloud);
    pass.setFilterFieldName("y");
    pass.setFilterLimits(-5.0, 5.0);
    pass.filter(*filtered_cloud);

    ROS_INFO_STREAM("After filtering: " << filtered_cloud->size() << " points.");
    // 后续处理基于filtered_cloud进行
}

第二个积木:体素网格滤波(VoxelGrid)。这是降采样的神器,也是保证实时性的关键。原始点云密度很高,但很多信息是冗余的。体素滤波将空间划分成小立方体(体素),每个体素内只保留一个点(比如重心点),能大幅减少点数,同时保持场景的整体形状。将体素边长设为0.1米,点数可能减少一个数量级,处理速度能快很多。

#include <pcl/filters/voxel_grid.h>
void cloudCallback(...) {
    // ... 直通滤波后 ...

    pcl::PointCloud<pcl::PointXYZI>::Ptr downsampled_cloud(new pcl::PointCloud<pcl::PointXYZI>);
    pcl::VoxelGrid<pcl::PointXYZI> voxel_filter;
    voxel_filter.setInputCloud(filtered_cloud);
    voxel_filter.setLeafSize(0.1f, 0.1f, 0.1f); // 设置体素边长,单位米
    voxel_filter.filter(*downsampled_cloud);
    ROS_INFO_STREAM("After downsampling: " << downsampled_cloud->size() << " points.");
}

第三个积木:地面分割(Ground Segmentation)。对于导航和避障,区分地面点和障碍物点是基本操作。一个简单有效的方法是使用平面模型拟合(RANSAC)。PCL提供了现成的工具。

#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/filters/extract_indices.h>
void cloudCallback(...) {
    // ... 降采样后 ...

    // 创建分割对象
    pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
    pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
    pcl::SACSegmentation<pcl::PointXYZI> seg;
    seg.setOptimizeCoefficients(true);
    seg.setModelType(pcl::SACMODEL_PLANE);
    seg.setMethodType(pcl::SAC_RANSAC);
    seg.setDistanceThreshold(0.15); // 距离阈值,单位米。小于此值的点被认为是平面内点。
    seg.setInputCloud(downsampled_cloud);
    seg.segment(*inliers, *coefficients);

    // 提取地面点云和非地面点云
    pcl::ExtractIndices<pcl::PointXYZI> extract;
    pcl::PointCloud<pcl::PointXYZI>::Ptr ground_cloud(new pcl::PointCloud<pcl::PointXYZI>);
    pcl::PointCloud<pcl::PointXYZI>::Ptr obstacle_cloud(new pcl::PointCloud<pcl::PointXYZI>);

    extract.setInputCloud(downsampled_cloud);
    extract.setIndices(inliers);
    extract.setNegative(false); // 提取地面点
    extract.filter(*ground_cloud);

    extract.setNegative(true); // 提取非地面点(障碍物)
    extract.filter(*obstacle_cloud);

    ROS_INFO_STREAM("Ground points: " << ground_cloud->size() << ", Obstacle points: " << obstacle_cloud->size());
}

把这三个“积木”按顺序放进回调函数,你就得到了一个实时处理流水线:原始点云 -> 截取感兴趣区域 -> 降采样提速 -> 分离地面与障碍物。处理后的obstacle_cloud就可以直接用于机器人避障或者目标检测了。

5. 处理结果的可视化与调试技巧

“眼见为实”在算法开发中太重要了。你不能只靠打印日志里的数字来调试点云处理算法。ROS自带的Rviz是可视化利器,但我们需要把中间处理结果也发布出来,方便对比调试。

在你的处理节点里,添加发布者(Publisher),将处理后的点云发布为新的Topic。例如,在节点的main函数里定义发布者,在回调函数里发布消息。

// 在main函数中,定义发布者
ros::Publisher pub_ground = nh.advertise<sensor_msgs::PointCloud2>("ground_points", 1);
ros::Publisher pub_obstacle = nh.advertise<sensor_msgs::PointCloud2>("obstacle_points", 1);

// 在cloudCallback函数末尾,将PCL点云转换回ROS消息并发布
sensor_msgs::PointCloud2 ground_msg, obstacle_msg;
pcl::toROSMsg(*ground_cloud, ground_msg);
pcl::toROSMsg(*obstacle_cloud, obstacle_msg);
// 非常重要!必须设置消息的header(时间戳和坐标系),否则Rviz无法显示
ground_msg.header = input_cloud->header;
obstacle_msg.header = input_cloud->header;

pub_ground.publish(ground_msg);
pub_obstacle.publish(obstacle_msg);

编译运行你的节点后,打开Rviz。点击Add,添加多个PointCloud2显示项。在Topic一栏,分别选择你发布的/ground_points和/obstacle_points。为了区分,你可以给它们设置不同的颜色。比如,地面点设成棕色,障碍物点设成蓝色。这样,你就能实时看到你的处理算法是否正确地分割了地面。

几个我常用的调试技巧:

  1. 变换坐标系:确保Rviz左上角Fixed Frame设置正确,通常设为velodyne或base_link。如果你的点云在Rviz里位置不对,很可能是坐标变换(TF)没发布或不对。可以用rosrun tf view_frames生成TF树图来检查。
  2. 调节点云大小:在Rviz的点云显示属性里,把Style改成Points,然后调大Size (m),比如调到0.05,这样点看起来更清楚。
  3. 录制与回放:当你想反复调试某一段数据时,用rosbag record命令录制相关的Topic(比如/velodyne_points, /ground_points)。然后用rosbag play回放,同时运行你的处理节点,这样就能用同一段数据反复测试,排除数据流本身波动的影响。
  4. 性能监控:使用rostopic hz /velodyne_points查看雷达实际发布频率。用rqt的Runtime Monitor插件查看你节点的CPU占用率。如果处理耗时太长导致频率下降,你需要优化代码,或者进一步加大体素滤波的尺度。

6. 面向机器人导航与三维建模的集成应用

经过前面几步,我们有了干净、实时的障碍物点云。现在来看看怎么把这些点云用到具体的场景里。

对于机器人导航(SLAM与避障):

  1. 建图(SLAM):你可以将处理后的/velodyne_points(或降采样后的点云)直接提供给激光SLAM算法,如cartographer、LOAM或hdl_graph_slam。这些算法会利用连续的点云帧来估计机器人自身的运动(里程计),并同时构建环境地图。关键点:确保点云的时间戳准确,并且提供准确的IMU数据(如果有)进行融合,可以大幅提升建图精度,尤其是在快速旋转时。
  2. 实时避障:对于obstacle_cloud,一个简单的做法是进行欧几里得聚类。使用PCL的EuclideanClusterExtraction将距离近的点聚成一团,每一团就可以视为一个障碍物。然后计算每个障碍物簇的边界框(Bounding Box)中心位置和大小。机器人导航系统(如move_base)就可以根据这些边界框的位置和大小,在全局路径规划中生成避让路径,或者在局部规划中直接产生绕行或停止指令。

对于三维环境建模:

  1. 多帧点云拼接:机器人移动时,每一帧点云都是从不同视角采集的。你需要一个**点云配准(Registration)**算法,比如经典的ICP(Iterative Closest Point)或其变种,将连续帧点云对齐,拼接成一个完整的、稠密的三维模型。PCL里提供了pcl::IterativeClosestPoint类。注意:直接使用原始点云进行ICP计算量巨大,务必先进行降采样。同时,依赖一个较好的里程计(可以从IMU或轮式编码器获得)提供初始位姿估计,能极大提高ICP的成功率和速度。
  2. 生成网格或高程图:对于大规模室外场景,生成三角网格可能计算量太大。一个更实用的方法是生成2.5维高程图(Elevation Map)。将世界划分为网格,每个网格存储其内部所有点中的最高高度(或平均高度)。这个高程图可以直接用于路径规划(寻找可通行区域)。你可以使用grid_map这个ROS工具包来方便地创建和可视化这种地图。

在实际集成中,我建议采用ROS多节点的架构。一个节点专门负责雷达驱动和基础滤波(节点A),一个节点负责核心算法如地面分割和聚类(节点B),SLAM或建模作为另一个节点(节点C)。它们之间通过Topic通信。这样模块清晰,一个节点崩溃了不影响其他节点,也方便单独调试和升级。记得在launch文件中统一管理这些节点的启动和参数配置。

7. 性能调优与避坑经验谈

最后,分享一些让系统跑得更稳、更快的实战经验。这些坑大部分我都亲自踩过。

网络与驱动层优化:

  • 驱动参数:在启动velodyne_driver节点的launch文件里,可以设置参数max_range和min_range,直接在驱动层过滤掉过远和过近的无效点,减轻后续处理压力。
  • UDP缓冲区:如果发现点云有断断续续的情况,可能是操作系统网络缓冲区满了。可以尝试在终端中增加UDP缓冲区大小:sudo sysctl -w net.core.rmem_max=26214400。这个改动是临时的,永久生效需要修改/etc/sysctl.conf文件。
  • 独占网络:再次强调,用于连接雷达的网口最好不要设置默认网关,也不要被NetworkManager自动管理,避免IP地址意外变化。可以配置为静态IP后,在NetworkManager里将该连接设为“手动”。

处理算法性能调优:

  • 降采样是王道:在实时系统中,VoxelGrid滤波的leaf size是你最重要的性能调节旋钮。从0.05米开始尝试,根据你的应用对精度的要求逐步调大。通常0.1米到0.2米在导航应用中是可以接受的。
  • 善用PCL的索引:像ExtractIndices、ConditionalRemoval这类滤波器,直接操作点云索引,比用copyPointCloud之类的函数复制整个点云要快得多。
  • 关注回调函数耗时:在回调函数开头用ros::Time::now()记录时间,在结尾计算耗时并打印出来。确保它小于你的点云发布周期(例如,对于10Hz雷达,应小于100ms)。如果超时,考虑将耗时的操作(如某些复杂的聚类算法)放到独立的线程中,或者降低处理频率(每N帧处理一帧)。

坐标系与TF的坑:

  • TF树要完整:确保你的机器人有完整的TF树,从base_link到velodyne的静态变换(static_transform_publisher)必须持续发布。可以用rosrun tf tf_echo base_link velodyne来检查变换是否存在和正确。
  • 时间同步:如果你有其他传感器(如相机),需要和激光雷达数据做融合,务必关注时间戳同步问题。可以使用message_filters包中的ApproximateTime或ExactTime策略来同步不同Topic的消息。

资源管理:

  • 内存泄漏:在C++节点中,频繁new对象而不注意释放,或者在回调函数里创建大对象,容易导致内存缓慢增长。尽量使用智能指针(Ptr),并在可能的情况下复用对象。
  • 录制数据包:录制rosbag时,如果录制所有Topic(-a),数据量会暴涨。最好只录制你关心的Topic,例如rosbag record /velodyne_points /odom。对于长期测试,考虑使用rosbag的--split选项按大小或时间分割文件。

折腾激光雷达就像拼装一台精密的机械表,每一个环节——硬件连接、网络配置、驱动理解、算法实现、可视化调试——都必须严丝合缝。从看到一堆杂乱的点到让机器人理解它周围的世界,这个过程充满了挑战,但当你看到机器人依靠你写的代码,灵巧地绕过一个个障碍时,那种成就感是无与伦比的。希望这些从实战中总结出的步骤和经验,能帮你少走些弯路,更快地让Velodyne VLP-16在你的项目中发挥出真正的威力。如果在实际操作中遇到具体问题,多看看ROS社区和雷达驱动包的issue页面,很多坑已经有人踩过并给出了解决方案。

【SLAM】之Velodyne VLP16 激光雷达使用 Velodyne VLP16型激光雷达横向视角360°,纵向视角30°,如下图: 实验机器是ubuntu 14.04 x64, ROS版本Indigo,目前ROS支持的Velodyne型号是:HDL-64E,HDL-32E,VLP-16。官方tutorial是以32E为例,但我们手头是VLP-16,下面以VLP-16为例介绍驱动过程: 1. 安装驱动: sudo apt-get in 阅读详情

相关推荐

Lidar系列-1、ubuntu20.04下使用velodyne VLP-16

这里参考后续我将在别的博客中更新更多的使用过程。

m0_47695952的博客 1406

[学习lidar ]velodyne VLP16 配置 点云数据bag获取

点云数据获取——velodyne VLP16 配置 环境:ubuntu16.04,VLP-16激光雷达,kinetic包 Velodyne VLP16 Velodyne VLP16型激光雷达横向视角360°,纵向视角30°,如下图: 1.连接电脑和velodyne a) velodyne上电 (听到转动的响声) b) 通过以太网网口连接电脑 c) 关闭电脑wifi 2.新增网络,I...

开源节流 3215

SLAM之VeloyneLiDAR-VLP-16激光雷达从安装到地图创建

我使用的系统是: Ubuntu 16.04 x64,ros-kinetic,Python2.7。(其它系统版本也相仿) 硬件是: VeloyneLiDAR VLP-16 安装Point Cloud Library(PCL),Ubuntu下PCL官方提供安装方式是: sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pc

weixin_38745922的博客 1万+

Ubuntu安装ROS、显示VLP16线激光雷达、录制并回放

本文使用Ubuntu20.04,在双系统、虚拟机上均已实现操作

weixin_69667614的博客 1135

Lidar系列-2、在Ubuntu20.04中配置Velodyne VLP-16的ROS驱动与实时点云处理

本文详细介绍了在Ubuntu20.04系统中配置Velodyne VLP-16激光雷达的ROS驱动与实时点云处理的全过程。从硬件连接、网络配置到ROS环境搭建、驱动编译,再到点云数据可视化和实时处理技巧,提供了完整的操作指南和常见问题解决方案。特别针对VLP-16的性能优化和点云分割等进阶应用给出了实用建议,帮助开发者高效完成激光雷达系统集成。

weixin_30342209的博客 447

veloview读二维雷达数据_【SLAM】之Velodyne VLP16 激光雷达使用

http://blog.csdn.net/littlethunder/article/details/519206812016-07-15 20:48 9890人阅读 分类:SLAM(3)版权声明:本文为博主原创文章,未经博主允许不得转载。Velodyne VLP16型激光雷达横向视角360°,纵向视角30°,如下图:实验机器是ubuntu 14.04 x64, ROS版本Indigo,目前ROS...

weixin_42499332的博客 815

Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定(未完成)

Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定一、实现所用设备二、安装依赖、配环境2.1 依赖2.2 下载 Lidar + IMU 标定工具:lidar_align ,编译2.3 出现问题如下2.3 改写IMU三、录制数据 注意:制作某个算法所需 rosbag 前,先在已提供包下查看你所需数据类型等信息 rosbag info ***.bag 一、实现所用设备 系统环境:Ubuntu 18.04 激光雷达:Velodyne VLP-16 Imu : 3DM-G

weixin_48924581的博客 1700

Velodyne-16在Windows 及 Linux ubuntu1604+kinetic下调试

下载客户端软件 https://www.paraview.org/VeloView

NouriXiiX的博客 1470

ubuntu安装 veloview_VLP-16 激光雷达 ubuntu

在Ubuntu系统,有两种方式进行数据显示:ROSVeloView在Windows系统,可用VeloView进行数据显示。Ubuntu 14.04ROS indigo1,安装驱动sudo apt-get install ros--velodyne2. 配置网络,连接到激光雷达:通过附带的适配器为LIDAR供电将LIDAR连接到计算机上的以太网端口。目前,请禁用计算机上的WiFi连接。打开网络连接,...

weixin_39592789的博客 720

Velodyne VLP-16点云数据实战:用ROS+RViz实现动态障碍物可视化(附录制技巧)

本文详细介绍了如何在Ubuntu 20.04系统下使用Velodyne VLP-16激光雷达(Lidar)通过ROS和RViz实现动态障碍物的实时可视化。内容包括环境准备、硬件连接、ROS驱动安装、实时可视化配置以及数据录制优化技巧,为自动驾驶和机器人开发者提供了一套完整的点云数据处理方案。

weixin_30576827的博客 448

速腾16线激光雷达(RS-16)在ubuntu18.04系统下跑SC-A-LOAM算法

说明: 简要记录一下速腾16线激光雷达即RS-16在ubuntu18.04系统下跑SC-A-LOAM算法的过程,因为SC-A-LOAM算法源码不支持RS雷达的数据,大致思想就是先将rs雷达发布的激光数据转换为velodyne类型的数据,考虑到接下来还要基于RS-16实时运行SC-A-LOAM算法,这里提前将RS_SDK驱动安装好。 1 搭建SC-A-LOAM算法运行环境 首先需要在电脑上搭建SC-A-LOAM算法的运行环境,见文章《ubuntu18.04搭建SC-A-LOAM环境并运行》 本文所使用的系统架

超爱吃小蛋糕的66的博客 2373

Lidar系列-2、编写ros程序订阅velodyne VLP-16发布的点云话题

上面程序就能接收到发布的/velodyne_points话题,并将点云从ros的sensor_msgs::PointCloud2格式转换为pcl中的点云格式(这里自定义为了PointXYZIRT),方便后续进一步的处理。或者是ros bag录制的数据,如果里面的lidar点云话题也是/velodyne_points。则这里通过ros::Subscriber来接收这个点云话题的数据,方便后续加以处理。发布lidar采集的点云数据后,话题名是:/velodyne_points。

m0_47695952的博客 502

【Matlab 六自由度机器人】基于改进型D-H参数的运动学建模与蒙特卡洛工作空间分析

本文详细介绍了如何使用改进型D-H参数法为六自由度机器人建立运动学模型,并利用Matlab Robotics Toolbox实现正运动学计算与可视化。通过蒙特卡洛法对机器人工作空间进行分析,生成三维点云图以直观展示其可达范围,为机器人选型与任务规划提供关键依据。

weixin_29040367的博客 438

slam之velodyne VLP16的使用

转自 http://blog.csdn.net/littlethunder/article/details/51920681 Velodyne VLP16型激光雷达横向视角360°,纵向视角30°,如下图: 实验机器是ubuntu 14.04 x64, ROS版本Indigo,目前ROS支持的Velodyne型号是:HDL-64E,HDL-32E,VLP-16。官方tut

jing5702的博客 5958

新买的USB无线网卡插上没反应?保姆级排查指南:从设备管理器到网络列表

本文提供USB无线网卡无法识别的全流程排查手册,涵盖硬件检测、驱动管理和网络配置三大维度。重点解析设备管理器中的设备状态诊断和驱动解决方案,特别适用于Realtek芯片的无线网卡(如RTL8188GU、RTL8812BU等),帮助用户快速解决网卡插上无反应的问题。

weixin_29876033的博客 499

告别Vivado自带编辑器!手把手教你用Sublime Text 4 + Icarus Verilog搭建FPGA开发环境(Windows 10/11)

本文详细介绍如何在Windows 10/11系统下,使用Sublime Text 4和Icarus Verilog搭建高效的FPGA开发环境,替代Vivado自带编辑器。通过配置语法检查、代码高亮和智能补全等功能,提升Verilog开发效率,实现专业级工作流。

weixin_30684743的博客 427

ubuntu16.04 VLP-16 ROS Kinetic 的配置

0.请保证系统基础相关依赖项已安装 1.安装ROS Kinetic http://wiki.ros.org/kinetic 2.安装驱动 pcap–用于将pcap的原始文件转化成ROS结构,若不安装可能会无法处理数据,没有点云。 sudo apt-get install libpcap-dev 安装驱动 sudo apt-get install ros-kinetic-velodyne 注意这...

q13847312902的博客 2932

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 553

SLAM Velodyne VLP16激光雷达使用

转自 http://blog.csdn.net/littlethunder/article/details/51920681 Velodyne VLP16型激光雷达横向视角360°,纵向视角30°,如下图: 实验机器是ubuntu 14.04 x64, ROS版本Indigo,目前ROS支持的Velodyne型号是:HDL-64E,HDL-32E,VLP-16。官方tutorial

lybhit的博客 5086

Playwright Test Agent 实战:零代码基础也能写自动化测试「喂饭教程」

本文详细介绍了Playwright智能体的三大核心组件:规划智能体设计测试策略,生成智能体转换用例为代码,修复智能体自动修正失败测试。教程包含环境配置步骤、智能体使用方法和实战案例,展示了如何通过自然语言指令快速创建稳定的测试脚本。相比传统方法,Playwright智能体大幅降低测试自动化门槛,提升效率并减少维护成本,使测试人员无需编码基础也能实现高质量的自动化测试。

blues_C的博客 2017

【openwrt-21.02】T750 openwrt 双系统说明及切换方法

高度集成的 T750 平台大幅减少组件数量,为产品设计者提供更小的尺寸和更低的功耗。T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。3. preloader 加载并启动 A 系统,若 A 系统的任一启动阶段加载失败,preloader 将重新加载并启动 A 系统 3 次,若 3 次均失败,则自动切换至 B 系统,加载并启动 B 系统。A/B 系统切换流程如下。

wgl307293845的博客 1413

ubuntu16.04 loam_velodyne运行时问题及相应解决 3D LIDAR SLAM

1.catkin_make时,出现:virtual memory exhausted:无法分配内存首次运行时,出现这个错误。重启电脑,并只保留编译器的情况下再次编译,不会再出现这个问题。2.roslaunch时,出现VLP16_points相关的.....neither...or... 的问题。安装velodyne_driver驱动。命令为:sudo apt-get install ros-kin...

Luemmm的博客 3260

材料力学数值方法:细观力学模拟:材料断裂与损伤的细观模拟_2024-08-05_16-13-13.Tex

弹性理论是材料力学的一个重要分支,主要研究在外部载荷作用下,材料如何发生弹性变形以及如何恢复原状。这一理论基于连续介质力学,将材料视为由无数连续点组成的连续体,每个点都遵循一定的力学规律。弹性理论的核心是胡克定律,它表明在弹性范围内,应力与应变成正比关系。损伤变量ddd通常定义为0到1之间的值,其中d0d=0d0表示材料未损伤,d1d=1d1表示材料完全损伤。损伤变量可以基于不同的物理量定义,如裂纹密度、孔隙率或微观缺陷的分布。

937

使用Neor mini和Velodyne Lidar仿真+lego_loam建图

123

weixin_52535875的博客 1486

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

weixin_42412049的博客 2584

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

雷达+ IMU标定 运行LIO-SAM ---(2)

Lidar + IMU

chrishuimin的博客 3356

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 华为交换机运维必备:10类关键display命令实战解析
下一篇: 彻底卸载WPS Office的5种高效方法及疑难解答
lambda
博客等级 码龄23年 49粉丝 1303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值