0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用myAGV、Jetson Nano主板和3D摄像头,实现了RTAB-Map的三维建图功能!

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2024-08-28 10:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言
在现代机器人技术中,高精度的环境感知与建图是实现自主导航的关键。本文将展示如何使用myAGV Jetson Nano移动平台搭载Jetson Nano BO1主板,结合RTAB-Map和3D相机,实现更加立体和细致的环境建图。myAGV Jetson Nano具备SLAM雷达导航功能,Jetson Nano提供了强大的计算能力,适合处理复杂的SLAM任务。通过引入3D摄像头,我们能够将摄像头采集的深度信息融入到地图中,使其不仅具有平面数据,还包含了丰富的立体信息。在本文中,我们将详细介绍这一过程中使用的技术,以及解决实施中遇到的问题。

背景与需求分析
在机器人自主导航中,精确的环境感知和地图构建至关重要。传统的二维SLAM技术虽然能够实现实时定位和建图,但在复杂的三维空间中,往往无法充分描述环境的立体结构。

为了解决这一问题,我们选择了myAGV Jetson Nano,该产品具备高性能的SLAM雷达导航能力和强大的计算处理能力,非常适合复杂环境下的自主任务。然而,二维SLAM在描述立体空间时仍显不足。因此,我们引入了3D摄像头,通过捕捉环境的深度信息,生成更加立体和细致的三维地图,提升机器人的环境感知能力。

为了实现这一目标,我们采用了RTAB-Map作为建图工具,它能够处理RGB-D数据并支持实时的三维建图与定位。通过将RTAB-Map与3D摄像头结合在这款产品上使用,我们希望在复杂环境中实现高精度的三维SLAM建图,满足实际应用的需求。

产品
myAGV Jetson Nano
myAGV Jetson Nano 2023采用NVIDIA® Jetson Nano B01 4GB核心主板,搭配大象机器人专为机器人定制的Ubuntu Mate 20.04 操作系统,流畅易用;myAGV 2023具备2D建图与导航、3D建图与导航、图形化编程、可视化软件、ROS仿真、手柄键盘控制等多钟功能,是科研教育、个人创客的首选。

wKgaombOiFyACNN3AAVWAqMYlVM966.png

Astra Pro2
Astra Pro2深度相机是基于3D 结构光成像技术获取物体的深度图像,同时利用彩色相机采集物体的彩色图像,适用于0.6m-6m 距离进行3D物品和空间扫描的智能产品,可实现测量距离内的物体深度数据测量。作为Astra系列的迭代升级产品,Astra Pro 2配置MX6000自研深度感知芯片,最高支持1280x1024深度图像,自带多分辨率下深度图像与彩色图像空间对齐功能,可广泛应用于机器人避障、低精度3D测量、体感交互等场景。具备RGB-D功能,能够捕捉彩色图像和深度信息,用于生成三维地图。

wKgZombOiJ2AUghNAAHDx2Tdy6M453.png

所有所需要的依赖的功能包,在myAGV所安装的额ubuntu 20.04系统中已经按照好,我们可以直接使用ROS当中的rtabmap以及astra pro2的功能包。

rtabmap 实现
myagv 已经打包好了一些基本的功能我们直接使用,在这个过程中分析一下他们的功能。

启动程序
首先得启动里程记和雷达。

roslaunch myagv_odometry myagv_active.launch

myagv_active.launch启动文件负责初始化和启动与机器人运动估计和传感器数据获取相关的核心组件。

< launch >

   < node pkg="myagv_odometry" type="myagv_odometry_node" name="myagv_odometry_node" output="screen" / >
   < param name = "robot_description" textfile = "$(find myagv_urdf)/urdf/myAGV.urdf"/ > 
   
   < node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" / >
   < node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" / >
   < !--node name="base2lodom_frame" pkg="tf" type="static_transform_publisher" args="0 0 0 0 0 0 1 /odom /base_footprint 50"/-- >
   < node name="base2camera_link" pkg="tf" type="static_transform_publisher" args="0.13 0 0.131 0 0 0 /base_footprint /camera_link 50"/ >
   < node name="base2imu_link" pkg="tf" type="static_transform_publisher" args="0 0 0 0 3.14159 3.14159 /base_footprint /imu 50"/ >
       
   < node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf" output="screen" >
     < param name="output_frame" value="odom"/ >
     < param name="base_footprint_frame" value="base_footprint"/ >
     < param name="freq" value="30.0"/ >
     < param name="sensor_timeout" value="2.0"/ >
     < param name="odom_used" value="true"/ >
     < param name="odom_data" value="odom"/ >
     < param name="imu_used" value="true"/ >
     < param name="vo_used" value="false"/ >
< !--      < remap from="imu_data" to="imu" / >-->
   < /node >
 
   < include file="$(find ydlidar_ros_driver)/launch/X2.launch" / >
< /launch >

myagv_odometry_node:启动里程计节点,用于计算机器人在环境中的位置和姿态。

robot_description参数:加载机器人的URDF文件(统一机器人描述格式),描述机器人的物理结构。

joint_state_publisher和robot_state_publisher:发布机器人的关节状态和机器人的整体状态信息。

static_transform_publisher:定义固定的坐标变换,用于将机器人基座和传感器(如相机、IMU)之间的相对位置和姿态联系起来。

robot_pose_ekf:使用扩展卡尔曼滤波器(EKF)融合里程计、IMU等传感器数据,提供更精确的机器人位姿估计。

ydlidar_ros_driver:启动激光雷达(LiDAR)驱动节点,用于获取环境的激光扫描数据。

然后是启动astra pro2 深度相机

roslaunch orbbec_camera astra_pro2.launch

它设置了必要的ROS节点来处理相机的RGB-D数据流,包括初始化相机、设置图像和深度处理的各种参数,并将相机数据发布到ROS主题,以供其他节点(如SLAM或物体检测)使用。

里面已经默认设置好了一些必要的参数,如果需要修改的话请按照官方文档提供的sdk进行修改:3D视觉AI开放平台

例如一下参数:

/camera/color/camera_info : 彩色相机信息(CameraInfo)话题。
/camera/color/image_raw: 彩色数据流图像话题。
/camera/depth/camera_info: 深度数据流图像话题。
/camera/depth/image_raw: 红外数据流图像话题。
/camera/depth/points : 点云话题,仅当 enable_point_cloud 为 true 时才可用`.
/camera/depth_registered/points: 彩色点云话题,仅当 enable_colored_point_cloud 为 true 时才可用。
/camera/ir/camera_info: 红外相机信息(CameraInfo)话题。
/camera/ir/image_raw: 红外数据流图像话题。

紧接着启动rtabmap启动文件建图就可以开始建图了。

roslaunch myagv_navigation rtabmap_mapping.launch
< launch >
 < group ns="rtabmap" >
 
   < !-- Choose visualization -- >
 < arg name="rtabmap_viz"             default="true" / >

   < !-- Use RGBD synchronization -- >
   < !-- Here is a general example using a standalone nodelet, 
        but it is recommended to attach this nodelet to nodelet 
        manager of the camera to avoid topic serialization -- >
   < node pkg="nodelet" type="nodelet" name="rgbd_sync" args="standalone rtabmap_sync/rgbd_sync" output="screen" >
     < remap from="rgb/image"       to="/camera/color/image_raw"/ >
     < remap from="depth/image"     to="/camera/depth/image_raw"/ >
     < remap from="rgb/camera_info" to="/camera/color/camera_info"/ >
     < remap from="rgbd_image"      to="rgbd_image"/ > < !-- output -- >
     
     < !-- Should be true for not synchronized camera topics 
          (e.g., false for kinectv2, zed, realsense, true for xtion, kinect360)-- >
     < param name="approx_sync"       value="true"/ > 
   < /node >

   < node name="rtabmap" pkg="rtabmap_slam" type="rtabmap" output="screen" args="--delete_db_on_start" >
         < param name="frame_id" type="string" value="base_footprint"/ >
         < param name="subscribe_rgb" type="bool" value="false"/ >
         < param name="subscribe_depth" type="bool" value="false"/ >
         < param name="subscribe_rgbd" type="bool" value="true"/ >
         < param name="subscribe_scan" type="bool" value="true"/ >

         < remap from="odom" to="/odom"/ >
         < remap from="scan" to="/scan"/ >
         < remap from="rgbd_image" to="rgbd_image"/ >

         < param name="queue_size" type="int" value="100"/ >

         < !-- RTAB-Map's parameters -- >
         < param name="RGBD/NeighborLinkRefining" type="string" value="true"/ >
         < param name="RGBD/ProximityBySpace"     type="string" value="true"/ >
         < param name="RGBD/AngularUpdate"        type="string" value="0.01"/ >
         < param name="RGBD/LinearUpdate"         type="string" value="0.01"/ >
         < param name="RGBD/OptimizeFromGraphEnd" type="string" value="false"/ >
         < param name="Grid/FromDepth"            type="string" value="false"/ > < !-- occupancy grid from lidar -- >
         < param name="Reg/Force3DoF"             type="string" value="true"/ >
         < param name="Reg/Strategy"              type="string" value="1"/ > < !-- 1=ICP -- >
         
         < !-- ICP parameters -- >
         < param name="Icp/VoxelSize"                 type="string" value="0.05"/ >
         < param name="Icp/MaxCorrespondenceDistance" type="string" value="0.1"/ >
   < /node >
 < node pkg="rviz" type="rviz" name="rviz" args="-d $(find myagv_navigation)/rviz/rtabmap.rviz" output="screen"/ >
     
 < node pkg="tf" type="static_transform_publisher" name="base_footprint_to_laser"
   args="0.0 0.0 0.2 3.1415 0.0 0 /base_footprint /laser_frame 40" / >
 < /group >
< /launch >

启动组(group):

● 将RTAB-Map相关的节点分组,使得它们共享相同的命名空间(rtabmap),方便管理和数据处理。

RGB-D同步节点(rgbd_sync):

● 启动一个用于同步RGB图像和深度图像的节点,将摄像头的原始图像数据转换成RTAB-Map可以处理的格式。

RTAB-Map SLAM节点:

● 启动RTAB-Map SLAM算法,配置SLAM相关的参数,如订阅的传感器数据、队列大小、以及优化和ICP(迭代最近点算法)相关的参数。该节点负责实时处理传感器数据,生成环境地图并估计机器人的位姿。

RViz可视化:

● 启动RViz,用于实时可视化RTAB-Map生成的地图和机器人的位姿。

静态变换发布(tf):

● 定义并发布激光雷达和机器人体框架之间的固定坐标变换,确保SLAM算法能够正确地将传感器数据对齐到相同的坐标系中。

接下来看看效果如何。

wKgZombOiXmADE8uACF7tVBsJA8239.png

效果也不是特别特别的流畅

wKgaombOiYCAPwQLAA94JZ5tRbQ565.png

问题
实现是实现了基本的建图,但是从图片中看,即使是Jetson Nano的主板,在性能上还是有所欠缺,在建图的时候还是会有所卡顿。

所以有没有办法,来解决这个问题呢,能够保证相对完整的建图。

答案是当然有。

那就是ROS的多机通讯!

解决办法
ROS多机通讯
ROS多机通信指的是在多个计算设备之间通过ROS网络共享信息和任务的能力。这在处理复杂机器人应用时特别有用,比如当单个设备(如Jetson Nano)无法处理所有计算任务时,可以通过网络将部分任务分担给其他设备(如一台性能更强的PC)。

简而言之就是,Jetson Nano主板负责处理slam的一些计算,用一台性能强的PC来处理深度相机得到图形处理。

1. 配置网络

● 确保PC和Jetson Nano在同一个网络下,并可以互相通信。

● 设置每台设备的ROS环境变量,主要是ROS_MASTER_URI和ROS_IP或ROS_HOSTNAME。

PC:
export ROS_MASTER_URI=http://< PC_IP >:11311
export ROS_IP=< 192.168.1.100 >

Jetson
export ROS_MASTER_URI=http://< PC_IP >:11311
export ROS_IP=< 192.168.1.121 >

2. 启动核心节点

在PC端上启动核心节点,这样Jetson Nano可以通过多机通信与PC的ROS核心进行通信

3. 节点分布

● PC端(SLAM建图):在PC上运行RTAB-Map节点,订阅来自Jetson Nano的传感器数据,并进行SLAM建图。

● Jetson Nano端(图形处理):Jetson Nano运行传感器驱动节点(如深度相机),并发布图像和深度数据。

● 同时,可以运行图形处理节点,处理订阅的SLAM结果或地图数据。

4. 数据传输

通过ROS topics在PC和Jetson Nano之间传递数据。例如,Jetson Nano可以将相机的RGB-D数据发布到/camera/color/image_raw和/camera/depth/image_raw等主题,PC端的RTAB-Map节点则订阅这些主题。

来看建图的效果,是不是比之前的流畅了许多。

总结
在本次技术案例中,我们成功地使用这款产品结合Jetson Nano主板和3D摄像头,实现了RTAB-Map的三维建图功能。

然而,在实施过程中,我们遇到了性能瓶颈的问题,特别是在Jetson Nano主板上运行复杂的SLAM算法时,计算负荷较重,导致实时性和稳定性受到一定影响。为了解决这一问题,我们引入了多机通讯技术,将部分计算任务分配到另一台计算机上进行处理,从而减轻了Jetson Nano的负担。通过这一优化方案,不仅提高了系统的整体性能,还确保了SLAM建图过程的流畅和高效。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    213

    文章

    30600

    浏览量

    219655
  • 主板
    +关注

    关注

    54

    文章

    2277

    浏览量

    76149
  • nano
    +关注

    关注

    1

    文章

    162

    浏览量

    31845
  • SLAM
    +关注

    关注

    24

    文章

    456

    浏览量

    33189
  • 大象机器人
    +关注

    关注

    0

    文章

    86

    浏览量

    327
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶既然有双目摄像头,为什么还要摄像头

    视觉系统中。 但在实地落地时,有些厂商并未止步于双目,而是选择摄像头的方案。为什么有双目,还要选择
    的头像 发表于 12-09 08:59 410次阅读
    自动驾驶既然有双目<b class='flag-5'>摄像头</b><b class='flag-5'>了</b>,为什么还要<b class='flag-5'>三</b>目<b class='flag-5'>摄像头</b>?

    一文读懂 | 三维视觉领域国家级制造业单项冠军——先临三维的品牌布局

    ,推动高精度三维视觉技术的普及应用。2024年,先临三维营业收入超12亿元,业务遍及全球100+个国家和地区。 先临三维的高精度三维视觉技术深度应用于高精度工业
    的头像 发表于 11-11 14:55 281次阅读
    一文读懂 | <b class='flag-5'>三维</b>视觉领域国家级制造业单项冠军——先临<b class='flag-5'>三维</b>的品牌布局

    【CPKCOR-RA8D1】3.测试摄像头及屏幕

    中。 2、配合摄像头的原理,以及OV7725、FIFO的时序,可以总结出摄像头菜鸡数据的过程如下: (1)利用 SIO_C、SIO_D 引脚通过 SCCB 协议向 OV7725 的
    发表于 10-29 23:11

    奥比中光旗下新拓三维发布两款3D扫描双旗舰新品

    近日,奥比中光子公司新拓三维发布两款3D扫描双旗舰新品——微米级精度蓝光三维扫描仪XTOM-MATRIX 12M,以及自动化检测中心XTOM-STATION,以“高精度、高效率、自动化检测”
    的头像 发表于 10-16 15:03 499次阅读

    iTOF技术,多样化的3D视觉应用

    视觉传感器对于机器信息获取至关重要,正在从二(2D)发展到三维3D),在某些方面模仿并超越人类的视觉能力,从而推动创新应用。3D 视觉解
    发表于 09-05 07:24

    创世SD NAND贴片卡:智能摄像头存储难题的完美解决方案 #人工智能 #智能摄像头 #摄像头

    摄像头
    深圳市雷龙发展有限公司
    发布于 :2025年08月05日 11:17:13

    【EASY EAI Orin Nano开发板试用体验】--USB摄像头使用

    【Ctrl+Shift+T】创建一个新窗口,在新窗口输入以下命令mplayer -demuxer rawvideo -rawvideo w=1280:h=720:format=bgr24 ./Release/photo -loop 0 运行效果如下 至此,实现USB摄像头
    发表于 07-13 18:21

    【Milk-V Duo S 开发板免费体验】4 - OV5647 摄像头摄像头测试

    ]-621: 255: exit [main]-622: input your choice: 然后就可以进行功能测试。 下面就是用电脑显示开发板采集的YUV文件: 结语 由于支持树莓派的摄像头,所以DuoS比先前的版本更
    发表于 07-08 21:26

    【Milk-V Duo S 开发板免费体验】3- 尝试免费3D打印开发板外壳

    散热孔伸出来。 这个外壳的美中不足是不支持安装摄像头,由于它的散热孔的位置稍微差一点,安装摄像头后就盖不上了。对3D建模有经验的朋友可以尝试修改一下。 结语 这是我第一次使用
    发表于 07-08 20:54

    Made with KiCad(126):Antmicro OV5640 双摄像头子板

    AntMicro 公司的开源硬件,一个支持双摄像头(OV5640)的子板,与 AntMicro 的大部分基板兼容。 概览 该项目包含一个摄像头板的开放式硬件设计文件,该摄像头板支持两个
    发表于 05-12 18:13

    奥比中光助力创想三维登顶世界消费级3D扫描仪市场

    “全球第一!”近日,全球消费级3D扫描仪领导品牌创想三维(Creality)在年度战略供应商大会上正式发布多款新品,刷新行业新成就;作为行业芯片级3D扫描技术领导者,奥比中光持续为其新品Otter
    的头像 发表于 04-11 11:38 1264次阅读

    使用海尔曼太通/HellermannTyton 3D CAD 模型进行快速高效的设计

    提供 3D 和 2D CAD 数据,可供免费下载。 直接嵌入三维设计环境的模型下载功能 在海尔曼太通官网上点击【产品】选项,工程师现在可以查看和下载众多产品的
    发表于 03-14 16:55

    自带尺寸标注的3D预览为制造商组件提供更强劲的客户体验

    繁琐且耗时。 现在,通过在您网站上的交互式3D预览中显示关键尺寸,工程师可以在下载和购买前配置他们需要的零件,并可三维预览其模型,从而让他们可以在您网站上直接生成可查看和可操作的准确的数字化产品。从
    发表于 01-20 16:09

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示

    如下图: 3D 矩形是一个三维的图形,要将三维图形显示在平面显示屏上,需要进行投影计算,将三维的顶点坐标(x,y,z)转换成二顶点坐标(
    发表于 01-20 01:23

    光学系统的3D可视化

    **摘要 ** 为了从根本上了解光学系统的特性,对其组件进行可视化并显示光的传播情况大有帮助。为此,VirtualLab Fusion 提供显示光学系统三维可视化的工具。这些工具还可用于检查元件
    发表于 01-06 08:53