【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测
介绍NVISTAR 的二维DTOF激光雷达 ROC 300在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS1驱动和ROS2的驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX1里已经安装了ROS1版本:Melodic,ROS2版本:eloquent。
大家好,我是虎哥,从厂家那申请到了不止科技NVISTAR ROC 300雷达样品,其实有一段时间了,周末花点功夫,测试接入试用一下。这一次我也第一次尝试用ROS2 eloquent环境测试激光雷达,由于自己也不是很熟悉,边学边测试,这里也是总结一下自己的简单测试经验,分享给大家。
关于测试硬件EHub_tx1_tx2_E100载板请查看:EdgeBox_EHub_tx1_tx2_E100 开发板评测_机器人虎哥的博客-CSDN博客
目录
一、参数指标:
1.1 主要参数指标
二、资料及主要组件说明
2.1 开箱实物
2.2 网络转接板
三、NVISTAR 点云客户端(windows版本)使用(micro-USB)
3.1 获取工具软件
3.2 雷达接入WIN电脑
3.3 工具软件链接雷达
3.4 网络转接板参数配置
四、ROS1环境显示点云(网口)
4.1 建立工作空间
4.2 拷贝代码
4.3 编译源码包
4.4 将雷达通过网口接入E100系统
4.5 修改测试代码环境为网口模式
4.6 重新编译和启动
4.7 启动RVIZ查看点云
五、ROS2-eloquent驱动测试(网口)
5.1 建立工作空间目录
5.2 拷贝代码
5.3 解决依赖关系(Resolve dependencies)
5.4 使用colcon 编译工程
5.5 修改代码,使用网口模式
5.6 运行测试节点,查看点云
六、总结
一、参数指标:
ROC 300 是不止技术推出的单线激光雷达产品。该雷达使用脉冲飞行时间法(Pulsed ToF)进行距离测量,其内部结构采用转镜式设计,即通过高速旋转的反射镜面将测距模块发射的不可见红外激光偏转到不同的角度,从而实现对同一水平面 300°范围内环境轮廓的扫描测量。ROC 300 每秒可输出 20K 点云数据,同时可满足客户最大 50米测距需求;采用 905nm 红外激光,配合自研信号处理算法,整机防尘防水达到 IP65,满足户外应用场景需求。

与同类产品相比,ROC 300 具有如下特点:
-
远距离,高精度。由于采用脉冲测距原理并着力优化光电设计,ROC 300 对相同反射率的目标具有更远的测量距离,且全量程精度都可以保证在+/-3cm 以内,非常适于大空间场景使用。
-
高转速,低噪声。采用反射镜式旋转扫描,转动部件仅为一面极轻的反射镜片,所以可以达到 30HZ 的高转速,最高可扩展到 50HZ,且维持极低的噪声,人耳几乎听不到。
-
可靠性高,通配性强。转镜式设计使雷达内部的运动部件降至最少,提高了使用寿命并大大降低了机械振动对运行的影响;此外 ROC 300 采用 micro USB 接口设计,可灵活切换 UART 和以太网口。
-
体积小,重量轻。雷达主体高度不超过 7.5 厘米且底座边长仅为 5 厘米,便于在空间受限的场合安装。
1.1 主要参数指标
-
激光波长:905nm,class I
-
探测范围:0.1m~50m
-
重复精度:3cm
-
水平视场角:300°
-
扫描频率:10HZ~30HZ
-
水平角分辨率:0.18°(10HZ)~0.54°(30HZ)
-
抗强光:>80000LX
-
电源供电:5V/500mA
-
功耗:<2.5w
-
外形尺寸:50mm * 50mm * 75mm
-
重量:150g
-
防护等级:IP65
-
接口:micro-USB、以太网口、RS232、NPN
-
工作环境温度:-10℃~55℃
-
存储环境温度:-30℃~75℃
二、资料及主要组件说明
官网下载中心:下载中心-深圳市不止技术有限公司-深圳市不止技术有限公司


2.1 开箱实物
此次我主要测试其网口模块,所以让厂家配置了USB转网口的转接模块,雷达本省是micro-USB接口。
2.2 网络转接板



三、NVISTAR 点云客户端(windows版本)使用(micro-USB)
3.1 获取工具软件
下载解压后,获得文件和使用说明:
软件是免安装版本,直接打开即可:
备注:我们测试的是网口模式
3.2 雷达接入WIN电脑
将自己电脑的IP设置到1网段
可以ping通网络转接板

3.3 工具软件链接雷达

配置正确,即可以看到点云数据。
3.4 网络转接板参数配置
这个雷达其实网口是使用转接板,将串口转为了网口,所以修改IP之类的操作,其实是修改网口转接模块的IP,所以需要一个专用工具:

首先读取参数:

修改IP:

修改IP后,需要重启转接板

可以Ping通,新的IP已经生效。
四、ROS1环境显示点云(网口)
包获取,从官网下载页面可以找到。
4.1 建立工作空间
mkdir -p ~/SensorWS/Nvistar_ws/src
cd ~/SensorWS/Nvistar_ws/
catkin_make
source devel/setup.bash
4.2 拷贝代码
cd ~/SensorWS/Nvistar_ws/src
#将官网地址的代码包放置到这个目录解压

4.3 编译源码包
cd ~/SensorWS/Nvistar_ws
catkin_make --pkg nvilidar_ros
编译完成。
4.4 将雷达通过网口接入E100系统
先确保板子链接网口对应IP也是1网段,之前雷达已经确认是1网段了。

其次就是在板子上可以ping通雷达的IP:192.168.1.100

雷达和板子之前网络链接没有问题。
4.5 修改测试代码环境为网口模式
1、修改launch 文件
/home/nvidia/Nvistar_ws/src/nvilidar_ros/launch/lidar.launch 脚本内容
/home/nvidia/SensorWS/Nvistar_ws/src/nvilidar_ros/launch
vim lidar.launch

<launch><node name="nvilidar_node" pkg="nvilidar_ros" type="nvilidar_node" output="screen" respawn="false" ><param name="serialport_name" type="string" value="/dev/nvilidar"/><param name="serialport_baud" type="int" value="512000"/><param name="ip_addr" type="string" value="192.168.1.200"/><param name="lidar_udp_port" type="int" value="8100"/><param name="config_udp_port" type="int" value="8200"/><param name="frame_id" type="string" value="laser_frame"/><param name="resolution_fixed" type="bool" value="true"/><param name="auto_reconnect" type="bool" value="true"/><param name="reversion" type="bool" value="false"/><param name="inverted" type="bool" value="false"/><param name="angle_min" type="double" value="-180" /><param name="angle_max" type="double" value="180" /><param name="range_min" type="double" value="0.001" /><param name="range_max" type="double" value="64.0" /><param name="aim_speed" type="double" value="10.0"/><param name="sampling_rate" type="int" value="10"/><param name="sensitive" type="bool" value="false"/><param name="tailing_level" type="int" value="6"/><param name="angle_offset_change_flag" type="bool" value="false"/><param name="angle_offset" type="double" value="0.0" /><param name="apd_change_flag" type="bool" value="false"/><param name="apd_value" type="int" value="500"/><param name="ignore_array_string" type="string" value="" /><param name="filter_jump_enable" type="bool" value="true" /><param name="filter_jump_value_min" type="int" value="3" /><param name="filter_jump_value_max" type="int" value="50" />
</node><node pkg="tf" type="static_transform_publisher" name="base_link_to_laser"args="0.19 0.0 0.2 0.06 0.0 0.0 /base_footprint /laser_frame 40" />
</launch>
可根据你实际的硬件环境和需要,修改网口,扫描角度等参数。

2、修改nvilidar_node.cpp 文件
原始:
修改后:

4.6 重新编译和启动
上面我们改了原代码文件配置,所以需要重新编译工程
cd ~/SensorWS/Nvistar_ws
catkin_make --pkg nvilidar_ros
启动:
cd ~/SensorWS/Nvistar_ws
source devel/setup.bash
roslaunch nvilidar_ros lidar.launch
打开一个新的终端,可以查询节点信息
rosnode list--------------------------------------------------------------------------------/base_link_to_laser/nvilidar_node/rosoutrosnode info /nvilidar_node -------------------------------------------------------------------------------- Node [/nvilidar_node] Publications: * /rosout [rosgraph_msgs/Log]* /scan [sensor_msgs/LaserScan] Subscriptions: None Services: * /nvilidar_node/get_loggers* /nvilidar_node/set_logger_level contacting node http://nvidia-desktop:43281/ ... Pid: 10996 Connections:* topic: /rosout* to: /rosout* direction: outbound (38203 - 127.0.0.1:44442) [11]* transport: TCPROS
4.7 启动RVIZ查看点云
打开终端,启动雷达节点
cd ~/SensorWS/Nvistar_ws
source devel/setup.bash
roslaunch nvilidar_ros lidar.launch
打开新终端,启动rviz,在nomachine 终端桌面登录
rosrun rviz rviz
此时还没有任何信息,官方给我们提供好了rviz的配置文件,我们可以不用配置,直接打开使用。



五、ROS2-eloquent驱动测试(网口)
包获取,从官网下载页面可以找到。
5.1 建立工作空间目录
source /opt/ros/eloquent/setup.bash
mkdir -p ~/SensorWS/Nvistar_Ros2ws/src
cd ~/SensorWS/Nvistar_Ros2ws/
5.2 拷贝代码
cd ~/SensorWS/Nvistar_Ros2ws/src
#将官网地址的代码包放置到这个目录解压

5.3 解决依赖关系(Resolve dependencies)
在构建工作区之前,您需要解决包依赖关系。可能已经拥有所有依赖项,如果不希望构建在长时间等待后因为缺少依赖项而失败,最好做法是在每次检查依赖项。
cd ~/SensorWS/Nvistar_Ros2ws/
rosdep install -i --from-path src --rosdistro eloquent -y
如果出现如下错误,继续使用之前安装的时候提示使用的小鱼一键安装。
解决错误
wget http://fishros.com/install -O fishros && . fishros

完成后继续之前的建立依赖的命令,就可以成功了。备注:我由于同时安装了ROS1和ROS2,所以后面才会多选一步。
继续建立依赖
cd ~/SensorWS/Nvistar_Ros2ws/
rosdep install -i --from-path src --rosdistro eloquent -y

5.4 使用colcon 编译工程
cd ~/SensorWS/Nvistar_Ros2ws/
#编译
colcon build
报警先不管,可以编译通过。
#colcon build还可以带一些参数,这个做个分享:--packages-up-to 只编译指定包,其所有依赖项,但不构建整个工作区(节省时间) --symlink-install避免每次调整python脚本时都需要重新构建 --event-handlers console_direct+ 显示生成时的控制台输出(否则可以在“log”目录中找到)
编译完,记得生效,类似ROS1中的source
#执行覆盖
. install/local_setup.bash
5.5 修改代码,使用网口模式
cd ~/SensorWS/Nvistar_Ros2ws/src/nvilidar_ros2/params
vim nvilidar.yaml
原始:

修改后:
修改nvilidar_ros2_node.cpp 文件
修改后:
因为修改了代码,记得重新编译
cd ~/SensorWS/Nvistar_Ros2ws/
#编译
colcon build

有报警,可以不用管。
5.6 运行测试节点,查看点云
cd ~/SensorWS/Nvistar_Ros2ws/
#执行覆盖
. install/local_setup.bash
#启动脚本文件
ros2 launch nvilidar_ros2 nvilidar_launch.py
可以看到,程序已经起来,并且开始扫描
我们可以打开一个新的窗口,查看一下节点和话题这些基本信息
cd ~/SensorWS/Nvistar_Ros2ws/
#执行覆盖
. install/local_setup.bash
ros2 node list --------------------------------------------------------------------------------/launch_ros_15285/nvilidar_ros2_node/static_tf_pub_laser ros2 node info /nvilidar_ros2_node --------------------------------------------------------------------------------/nvilidar_ros2_nodeSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEventPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/scan: sensor_msgs/msg/LaserScanService Servers:/nvilidar_ros2_node/describe_parameters: rcl_interfaces/srv/DescribeParameters/nvilidar_ros2_node/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/nvilidar_ros2_node/get_parameters: rcl_interfaces/srv/GetParameters/nvilidar_ros2_node/list_parameters: rcl_interfaces/srv/ListParameters/nvilidar_ros2_node/set_parameters: rcl_interfaces/srv/SetParameters/nvilidar_ros2_node/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomicallyService Clients: Action Servers: Action Clients:
查看点云,我们可以直接用官方已经提供好的脚本文件,直接运行节点加打开查看电云,会简单很多。记得关闭之前已经打开的节点。
nomachine 的终端中运行如下命令
cd ~/SensorWS/Nvistar_Ros2ws/
#执行覆盖
. install/local_setup.bash
#启动脚本文件
ros2 launch nvilidar_ros2 nvilidar_launch_view.py

六、总结
这是我第一次完整的用ROS2 eloquent 测试一个硬件设备,所以再测试过程中,其实我自己也是翻看了很多之前的记录,发现还是一个实际操作的完成流程,更能加深自己对ROS2的理解,熟悉其操作和常用指令。
ROC 300 其ROS2和ROS1的驱动支持还是很不错了,这个必须给个好评。其次就是雷达,我支持在测试环境驱动起来,准备跑一个晚上,看看其稳定性。
这个雷达的性价比,还是很适合做教育级和商业级的机器人产品的,轻巧,尤其是USB接口的设计,可以看出来,设计师还是为实际稳定可靠使用画了心思的,给个好评。
纠错,疑问,交流: 911946883@qq.com
相关文章:
【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测
介绍NVISTAR 的二维DTOF激光雷达 ROC 300在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS1驱动和ROS2的驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX1里已经安装了ROS1版本:Mel…...
C语言函数大全--d开头的函数
C语言函数大全 本篇介绍C语言函数大全–d开头的函数 1. detectgraph 1.1 函数说明 函数声明函数功能void detectgraph(int *graphdriver, int *graphmode);通过检测硬件确定图形驱动程序和模式 1.2 演示示例 #include <graphics.h> #include <stdlib.h> #incl…...
基于springboot实现福聚苑社区团购演示【项目源码】
基于springboot实现福聚苑社区团购演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&#…...
动静态库的制作
文章目录:什么是程序库?动态链接和静态链接动静态库的认识静态库的创建与使用创建使用动态库的创建与使用创建使用什么是程序库? 程序库:一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应…...
QMS-云质-质量软件-客诉,为什么应该用两段式来处理
-云质QMS原创文章,转载请注明来源- 客户满意度是决定企业是否能够基业长青的关键因素之一。 如果客诉处理的不好,会极大影响客户的满意程度。 通常处理客诉分为两个阶段。 第一个阶段是快反遏制,想方设法快速答复和解决客户提出的问题&…...
JS:关于邮箱的正则表达式及规则
常用正则表达式—邮箱(Email) 要验证一个字符串是否为邮箱的话,首先要了解邮箱账号的格式。我尝试过在网上找出一个标准的格式,但是很遗憾我没有找到。我也尝试使用RFC标准来判断邮箱的格式,但是也没有结果。网上些博…...
两句话,ChatGPT帮我写一个打飞机的游戏
大家好,我是全村的希望今天的主题是让 chatGPT 来帮我们写一个打飞机的游戏记得我刚学 Python 的时候,看的那本很经典的入门书《Python 编程:从入门到实践》,里面就有小项目就是教你编写一个打飞机的游戏我那时候是对着书一个一个…...
计算机图形学14:三维图形的投影变换
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、三维图形的投…...
【ChatGPT4】王老师零基础《NLP》(自然语言处理)第二课
我的已经在起、点开了书《王老师带我成为救世主》,那个更新及时 (1)---------------------------------------------------------------------------------------- 我: 1我/喜欢/吃/苹果,因为/它/们/很/好吃。 2 Th…...
设计模式之中介者模式在前端的应用
文章目录中介者模式在前端的应用场景1.实现组件之间的松耦合2. 实现异步请求的协同3. 实现事件驱动的编程模型4. 实现复杂交互的协调总结中介者模式在前端的应用场景 中介者模式是一种常见的设计模式,它可以将对象之间的通信集中处理,从而提高系统的可维…...
2023年还能入行程序员吗?工作3年以上的黑马老学员怎么说?
很多人觉得,毕业3年,不过是毕业第1年的重复,键盘Ctrl、C和V键磨损更严重了。妥妥属于光涨年龄,不涨经验;只涨体重,不涨工资…… 他们不理解,为什么同样的起跑线,有人发展神速&#…...
接收机的噪声来源与噪声分析
噪声分类 射频接收机中的噪声主要可以分为两类:内部噪声和外部噪声。 内部噪声 内部噪声主要来自于接收机内部的放大器、混频器、本振等元件所产生的噪声。根据不同的产生机制,内部噪声可以分为以下几类: a. 电感噪声:由于电感…...
Android FrameWork——SystemServer
Android系统在启动的时候有两个非常重要的进程,一个是Zygote,另一个就是system_server。SystemServer是系统用来启动service的入口,比如我们常用的AMS,WMS,PMS等等都是由它创建的。 system_server进程的启动 system_…...
婴儿推车ASTMF883测试
1.cpc认证是总称,cpc认证下边有很多的标准,常见的有ASTM F963(铅含量)、CPSIA(邻苯8P)、ASTM F833(婴儿车)等; 2.婴儿车ASTM认证是什么 2019年8月2日,美国消…...
射频接收机概述
接收机架构 射频接收机架构是指电子设备中用于接收无线电信号的部分。它通常由前置放大器、中频放大器、混频器、局部振荡器和带通滤波器等组成。以下是一个基本的射频接收机架构: 前置放大器:前置放大器的作用是放大接收天线接收到的微弱无线电信号&am…...
实验三Numpy知识点总结
熟悉和使用NumPy模块 import numpy as np一、完成下列数组操作与运算。 (1)创建2行4列的数组arr_a,数组中的元素为0至7,要求用arange()函数创建。 arr_anp.arange(8) arr_a.resize(2,4) print(arr_a)[[0 1 2 3][4 5 6 7]]&…...
Code Review时学到的技巧之isAssignableFrom
🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年4月1日 …...
IP协议以及相关技术
这里写目录标题前言正文IP基本认识IP的作用IP和MAC的关系IP地址的基础知识IP地址定义IP地址分类(IPv4)无分类IP地址CIDR子网掩码IPv6基础知识相关技术DNS域名解析ARPDHCPNATICMPIGMP总结参考连接前言 大家好,我是练习两年半的Java练习生,今天我们来讲一…...
SpringBoot 项目使用 Sa-Token 完成登录认证
一、设计思路 对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验: 如果校验通过,则:正常返回数据。如果校验未通过,则:抛出异…...
javaScript 蓝桥杯----梅楼封的一天
目录一、介绍二、目标1.函数入参要求:2.出参要求:三、输出示例1.示例一2.示例二3.示例三4.示例四5.示例五四、待完善代码五、知识点1.正则表达式2.split方法3.test方法4.match方法5.matchAll方法6.slice方法7.replace() 方法8.repeat方法六、答案一、介绍…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
