文章目录

前言

1 安装 RPLidar 和 Pixhawk

2 检查 RPLidar 的串行端口

3 安装更多软件包

4 创建Catkin工作空间

5 安装 RPLidar 节点

6 安装 Google Cartographer


前言

本页展示了如何使用 RPLidarA2 激光雷达(RPLidarA2 lidar)设置 ROS 和 Google Cartographer SLAM,为 ArduPilot 提供本地位置估计,使其可以在没有 GPS 的情况下运行。

这些说明在使用 APSync 更新的 NVidia TX2 上进行了测试,然后按照此处所述安装(installed as described here)了 ROS 和 MAVROS。

Note

这些页面正在制作中。


1 安装 RPLidar 和 Pixhawk

应调整 RPLidar 的方向,使其 USB 调试线线与飞行控制器上的箭头方向一致。

USB 调试线应插入运行 ROS 的配套计算机的 USB 端口。

2 检查 RPLidar 的串行端口

RPLidarA2 插入配套计算机。如果使用安装在 AUVidea J120 电路板上的 TX2,请确保将激光雷达插入下方的 USB 端口。

ls -l /dev/tty*

激光雷达应该显示为 /dev/ttyUSB0 或 /dev/ttyACM0。

如果输入“lsusb”,设备也应显示为 "Cygnal Integrated Products, Inc. CP210x UART 桥接器 / myAVR mySmartUSB light"。

根据上面找到的串行端口,只需输入以下两条命令中的一条,就可以读取设备信息:

sudo usermod -a -G dialout

3 安装更多软件包

完整安装 ROS 桌面:

sudo apt-get install ros-<distro>-desktop

或安装这些单独的软件包(此列表尚不完整):

sudo apt-get install ros-<distro>-tf ros-<distro>-tf-conversions ros-<distro>-laser-geometry

sudo apt-get install ros-<distro>-cv-bridge ros-<distro>-image-transport

sudo apt-get install qt4-qmake qt4-dev-tools

sudo apt-get install protobuf-compiler

4 创建Catkin工作空间

在你的主目录中:

cd $HOME

mkdir -p catkin_ws/src

cd catkin_ws

catkin_init_workspace

5 安装 RPLidar 节点

在工作区安装 RPLidar 节点:

cd $HOME/catkin_ws/src

git clone https://github.com/Slamtec/rplidar_ros.git

6 安装 Google Cartographer

安装更多软件包:

sudo apt-get install python-wstool python-rosdep ninja-build

使用 wstool 重新初始化工作区,然后合并 cartographer_ros.rosinstall 文件并获取依赖代码。

cd $HOME/catkin_ws

wstool init src

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall

wstool update -t src

安装 proto3 和 deb 依赖项:

src/cartographer/scripts/install_proto3.sh

sudo rosdep init   # if error message appears about file already existing, just ignore and continue

rosdep update

rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

将机器人姿态发布(Robot Pose Publisher)程序包克隆到工作区中:

cd $HOME/catkin_ws/src

git clone https://github.com/GT-RAIL/robot_pose_publisher.git

使用你喜欢的编辑器(如“gedit”)创建 cartographer_ros 启动文件

cd $HOME/catkin_ws/src/cartographer_ros/cartographer_ros/launch

gedit cartographer.launch

将以下内容复制粘贴到文件中:

<launch><param name="/use_sim_time" value="false" /><node name="cartographer_node"pkg="cartographer_ros"type="cartographer_node"args="-configuration_directory $(find cartographer_ros)/configuration_files -configuration_basename cartographer.lua"output="screen"><remap from="odom" to="/mavros/local_position/odom" /><remap from="imu" to="/mavros/imu/data" /></node><node name="cartographer_occupancy_grid_node"pkg="cartographer_ros"type="cartographer_occupancy_grid_node" /><node name="robot_pose_publisher"pkg="robot_pose_publisher"type="robot_pose_publisher"respawn="false"output="screen" ><param name="is_stamped" type="bool" value="true"/><remap from="robot_pose" to="/mavros/vision_pose/pose" /></node><node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 base_link laser 100" />
</launch>

使用我们喜欢的编辑器(如“gedit”)创建 cartographer.lua 脚本:

cd $HOME/catkin_ws/src/cartographer_ros/cartographer_ros/configuration_files

gedit cartographer.lua

将以下内容复制粘贴到文件中。

include "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,publish_frame_projected_to_2d = false,use_odometry = false,use_nav_sat = false,use_landmarks = 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_publish_period_sec = 30e-3,rangefinder_sampling_ratio = 1.,odometry_sampling_ratio = 1.,fixed_frame_pose_sampling_ratio = 1.,imu_sampling_ratio = 1.,landmarks_sampling_ratio = 1.,
}MAP_BUILDER.use_trajectory_builder_2d = trueTRAJECTORY_BUILDER_2D.min_range = 0.05
TRAJECTORY_BUILDER_2D.max_range = 30
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 8.5
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 0.2
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 5
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 1.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 10
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.2)
-- for current lidar only 1 is good value
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1TRAJECTORY_BUILDER_2D.min_z = -0.5
TRAJECTORY_BUILDER_2D.max_z = 0.5POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.65
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 30return options

Note

与其手动修改上述软件包,不如克隆该仓库并安装依赖包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94531.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94531.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94531.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载诊断架构 --- 基于整车功能的正向诊断需求开发

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

字帖生成器怎么用?电脑手机双端操作指南

字帖生成器是一款支持电脑端和手机端的免费练字工具&#xff0c;可一键生成PDF格式字帖并直接打印使用。本文基于官方公开版本&#xff0c;提供无广告、无营销的实测操作指南。 工具基础信息 软件名称&#xff1a;字帖生成器适用设备&#xff1a;Windows、安卓/鸿蒙核心功能&…

pycharm 远程连接服务器报错

配置远程链接的时候出现报错 Command finished with exit code 139 Execution was killed due to timeout Failed to execute command Rsync command ‘rsync’ was not found neither in local PATH nor as full executable path Starting introspection for Python… 放假前好…

局域网共享文件夹

准备工作&#xff1a; A电脑&#xff08;共享端&#xff09; B电脑&#xff08;本机&#xff09;在A电脑&#xff0c;选好要共享的目录&#xff0c;然后右键属性 > 高级共享 > 共享此文件夹 > 权限(全开)然后找到此电脑&#xff0c;右键&#xff0c;打开属性&#xff…

时序数据库全景指南:从场景选型到内核拆解

1. 什么是时序数据 时序数据&#xff08;Time-Series Data&#xff09; 是在时间上连续产生、且带有时间戳的观测值序列&#xff0c;典型特征&#xff1a;维度描述高并发写百万点/秒&#xff0c;追加为主写多读少90 % 查询是降采样或聚合时效性越新越热&#xff0c;旧数据价值递…

深入解析 Oracle 内存架构:驾驭 SGA 与 PGA 的性能艺术

引言&#xff1a;数据库的心脏与大脑如果说磁盘上的数据文件是 Oracle 数据库的“身体”&#xff0c;是永久存储的基石&#xff0c;那么内存结构就是其“心脏与大脑”。它负责所有计算活动的发生&#xff0c;决定了数据泵送的速度与效率。一个配置得当、运行顺畅的内存体系&…

竣工验收备案识别技术:通过AI和OCR实现智能化文档处理,提升效率与准确性,推动建筑行业数字化转型。

竣工验收备案是建设工程项目投入使用的最终法定程序&#xff0c;是确保工程符合规划、质量、消防、环保等各项要求的核心关口。传统的备案流程依赖大量纸质文档和人工审核&#xff0c;效率低下且易出错。随着人工智能与大数据技术的崛起&#xff0c;竣工验收备案识别技术应运而…

76 最小覆盖子串

76 最小覆盖子串 文章目录76 最小覆盖子串1 题目2 解答1 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;…

趣味学Rust基础篇(变量与可变性)

这篇文章将用通俗的比喻和清晰的逻辑&#xff0c;带你深入理解 Rust 变量背后的核心思想&#xff0c;让你不仅“会用”&#xff0c;更能“明白为什么”。 Rust 的“盒子哲学”&#xff1a;变量、可变性、常量与隐藏 想象一下&#xff0c;Rust 里的变量就像一个个盒子。你把值&a…

2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版

1.题目2.思路 快速选择排序的平均时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;最坏时间复杂度是O&#xff08;n^2&#xff09;&#xff0c;最好的时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;空间复杂度是O&#xff08;nlogn&#xff09;。 排序算法中…

解决 pdf.mjs 因 MIME 类型错误导致的模块加载失败问题

Mozilla PDF.js V4 开始&#xff0c;它官方分发确实只提供了 ESM 模块&#xff08;.mjs&#xff09;&#xff0c;没有以前的 pdf.js、pdf.worker.js UMD 版本了。 这个问题本质上是 浏览器要求以 application/javascript MIME 类型加载 ES Module&#xff0c;而你引入的 pdf.mj…

STM32八大模式

前言&#xff1a;STM32存在八大模式&#xff0c;分别如下推挽输出&#xff0c;开漏输出&#xff0c;复用推挽输出&#xff0c;复用开漏输出浮空输入&#xff0c;上拉输入&#xff0c;下拉输入&#xff0c;模拟输入STM32标准IO结构图如下&#xff1a;其中如下电路为保护电路&…

OpenCV4.X库功能全解---个人笔记

文章目录前言1.Core核心功能1.1 基本数据类型和结构&#xff1a;1.2 数组操作&#xff1a;1.3 数学函数&#xff1a;1.4 随机数生成&#xff1a;1.5 线性代数运算&#xff1a;1.6 常用数据结构和算法&#xff1a;1.7 XML/YAML文件读写&#xff1a;1.8 错误处理&#xff1a;1.9时…

代码随想录刷题Day44

二叉搜索树的最近公共祖先 这道题&#xff0c;可以沿用二叉树的最近公共祖先的求法进行求解&#xff0c;也就是root判断-左右子树递归求LCA-根据左右子树的LCA结果返回值这一套。 但是&#xff0c;如果要用上搜索二叉树的有序性这个信息的话&#xff0c;就可以直接在递归时候确…

springmvc的数据校验和处理的一个例子

JSR-303是Java 的标准规范&#xff0c;而 Spring MVC 对其提供了完美的支持和集成 1.JSR-303 的身份 JSR-303 是 Java 标准 JSR&#xff1a;Java Specification Request&#xff08;Java 规范请求&#xff09; JSR-303&#xff1a;Bean Validation 1.0&#xff08;Bean 验证规范…

SlowFast使用指南(三)——自建数据集

写在前面 在前两个章节初步使用了SlowFast&#xff0c;使用的都是官方给出的数据集。 附上链接&#xff1a; SlowFast使用指南&#xff08;一&#xff09;——demo运行-CSDN博客 SlowFast使用指南&#xff08;二&#xff09;——训练ava数据集-CSDN博客 本文尝试了使用自己的数…

Day26 树的层序遍历 哈希表 排序算法 内核链表

day26 树的层序遍历 哈希表 排序算法 内核链表 实现树的层序遍历&#xff08;广度遍历&#xff09; 使用队列辅助实现二叉树的层序遍历。算法核心思想是&#xff1a;从根节点开始&#xff0c;依次将每一层的节点入队&#xff0c;出队时访问该节点&#xff0c;并将其左右子节点&…

【系统分析师】高分论文:论快速应用开发方法及应用

【摘要】 我在某县卫生健康委员会公共卫生信息中心工作&#xff0c;是信息中心的负责人。2021年5月&#xff0c;我中心受县痪病预防控制中心委托&#xff0c;为某种痪病疫苗3期临床项日开发受试对象拦截系统。我负责系统架构设计、需求分析以及后期的部分编码工作。通过与庆病预…

4056:【GESP2403八级】接竹竿

/*4056&#xff1a;【GESP2403八级】接竹竿flag 数组 存储每个元素出现的位置&#xff0c;nxt[i]j;存储每个位置 后面第一次出现 与a【i】相等的位置//其中 a【i]a[j] :记录i的下一个位置 &#xff0c;flag 存储每个值的位置下一次 具有下一次&#xff0c;相当于的链表了&…

企业落地版 AutoGen 多智能体工程(完整示例)

企业生产级参考实现,目标是一套可直接部署的模板工程,包含: FastAPI HTTP API(任务提交、状态查询) Celery 异步任务队列(Redis Broker) PostgreSQL + pgvector(向量存储,RAG) SQLAlchemy + Alembic(ORM 与迁移) AutoGen 多智能体编排(Planner / Coder / Executor…