当前位置: 首页 > news >正文

【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
    /rosout
    
rosnode 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_node
      Subscribers:
        /parameter_events: rcl_interfaces/msg/ParameterEvent
      Publishers:
        /parameter_events: rcl_interfaces/msg/ParameterEvent
        /rosout: rcl_interfaces/msg/Log
        /scan: sensor_msgs/msg/LaserScan
      Service 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/SetParametersAtomically
      Service 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

相关文章:

  • WebRTC API
  • 大数据之Spark开发环境准备
  • 什么是Java运算?Java运算好学吗?
  • abaqus子程序vumat安装使用
  • 【Java项目】Minio的安装部署以及SpringBoot整合Minio
  • 架构设计第一讲:架构设计相关面试题汇总
  • LeetCode笔记:Biweekly Contest 101
  • 【python实操】马上毕业了,你还不懂什么是守护线程、线程、进程?(附12306抢票程序-源代码)
  • Springboot整合rabbitmq并实现消息可靠性和持久性
  • ChatGPT可以作为一个翻译器吗?
  • 一文学会 Spring MVC 表单标签
  • 【联邦学习(Federated Learning)】- 横向联邦学习与联邦平均FedAvg
  • 免费一键生成原创文章-原创文章批量生成
  • 众人围剿,GPT-5招惹了谁
  • Spring Boot 3.0系列【19】核心特性篇之自定义Starter启动器
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 4个实用的微服务测试策略
  • Android组件 - 收藏集 - 掘金
  • es的写入过程
  • Java读取Properties文件的六种方法
  • js面向对象
  • js算法-归并排序(merge_sort)
  • Laravel 实践之路: 数据库迁移与数据填充
  • nginx 配置多 域名 + 多 https
  • React as a UI Runtime(五、列表)
  • SAP云平台里Global Account和Sub Account的关系
  • select2 取值 遍历 设置默认值
  • VUE es6技巧写法(持续更新中~~~)
  • 第十八天-企业应用架构模式-基本模式
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • ​configparser --- 配置文件解析器​
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (javascript)再说document.body.scrollTop的使用问题
  • (算法二)滑动窗口
  • (转) RFS+AutoItLibrary测试web对话框
  • (转) 深度模型优化性能 调参
  • (转)visual stdio 书签功能介绍
  • (转载)Google Chrome调试JS
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET Standard 的管理策略
  • .NET 表达式计算:Expression Evaluator
  • .net和jar包windows服务部署
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • 。Net下Windows服务程序开发疑惑
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /var/spool/postfix/maildrop 下有大量文件
  • @RequestMapping用法详解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [Angularjs]ng-select和ng-options
  • [BJDCTF 2020]easy_md5
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C# WPF] 如何给控件添加边框(Border)?