资讯详情

Jetson Nano搭配镭神N10:Cartographer激光雷达建图实战

📅 2026/9/28 13:46:06 | 华诺云谱 👁 阅读
Jetson Nano搭配镭神N10:Cartographer激光雷达建图实战
如果你手里正好有一台镭神智能N10激光雷达又有一块Jetson Nano开发板想跑通Cartographer建图却不知道从哪下手那这篇就是为你准备的。文章会带你从头搭一套可运行的ROS建图环境雷达驱动安装、串口配置、Cartographer配置与调整、地图保存全部按实际操作流程记录。适合准备入门SLAM的学生、做服务机器人或AGV样机验证的工程师以及想在低成本硬件上体验激光雷达建图的朋友。先说下我为什么写这篇。上个月帮朋友验证一台室内巡检小车的SLAM方案手头正好是这块N10和Nano。原本以为半天搞定结果串口权限、TF树、时间戳、纯雷达退化场景一个个冒出来折腾了差不多两天才稳定出图。这篇文章就是把那些坑重新填平让你按步骤走就能少走弯路。1. 项目整体设计思路与方案选型1.1 这套组合要解决什么问题移动机器人最核心的一件事是先搞清楚“我在哪、周围是什么”这本质上就是SLAM问题。激光雷达因为不受光照影响、点云直观、测距精度高成为室内SLAM最常用的传感器之一。镭神智能N10是一款360度扫描的单线激光雷达最大测距10米对大多数室内场景足够用价格也相对友好很适合样机验证和小型服务机器人项目。这次项目要解决的具体问题是在一台Jetson Nano上把N10雷达接入ROS用Cartographer完成室内地图构建并输出可复用的栅格地图。栅格地图是后续做自主导航、路径规划、避障的基础。地图本身画得好不好直接影响导航能不能跑起来所以建图环境搭建这一步必须扎实。1.2 为什么选Cartographer而不是Gmapping很多新手第一次接触SLAM最先听说的是Gmapping。Gmapping基于粒子滤波实现简单、起步快但它比较依赖轮式里程计纯雷达手持建图时很容易飘。Cartographer是Google开源的图优化SLAM框架核心思路是匹配雷达帧、积累位姿图并在后端做回环检测。当机器人走回之前到过的地方时Cartographer能识别出“这里来过”把整个位姿图拉回正确位置地图明显更干净。从实际效果看我用同样一组N10数据分别跑过Gmapping和CartographerGmapping在走廊和房间转角处经常出现错位Cartographer几乎没有。下面这张表可以比较直观地看出差别对比维度GmappingCartographer核心方法粒子滤波图优化 回环检测对里程计依赖高缺里程计容易飘低纯激光也能跑地图干净程度一般高回环优化能力弱强硬件消耗较低稍高但单线雷达完全带得动在Jetson Nano上跑Cartographer 2D建图CPU占用并不夸张。N10只有10Hz扫描频率单线点云数据量不大Nano的4核ARM处理器完全能扛住。这也是我最终选Cartographer的核心原因。1.3 为什么选Jetson Nano而不直接上普通PCJetson Nano的优势是低功耗、体积小、价格低特别适合嵌入到小车底盘或者手持设备里做边缘端SLAM。对比一台桌面电脑加独立显卡Nano整机功耗只有5W到10W用充电宝就能带起来这在移动机器人场景里非常重要。当然Nano也有明显短板4GB内存是最大瓶颈。编译大型包或者同时开多个ROS节点时内存吃紧。解决办法也不复杂先给系统加Swap交换空间编译时限制并行任务数后面我会贴具体命令。如果你用的是更新一代的Orin Nano或者Orin NX内存和算力都会更好配置思路完全一致只是Ubuntu版本和ROS版本要跟着升级。1.4 整体架构与数据流整套系统的数据流可以这样理解N10激光雷达通过串口把原始扫描数据发给Jetson Nanolsn10驱动节点解析并发布成ROS标准话题/scanCartographer节点订阅/scan实时估计雷达在空间中的位姿并构建栅格地图最终输出/map话题和完整的TF坐标树。Rviz用来可视化点云和地图map_saver用来把地图保存成图片文件。这里我想特别强调TF坐标树。Cartographer对TF非常敏感它需要map - odom - base_link - laser这条完整的变换链。很多人建图失败不是Cartographer参数问题而是TF树断了或者设错了这个点后面会反复提到。2. 硬件与软件环境准备2.1 硬件清单与N10关键参数先把东西备齐避免做到一半发现缺线、缺模块。我的推荐清单如下镭神智能N10激光雷达一台USB转串口模块TTL电平常见的是CP2102或CH340方案Jetson Nano开发板4GB版本系统TF卡或SSD建议64GB以上5V/2A以上稳定电源雷达尽量独立供电杜邦线或专用连接线若干可选小车底盘、遥控器、手柄用来移动雷达N10的几个关键参数需要心里有数。最大测距10米360度机械扫描扫描频率10Hz通过串口输出数据ROS驱动里默认的frame_id通常是laser。N10的电机启动瞬间电流比正常工作时大不少我踩过坑直接用Nano的5V引脚给雷达供电结果Nano重启了好几次。建议给雷达单独供电共地即可。2.2 系统与ROS版本怎么搭配Jetson Nano最经典的组合是JetPack 4.6.1系统对应Ubuntu 18.04配ROS Melodic版本。这套组合资料最多、坑最少强烈推荐新手照这个配。如果你用的是Jetson Orin Nano这类新板子系统一般是Ubuntu 20.04或22.04对应ROS Noetic或ROS2流程相似但细节会有差异N10这种老型号驱动对ROS2支持不完善所以我建议ROS1起步。安装系统这一步不展开细说烧录镜像、开机、联网这些基本操作你大概率已经会了。重点是装完系统后第一件事不是急着装ROS而是先把软件源换成国内镜像然后执行系统全量更新。这一步能避免后面大量依赖下载超时的问题。2.3 鱼香ROS一键安装实操ROS安装是很多新手的第一道坎手动添加源、导入密钥、装几十个依赖包每一步都可能出问题。我这里直接用“鱼香ROS一键安装”工具它是我测试下来最省事的方案。在终端里执行wget http://fishros.com/install -O fishros . fishros脚本会进入交互菜单选择安装ROS版本选Melodic类型建议选桌面版因为桌面版自带Rviz、map_server、tf工具等常用包省得后面再补。安装时间取决于网络和系统状态十几分钟到半小时都正常耐心等就好。安装完成后再执行echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc验证一下是否成功rosversion -d如果输出melodic说明ROS核心已经就位。注意每开一个新的终端都要确保.bashrc里的source生效这是初学者最容易忽略的操作。2.4 给Jetson Nano加Swap编译不再卡死Nano只有4GB内存开几个ROS节点加上桌面环境内存就已经吃掉大半。尤其是后面编译lsn10驱动和Cartographer运行时很容易出现内存耗尽导致进程被系统杀掉的惨案。所以建图环境搭建前我强烈建议先加Swap。在终端执行下面这组命令创建一个4GB的Swap文件并设为开机自动挂载sudo fallocate -l 4G /var/swapfile sudo chmod 600 /var/swapfile sudo mkswap /var/swapfile sudo swapon /var/swapfile echo /var/swapfile none swap sw 0 0 | sudo tee -a /etc/fstab执行完可以用free -h查看Swap是否生效。如果这里显示Swap只有0说明没开成功回头检查一下步骤。加了4G Swap之后编译Cartographer源码也不至于OOM了效果非常明显。3. 镭神智能N10驱动接入与点云验证3.1 下载并编译lsn10驱动驱动是雷达和ROS之间的翻译官。镭神官方提供了lsn10的ROS驱动包安装方式很标准。先创建工作空间并拉取代码mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/LeiShenRobotics/lsn10.git如果仓库地址有变动或者网络不通也可以去镭神智能官网的SDK下载页面拿到源码包解压放到~/catkin_ws/src下效果一样。然后回到工作空间根目录编译cd ~/catkin_ws catkin_make echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc编译过程中如果提示缺少依赖比如serial库先安装sudo apt install ros-melodic-serial然后再重新catkin_make。驱动本身很小编译只要一两分钟Jetson Nano完全没压力。3.2 串口权限与设备号处理N10通过USB转串口模块连接到Nano后系统里会生成一个/dev/ttyUSB0这样的设备节点。默认情况下普通用户没有读写权限直接启动驱动会报Permission denied。临时解决方式是每次启动前执行sudo chmod 666 /dev/ttyUSB0但这样太麻烦而且一旦重新插拔USB权限又会丢失。我建议直接写一条udev规则永久解决echo KERNELttyUSB*, MODE0666 | sudo tee /etc/udev/rules.d/60-usb-serial.rules sudo udevadm control --reload-rules另外要提醒的是设备号不一定永远是ttyUSB0。如果你同时插了其他USB串口设备N10可能变成ttyUSB1。启动驱动前先执行ls -l /dev/ttyUSB*确认一下在launch文件里把port参数改成实际值。3.3 启动驱动验证/scan话题准备工作都做完后进入第一个高潮时刻。启动驱动节点roslaunch lsn10 lsn10.launch如果一切正常终端会持续输出雷达扫描数据解析日志。新开一个终端用下面的命令确认话题和频率rostopic list rostopic hz /scan rostopic echo /scan -n1rostopic hz /scan应该稳定在10Hz左右这是N10的标称扫描频率。如果频率忽高忽低甚至为0优先检查串口波特率和设备号。有的驱动版本默认波特率和雷达固件不匹配需要在launch文件里把baud_rate改成对应值常见的是230400或460800逐个试一下就能确认。3.4 在Rviz里亲眼看雷达点云数据在终端里只能看到数字不直观。启动Rvizrosrun rviz rviz添加一个LaserScan显示把话题选择为/scan固定坐标系设置为laser或base_link。这时候你应当看到一圈由点云组成的环境轮廓雷达正对的方向有点云密集区域远处墙壁形成一条清晰的弧线或直线。如果看到点云围绕中心旋转别慌这只是Fixed Frame没设对。点云本身没问题把坐标系改成laser就好。我习惯在这一步多花几分钟转一转雷达方向、遮挡一下雷达视场角确认点云响应正确后再进Cartographer。雷达数据不干净后面建图全是坑这一步省不得。4. Cartographer建图环境搭建与实操4.1 安装方式二进制优先源码按需Cartographer在ROS1下有现成的二进制包Jetson Nano的Ubuntu 18.04可以直接安装sudo apt install ros-melodic-cartographer-ros为什么我不建议一上来就源码编译一是Cartographer依赖很多旧版本库在ARM架构上编译容易踩坑二是编译时间很长Nano编译可能要三四十分钟甚至更久期间稍有环境变动就前功尽弃。二进制版本对N10这种常规单线雷达完全够用功能没有缩水官方更新也不算激进。安装完成后确认一下rospack find cartographer_ros能输出功能包路径就说明装好了。只有当你需要修改Cartographer内部的算法逻辑或者使用最新代码时再去源码编译。对大多数建图需求来说apt安装是性价比最高的选择。4.2 创建N10专属功能包launch和lua配置Cartographer在ROS里的启动方式是通过一个launch文件加载一个lua配置文件。我先创建一个专属功能包避免把配置堆在其他包里面cd ~/catkin_ws/src catkin_create_pkg cartographer_n10 roscpp rospy mkdir -p cartographer_n10/launch cartographer_n10/config然后在launch目录创建n10_cartographer.launchlaunch node namecartographer_node pkgcartographer_ros typecartographer_node outputscreen param nameconfiguration_directory value$(find cartographer_n10)/config / param nameconfiguration_basename valuen10_cartographer.lua / /node node namecartographer_occupancy_grid_node pkgcartographer_ros typecartographer_occupancy_grid_node outputscreen param nameresolution value0.05 / /node node pkgtf2_ros typestatic_transform_publisher namebase_link_to_laser args0 0 0.1 0 0 0 base_link laser / node namerviz pkgrviz typerviz outputscreen / /launch接着在config目录创建n10_cartographer.luainclude map_builder.lua include trajectory_builder.lua options { map_builder MAP_BUILDER, trajectory_builder TRAJECTORY_BUILDER, map_frame map, tracking_frame base_link, published_frame base_link, odom_frame odom, provide_odom_frame true, use_odometry false, num_laser_scans 1, num_multi_echo_laser_scans 0, num_subdivisions_per_laser_scan 1, num_point_clouds 0, lookup_transform_timeout_sec 0.2, submap_publish_period_sec 0.3, pose_publish_period_sec 5e-3, } TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching true TRAJECTORY_BUILDER_2D.min_range 0.15 TRAJECTORY_BUILDER_2D.max_range 10.0 TRAJECTORY_BUILDER_2D.missing_data_ray_length 5.0 MAP_BUILDER.use_trajectory_builder_2d true保存后回到工作空间编译一次cd ~/catkin_ws catkin_make4.3 关键配置参数逐个拆解很多人在这个环节直接复制网上配置出了问题不知道怎么改。我挑几个重点参数说说它的作用。tracking_frame和published_frame都设成base_link意思是Cartographer把base_link当作机器人的主体坐标系。雷达到base_link之间的固定变换由launch里的static_transform_publisher发布。这里的高度我设了0.1米实际值要按你雷达的安装高度填错了会导致地图整体偏移。provide_odom_frame true是个重要开关。因为我们没有轮式里程计纯雷达建图这个选项让Cartographer自己维护一条odom - base_link的变换。如果设为false系统会去订阅外部里程计话题没有则直接报错。use_online_correlative_scan_matching true这项就是常说的CSM在线相关性扫描匹配。它对雷达在对称场景、弱几何环境下更容易兜住位姿防止跑飞。代价是计算量稍大但单线雷达在Nano上跑没压力。min_range和max_range要匹配N10的实际量程。N10最近测距大概0.15米最远10米所以这里设置的0.15和10.0刚好对应。如果max_range设得太小远距离点云会被截断影响建图范围设得太大又容易把噪声点纳进来。4.4 启动建图移动雷达保存地图确认雷达驱动还在运行然后另开终端启动Cartographerroslaunch cartographer_n10 n10_cartographer.launch如果一切正常Rviz会自动打开并看到一张灰黑色的网格地图随着雷达移动逐渐扩展开来。此时手持雷达或者遥控小车在室内慢慢走一圈注意移动速度要均匀、不要太快转角处尤其要慢走到之前经过的区域时尽量原路重复一遍这样回环检测有机会把累积误差拉平。地图构建到满意程度后开一个新终端保存地图mkdir -p ~/maps rosrun map_server map_saver -f ~/maps/room1保存完成后会生成room1.pgm和room1.yaml两个文件。pgm是灰度地图图片yaml记录了地图分辨率、原点坐标等元信息。用图像查看器打开pgm能看到黑色表示障碍物、白色表示空闲区域、灰色表示未知区域。到此整套Cartographer建图环境就算正式跑通了。5. 常见问题排查与调优实录5.1 雷达无数据点云纹丝不动这个问题占了新手求助的一半以上。症状是rostopic list里看不到/scan或者有/scan但rostopic hz输出为0。按下面顺序排查第一步确认USB转串口是否被识别lsusb能看到设备ls -l /dev/ttyUSB*能看到节点。第二步确认权限ls -l /dev/ttyUSB0如果是crw-rw----那普通用户没权限按前面udev规则处理。第三步确认波特率把launch文件里的baud_rate换几个常见值试试。第四步确认雷达供电雷达指示灯正常亮不代表电压足够启动瞬间电流不够会导致驱动反复初始化。如果用的是网口版本的雷达还要检查网卡IP是否与雷达在同一网段这是网络类雷达常见的坑。5.2 建图漂移、重影怎么调都压不住地图出现重影、走不了直线是Cartographer调参中最让我头疼的问题。先说结论绝大多数重影不是Cartographer参数不够好而是雷达数据源本身有抖动或者TF不稳定。我的处理顺序是这样的。先固定雷达确保安装支架不晃动机械抖动会造成点云畸变。再看rostopic hz /scan如果频率不稳定回查串口和供电。最后才动手改Cartographer参数。如果数据源没问题优先调整这几项把TRAJECTORY_BUILDER_2D.min_score从默认0.1调到0.3左右提高帧匹配的置信度把TRAJECTORY_BUILDER_2D.loop_closure_min_score适当调高让回环检测更保守如果激光雷达点云比较稀可以把submaps_num_range_data从默认值调小一点。还有一类漂浮发生在长走廊等对称场景。雷达看到的左右墙壁几乎一样位姿估计在走廊方向容易退化地图走着走着就偏了。这种情况下最有效的方案是接上轮式里程计哪怕是很粗糙的编码器数据也能给Cartographer一个初始猜测。纯雷达方案在退化场景里物理极限就在那里靠参数硬拉效果有限。5.3 Jetson Nano编译卡顿、进程被杀死Nano编译时内存爆掉通常表现为终端里冒出Killed或者internal compiler error。解决办法就是加Swap加完之后用free -h确认。编译时控制并行任务数不要用默认的全部核心cd ~/catwin_ws # 注意这里是catkin_ws catkin_make -j2-j2表示同时只编译两个任务能明显降低峰值内存。如果你用的是源码编译Cartographer同样在cmake或catkin_make命令后面加-j2。跑建图时建议把浏览器、IDE这些吃内存的软件全关掉把宝贵的内存留给SLAM进程。用htop实时看内存占用如果一直贴着上限考虑把地图分辨率调低一点。5.4 TF树不完整Cartographer反复报错Cartographer常见的报错是Could not compute submap pose或者Frame [laser] does not exist。这个基本就是TF树断裂。在Rviz里可以打开TF面板看完整坐标树正常结构是map-odom-base_link-laser。缺少哪一环就补哪一环。如果报的是base_link到laser缺失说明launch里的static_transform_publisher没生效检查节点是否启动、参数对不对。如果odom到base_link缺失说明provide_odom_frame没设对看lua文件里有没有这行。还有一类问题跟时间戳有关。Cartographer要求激光帧的时间戳是严格递增的不能倒退。如果你rostopic echo /scan -n3看到时间戳跳跃或者倒退说明串口丢包或者驱动的时基不稳定。可以先重启雷达再检查USB转串口模块质量便宜的CH340在高速率下偶尔会丢字节换CP2102通常能解决。5.5 常见问题速查表最后整理一张表格遇到问题直接对着查。问题现象可能原因解决办法/scan话题不存在驱动未启动或串口未识别检查驱动节点、lsusb、设备路径/scan频率为0串口权限、波特率不匹配chmod 666、调整baud_rate点云在Rviz中旋转Fixed Frame设置错误将Fixed Frame设为laser或base_link地图整体偏移静态TF高度或方向错误检查base_link到laser的static_transform_publisher地图重影、漂移雷达抖动、运动过快、退化场景固定雷达、放慢速度、调min_score、加里程计回环检测不生效loop_closure_min_score过高适当调低该参数多走重复路径编译时进程被Killed内存不足加Swap、catkin_make -j2地图保存失败map_server未安装apt install ros-melodic-map-server我在实际跑建图时还有一个习惯就是边走边盯着Rviz里的地图边缘。如果新扫出来的点云和旧地图墙体重合得很整齐说明当前状态健康。一旦发现明显分叉立刻停下回到分叉点重新走一遍让回环去纠正。用这个方法我基本能在两三次尝试内拿到一张比较干净的地图。另外一个容易被忽略的细节是保存地图前最好让雷达静止几秒钟让Cartographer把当前位姿收敛稳定这样最后几帧不会在已保存的地图里留下尾巴。保存完地图后打开pgm文件看一眼边缘有没有黑点如果太多回头检查雷达安装高度和移动速度是否合适。如果你后续打算接轮式里程计只需要把use_odometry改为true并确保/odom话题发布的是nav_msgs/Odometry消息。想转ROS2的话思路是类似的但需要先确认N10驱动和Cartographer在ROS2环境下有对应版本不要贸然迁移先在ROS1把SLAM流程吃透再考虑跨版本平移。这套环境搭好之后你可以继续研究定位、导航、路径规划建出来的地图就是所有上层功能的地基。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑