1. 前言

我们的自动驾驶采用镭神激光雷达,在使用Autoware的时候,需要对镭神激光雷达的底层驱动,进行一些改变以适配Autoware。

2. 修改

(1)首先修改lslidar_c32.launch文件:

 <launch>

   <node pkg="lslidar_c32_driver" type="lslidar_c32_driver_node" name="leishen_lslidar_c32_driver" output="screen" >
<param name="frame_id" value="laser_link"/>
<param name="device_ip" value="192.168.1.200"/>
<param name="device_port" value=""/>
</node> <node pkg="lslidar_c32_decoder" type="lslidar_c32_decoder_node" name="leishen_lslidar_c32_decoder" output="screen">
<!-- <param name="child_frame_id" value="world"/> -->
<param name="child_frame_id" value="velodyne"/>
<param name="point_num" value=""/>
<param name="channel_num" value=""/>
<param name="angle_disable_min" value=""/>
<param name="angle_disable_max" value=""/>
<param name="min_range" value="0.15"/>
<param name="max_range" value="500.0"/>
<param name="frequency" value="10.0"/>
<param name="publish_point_cloud" value="true"/>
<param name="publish_channels" value="false"/>
<remap from="lslidar_point_cloud" to="/points_raw" />
</node> <!--node name="rviz" pkg="rviz" type="rviz" args="-d $(find lslidar_c32_decoder)/launch/lslidar_c32.rviz" output="screen"/--> </launch>

这里贴出了修改后的launch文件,第10行修改为11行,21行去掉s。我们修改了frame_id,将之前的“world”改为“velodyne”。还有就是Autoware需要的点云topic为points_raw,而镭神的点云topic为point_raw,我们讲point_raw改为points_raw。

(2)修改时间戳

根据镭神的手册:“如果镭神接入GPS,那么会采用GPS时间,如果不接入GPS,雷达会采用内部时间,从0开始以微秒为单位计数,计数值赋值到主数据流时间戳的字节,计数到1小时在从0开始”。这样会导致在使用TF变换的时候时间戳出错,所以,需要修改时间戳,找到如下代码

 void LslidarC32Decoder::publishPointCloud() {
// pcl::PointCloud<pcl::PointXYZI>::Ptr point_cloud(
// new pcl::PointCloud<pcl::PointXYZI>());
VPointCloud::Ptr point_cloud(new VPointCloud()); //point_cloud->header.stamp =
//pcl_conversions::toPCL(sweep_data->header).stamp;
point_cloud->header.frame_id = child_frame_id;
point_cloud->height = ; for (size_t i = ; i < ; ++i) {
const lslidar_c32_msgs::LslidarC32Scan& scan = sweep_data->scans[i];
// The first and last point in each scan is ignored, which
// seems to be corrupted based on the received data.
// TODO: The two end points should be removed directly
// in the scans.
// point_time unit is sec
double timestamp = point_time;
//point_cloud->header.stamp = static_cast<uint64_t>(timestamp * 1e6);
point_cloud->header.stamp = ros::Time::now().toSec() * 1e6;
if (scan.points.size() == ) continue;
size_t j;
VPoint point;
for (j = ; j < scan.points.size()-; ++j) {
point.timestamp = timestamp - (scan.points.size()- - j)*0.00005; // time interval for each point is 50us
point.x = scan.points[j].x;
point.y = scan.points[j].y;
point.z = scan.points[j].z;
point.intensity = scan.points[j].intensity;
point.range = scan.points[j].distance;
point.h_angle = scan.points[j].azimuth;
point.v_angle = layer_altitude[i];
point.laserid = layer_id[i]; point_cloud->points.push_back(point);
++point_cloud->width;
} } // if(point_cloud->width > 2000)
{
point_cloud_pub.publish(point_cloud);
} return;
}

同样是贴上修改后的代码,将19行变为20行。

镭神激光雷达对于Autoware的适配的更多相关文章

  1. lego loam 跑镭神32线激光雷达

    师弟反应镭神32线激光雷达(32C)录制的数据包不能跑lego loam,这里就总结一下. 首先lego loam默认的接受的topic name是velodyne_points,点云的frame_i ...

  2. Lidar激光雷达市场

    Lidar激光雷达市场 近年来,激光雷达技术在飞速发展,从一开始的激光测距技术,逐步发展了激光测速.激光扫描成像.激光多普勒成像等技术,如今在无人驾驶.AGV.机器人等领域已相继出现激光雷达的身影. ...

  3. ROS中发布激光扫描消息

    激光雷达工作时会先在当前位置发出激光并接收反射光束,解析得到距离信息,而后激光发射器会转过一个角度分辨率对应的角度再次重复这个过程.限于物理及机械方面的限制,激光雷达通常会有一部分“盲区”.使用激光雷 ...

  4. SLAM方向国内有哪些优秀公司?

    计算机视觉life为读者整理了国内几十家涉及SLAM的优秀公司,涵盖自动驾驶.仓储机器人.服务机器人.无人机.AR.芯片相机等领域. 一 自动/辅助驾驶: 1.百度: 主要产品:自动驾驶软件 百度智能 ...

  5. 从零开始搭建Android组件化框架

    问题 在已经开发过几个项目的童鞋,如果这时需要重新开发一个新项目,是否需要自己重新搭建框架呢,还是从老项目中拷贝粘贴? 我们是否可以封装一个底层的lib库,这个底层的公共基础库 包括了一些第三方库(如 ...

  6. MVPArms MVP快速集成框架

    前言 今年的Android技术圈中MVP,Dagger2,Rxjava,Retrofit这些词汇非常火,随便打开一个技术论坛都充斥着大量的关于这些技术的文章,Github也充斥着各种以基于MVP+Re ...

  7. 倍加福r2000激光驱动安装及使用

    第一次完成激光的驱动安装和激光数据的采集,遇到很多问题,最后一一解决,现在记录下来,方便后面給机器人安装激光使用 激光的了解 (1)激光型号:OMD30M-R2000(30M表示30m) (2)参考手 ...

  8. Autoware 培训笔记 No. 4——寻迹

    1. 前言 好多初创公司公布出来的视频明显都是寻迹的效果,不是说寻迹不好,相反可以证明,寻迹是自动技术开始的第一步. 自动驾驶寻迹:一种能够自动按照给定的路线(通常是采用不同颜色或者其他信号标记来引导 ...

  9. fir.im Weekly - 关于 Log Guru 开源、Xcode 探索和 Android7.0 适配

    本期 fir.im Weekly 整理了最近的一些技术分享,包括关于 Log Guru 开源.Xcode 探索. Android7.0 适配等等 iOS/Android 相关的工具.源码分享和技术文章 ...

随机推荐

  1. 2018-12-25-win10-uwp-通知列表

    原文:2018-12-25-win10-uwp-通知列表 title author date CreateTime categories win10 uwp 通知列表 lindexi 2018-12- ...

  2. 练手WPF(三)——扫雷小游戏的简易实现(下)

    十四.响应鼠标点击事件    (1)设置对应坐标位置为相应的前景状态 /// <summary> /// 设置单元格图样 /// </summary> /// <para ...

  3. python基础(5):格式化输出、基本运算符、编码问题

    1. 格式化输出 现在有以下需求,让⽤户输入name, age, job,hobby 然后输出如下所⽰: ------------ info of Alex Li ----------- Name : ...

  4. Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用

    1.java中与数据库相关的时间类 java提供与mysql方便交互的三种数据类型: java.sql.Date java.sql.Time java.sql.Timestamp 它们都是继承java ...

  5. Windows Store可以下载安装Windows Terminal (Preview)

    Windows Terminal (Preview)已经可以在Windows Store下载安装. Windows Terminal (Preview)运行要求为: Windows 10 版本 183 ...

  6. 配置git远程连接gitlab

    1.本地git下载 2.配置全局的用户名和邮箱,命令分别为 git config --global user.name "username" git config --global ...

  7. .NET MVC5简介(二)

    MVCApplication---Application_Statr--RegisterRoutes--给RouteCollection添加规则,请求进到网站---X----请求地址被路由按照顺序匹配 ...

  8. Json互相序列化对象

    using System.ServiceModel; using System.ServiceModel.Web; using System.Runtime.Serialization.Json; u ...

  9. 【JavaWeb】JSTL标签库

    JSTL标签库 JSTL标准标签库: JSTL用于简化JSP开发,提高代码的可读性与可维护性: JSTL由SUN(Oracle)定义规范,由Apache Tomcat团队实现: 引用JSTL核心库 核 ...

  10. MYSQL第一课

    rm-rf /* 不能用 完全删除 数据库不能直接存储数据 table 表 DB 数据库 DBMS 数据库操作系统 SQL 结构化查询语言 语句不区分大小写,但字符串常量区区分大小写.建议命令大写. ...