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建图过程的流畅和高效。

审核编辑 黄宇

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

    关注

    210

    文章

    28179

    浏览量

    206308
  • 主板
    +关注

    关注

    53

    文章

    1833

    浏览量

    70446
  • nano
    +关注

    关注

    1

    文章

    154

    浏览量

    30586
  • SLAM
    +关注

    关注

    23

    文章

    419

    浏览量

    31782
收藏 人收藏

    评论

    相关推荐

    3D ToF三维场景距离(景深)测量系统简介

    电子发烧友网站提供《3D ToF三维场景距离(景深)测量系统简介.pdf》资料免费下载
    发表于 09-29 10:55 0次下载
    <b class='flag-5'>3D</b> ToF<b class='flag-5'>三维</b>场景距离(景深)测量系统简介

    机房动环监测:3D巡检功能是什么

    机房动环监测的3D巡检功能是一种基于三维可视化技术的创新巡检方式,它利用三维BIM模型结合日常巡检工作,对机房内的动力、环境、安防等设备进行虚拟仿真和动态展示,从而
    的头像 发表于 09-18 18:14 197次阅读
    机房动环监测:<b class='flag-5'>3D</b>巡检<b class='flag-5'>功能</b>是什么

    Jetson Nano集成探索大象机器人myAGV上的 SLAM 算法!

    官方提供的gitbook,主要使用到了gmapping算法来导航实现功能的。 本篇得到文章主要探讨如何通过调整gmapping算法和其他软件层面的优化来提升
    的头像 发表于 06-03 14:13 404次阅读
    <b class='flag-5'>Jetson</b> <b class='flag-5'>Nano</b>集成探索大象机器人<b class='flag-5'>myAGV</b>上的 SLAM 算法!

    德国蔡司工业级3D三维扫描仪抄数机

    在科技日新月异的今天,3D技术以其独特的魅力,逐渐渗透到我们生活的方方面面。而在这一浪潮中,德国蔡司工业级3D三维扫描仪抄数机凭借其卓越的性能和精准度,成为了业界的翘楚,稳坐3D
    的头像 发表于 04-25 18:02 554次阅读
    德国蔡司工业级<b class='flag-5'>3D</b><b class='flag-5'>三维</b>扫描仪抄数机

    三维扫描与3D打印在法医头骨重建中的突破性应用

    随着科技的飞速发展,三维扫描和3D打印技术已经逐渐渗透到医疗领域的各个环节,为临床诊断、治疗和医学研究带来了前所未有的便利。特别是在法医学领域,三维扫描和3D打印技术的应用更是为头骨重
    的头像 发表于 04-19 10:26 437次阅读
    <b class='flag-5'>三维</b>扫描与<b class='flag-5'>3D</b>打印在法医头骨重建中的突破性应用

    蔡司3D三维扫描仪激光抄数设备

    在科技日新月异的今天,3D技术以其独特的魅力,逐渐渗透到我们生活的方方面面。而在这一浪潮中,蔡司3D三维扫描仪凭借其卓越的性能和精准度,成为了业界的翘楚,稳坐3D
    的头像 发表于 04-17 16:45 564次阅读
    蔡司<b class='flag-5'>3D</b><b class='flag-5'>三维</b>扫描仪激光抄数设备

    泰来三维| 高精度工业3D扫描助力模具检测和逆向设计“数字化”发展

    相应的,产品所需的模具结构也变得愈发复杂精密,传统检测方式和测绘工具很难满足些最新需求。高精度工业3D扫描技术的出现,通过获取工件完整的三维数据,为模具检测和逆向设计提供“数字化”破局之法。高精度
    的头像 发表于 01-29 16:22 431次阅读
    泰来<b class='flag-5'>三维</b>| 高精度工业<b class='flag-5'>3D</b>扫描助力模具检测和逆向设计“数字化”发展

    角石油工业压力阀三维扫描逆向3d建模设计服务

    随着高精度3D数字化技术的不断发展,其在各工业制造领域发挥着愈发重要的作用,很多企业也都选择CASAIM的高精三维扫描解决方案,本期,我们就来聊聊这项技术在珠角石油工业压力阀三维扫描
    的头像 发表于 01-16 15:11 329次阅读
    珠<b class='flag-5'>三</b>角石油工业压力阀<b class='flag-5'>三维</b>扫描逆向<b class='flag-5'>3d</b>建模设计服务

    星推出裸眼3D游戏显示器,展出《匹诺曹的谎言》效果

    此款显示器运用置于屏幕顶部的双摄像头制造3D立体效果,可实时追踪使用者的头部与眼球运动,轻松地将二视频转化为3D效果。试验中,星在显示器
    的头像 发表于 01-08 14:38 802次阅读

    3D三维尺寸测量设备介绍

    3D三维尺寸测量设备厂家本精密仪器介绍,三维尺寸测量时需要用到一些精密仪器,它们都有各自的特点。那么三维尺寸测量中常用的设备有哪些?1、
    的头像 发表于 12-20 15:39 1106次阅读
    <b class='flag-5'>3D</b><b class='flag-5'>三维</b>尺寸测量设备介绍

    3D三维扫描仪逆向建模抄数助力工业发展

    随着数字化浪潮席卷各行各业,本精密仪器的3D三维扫描仪逆向建模抄数服务正日益崭露头角,为企业提供数字化智能的关键支持,助力产业发展进入新的智能时代。
    的头像 发表于 12-15 14:19 567次阅读
    <b class='flag-5'>3D</b><b class='flag-5'>三维</b>扫描仪逆向建模抄数助力工业发展

    搭配君正主控芯片测评:创想三维物有所值,让你玩3D打印,而不是玩3D打印机

    的配合来实现高精度的自动调平,保证首层的打印成功。这样也就不再需要人工通过A4纸去调平热床,何况现在的K1 Max你也找不到原本用于调平的螺丝。 摄像头 K1 Max作为创想三维的一款高配版旗舰
    发表于 12-08 17:49

    3D-IC 设计之早期三维综合以及层次化设计方法

    3D-IC 设计之早期三维综合以及层次化设计方法
    的头像 发表于 12-04 16:53 507次阅读
    <b class='flag-5'>3D</b>-IC 设计之早期<b class='flag-5'>三维</b>布<b class='flag-5'>图</b>综合以及层次化设计方法

    3d扫描风力涡轮机零部件三维尺寸测量解决方案

    CASAIM中科广电的专业级三维扫描仪与其他替代方案相比,是一个很有说服力且切实可行的解决方案。客户选择这款三维扫描仪的主要原因之一是CASAIM中科广电自带的3D测量软件平台中的功能
    的头像 发表于 11-30 14:44 389次阅读
    <b class='flag-5'>3d</b>扫描风力涡轮机零部件<b class='flag-5'>三维</b>尺寸测量解决方案

    aikit 2023 3D与机械臂结合!

    引言 今天我们主要了解3D摄像头是如何跟机械臂应用相结合的。我们最近准备推出一款新的机械臂套装AI Kit 2023 3D,熟悉我们的老用户应该知道,我们之前的AI Kit 2023套装使用的是2
    的头像 发表于 11-28 10:38 947次阅读
    aikit 2023 <b class='flag-5'>3D</b>与机械臂结合!