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

cartorgapher的编译与运行

目录

cartorgapher的编译环境

cartorgapher的编译

cartographer的运行

参数的详解与调参总结

降低延迟与减小计算量


cartorgapher的编译环境

系统环境
推荐在ubuntu16.04或者18.04上进行编译
推荐使用刚装好的ubuntu系统
ubuntu的软件源设置成清华的或者其他的中国境内的源, 更换完源之后要执行一下 sudo apt
get update
照着wiki.ros.org安装完对应版本的ROS
并在.bashrc中的末尾添加这条句语句, 要把 <distro> 改成对应的ROS版本
source /opt/ros/<distro>/setup.bash
其中 sudo rosdep init; rosdep update 这条语句执行不成功, 不管他, 不是必须执行的
依赖库的安装
cartographer的依赖库脚本完成一键安装.
如下是具体步骤:
第一步: 下载安装包
链接:https://pan.baidu.com/s/1q9f5aNTfrbpFpwGCwD6E4A
提取码:slam
在网盘链接里 安装包文件夹 中下载 cartographer_install-20210613.zip, 放到ubuntu系统里并解压
第二步: 打开终端
进入到cartographer_install文件夹, 在文件夹内部空白处单击鼠标右键, 打开终端
第三步 使用脚本完成依赖项的安装
在终端中输入 ./auto-carto-build.sh
如果提示脚本不是一个可执行的文件, 那就通过 chmod +x auto-carto-build.sh 为这个脚本添加可执
行权限即可, 之后在通过 ./auto-carto-build.sh 执行脚本
第三步 使用脚本完成依赖项的安装
在终端中输入 ./auto-carto-build.sh
如果提示脚本不是一个可执行的文件, 那就通过 chmod +x auto-carto-build.sh 为这个脚本添加可执
行权限即可, 之后在通过 ./auto-carto-build.sh 执行脚本.
解释说明
脚本里进行了4个库的编译与安装
cartographer的依赖库有3, 分别是abseil-cpp, ceres-solver, protobuf.
在脚本的最后, 也将cartographer安装到系统里了. 安装cartographer, 就可以在工作空间中只对
cartographer_ros进行编译了, 这样修改launchlua文件后就不需要执行一次编译指令了.
注意: 如果之前安装过 ceres-solver, protobuf, cartographer 的话, 执行脚本时可能会报有些函数没
有定义的错误, 这是由于protobuf或者cartographer不一致版本导致的, 可以先将之前安装的库卸载掉,
再执行安装依赖的脚本
一定要确保脚本执行之后没有错误输出, 否则之后编译代码会编译不通过

cartorgapher的编译

第一步: 下载注释的代码
讲师注释的代码的github地址为
https://github.com/xiangli0608/cartographer_detailed_comments_ws
在某个文件夹内部空白处单击鼠标右键, 打开终端, 输入如下执行进行代码的下载.
git clone https://github.com/xiangli0608/cartographer_detailed_comments_ws.git
注意, 一定要通过 git clone 的方式下载代码, 因为代码的注释是处于更新状态的, 要定期通过 git pull
origin master 来更新代码.
要是在github中下载代码的zip压缩文件, 这样下载的代码里不含有.git文件夹, 就不能通过 git pull
行代码的更新了.
如果执行 git clone 后没有下载代码, 是由于没有连上github导致的, 可以按 ctrl c 中断当前下载,
次执行 git clone , 重复几次试试, 如果还不行, 就在群里问问吧.
第二步: cartorgapher的编译
进入到cartographer_detailed_comments_ws, 在文件夹内打开终端, 输入
./catkin_make.sh
完成对cartographercartographer_ros的编译.
注意: 一定要确保之前的依赖项全部安装成功, 否则这里的编译就会报错

cartographer的运行

下载数据集
在网盘链接里 数据集文件夹 中下载数据集, 使用的数据集有3,
rslidar-outdoor-gps.zip 这个是讲师自己录制的数据, 包括了速腾16线点云数据, 由点云数据生成的
单线雷达数据, imu, 里程计, rtk/gps, tf tf_static
rslidar-outdoor-gps-notf.zip 这个与上边的是同一个, 只不过这个将tf的话题去掉了
landmarks_demo_uncalibrated.zip 是从cartographer官网上下载的数据, 旨在展示一下如何在
cartographer中使用landmark
bag文件放到指定的文件夹下
首先, 用户文件夹下新建一个文件夹, 并命名为bagfiles, 然后将下载好的3bag文件放入bagfiles文件 夹中.
开始二维建图
进入到cartographer_detailed_comments_ws文件夹内, 在文件夹内右键打开终端, 输入
source install_isolated/setup.bash
rospack profile
roslaunch cartographer_ros lx_rs16_2d_outdoor.launch
source命令的目的
source命令是设置当前的终端 可以执行的包与节点的地址集合的, 不执行 source
install_isolated/setup.bash 这个命令, 直接启动 roslaunch 时就会出现 找不到包或找不到节点的
错误提示.
为了防止每次启动终端都要执行一次 source install_isolated/setup.bash 这个指令, 我们可以将
这个指令写到 ~/.bashrc 文件中, 每次启动终端时, 会自动source ~/.bashrc 这个文件, 这个文件中的所有
内容都会被 source 一遍
~ 代表用户文件夹, 例如我自己电脑的用户名为lx, 我自己的用户文件夹就是 /home/lx/ , 这个文件夹地址
也可以用 ~ 来代替.
ctrl h 可以显示隐藏文件, 找到 .bashrc 文件进行编辑, 在文件底部输入
source ~/path-to-carto/cartographer_detailed_comments_ws/install_isolated/setup.bash
其中 path-to-carto 要改成自己实际的文件夹名字
rospack profile 命令的目的
新下载的包在编译之后, 有时没有被加载到ros的包的地址集合中,.
这时即使执行力 source 指令, 在启动 roslaunch 时也可能会报错, 提示找不到包或者可执行节点.
通过 rospack profile 命令可以将新下载的包加载到ros的包的地址集合, 再执行 roslaunch 时就不
会再报错了.
保存2d轨迹,并生成ros格式的地图
./finish_slam_2d.sh
其中map_dir是保存地图的文件夹名字, 可以改成自己想要保存的文件夹地址.
纯定位模式
roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
3d建图指令
roslaunch cartographer_ros lx_rs16_3d.launch
保存3d轨迹
./finish_slam_3d.sh
使用asset生成ros格式的2d栅格地图
roslaunch cartographer_ros assets_writer_2d.launch
使用asset生成3d点云地图
roslaunch cartographer_ros assets_writer_3d.launch
landmark使用示例
roslaunch cartographer_ros landmark_mir_100.launch
odom坐标系发布重复
bag或者机器人中本身存在odom坐标系, provide_odom_frame又设置成了true, 就会导致odom
标系重复发布.
会导致机器人位姿发生来回的跳动.

参数的详解与调参总结

TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 100.
TRAJECTORY_BUILDER_2D.min_z = 0.2 -- / -0.8
TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.02
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 10.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 1.
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 80.
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution = 0.1 -- / 0.02
POSE_GRAPH.optimize_every_n_nodes = 160. -- 2倍的num_range_data以上
POSE_GRAPH.constraint_builder.sampling_ratio = 0.3
POSE_GRAPH.constraint_builder.max_constraint_distance = 15.
POSE_GRAPH.constraint_builder.min_score = 0.48
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.60

降低延迟与减小计算量

前端部分
减小 max_range, 减小了需要处理的点数, 在雷达数据远距离的点不准时一定要减小这个值
增大 voxel_filter_size, 相当于减小了需要处理的点数
增大 submaps.resolution, 相当于减小了匹配时的搜索量
对于自适应体素滤波 减小 min_num_pointsmax_range, 增大 max_length, 相当于减小了需要处
理的点数
后端部分
增大 optimize_every_n_nodes, 降低优化频率, 减小了计算量
增大 MAP_BUILDER.num_background_threads, 增加计算速度
减小 global_sampling_ratio, 减小计算全局约束的频率
减小 constraint_builder.sampling_ratio, 减少了约束的数量
增大 constraint_builder.min_score, 减少了约束的数量
减小分枝定界搜索窗的大小, 包括linear_xy_search_window,inear_z_search_window,
angular_search_window
增大 global_constraint_search_after_n_seconds, 减小计算全局约束的频率
减小 max_num_iterations, 减小迭代次数
降低内存
增大子图的分辨率 submaps.resolution
降低纯定位时错误重定位的概率
修改 pose_graph.lua 中的如下参数
提高 optimize_every_n_nodes , 减小了优化的次数
减小 sampling_ratio, 减小了计算约束的次数
减小 max_constraint_distance, 减小了计算约束的距离
提高 min_score, 减小了计算约束的数量, 提高约束正确的概率
提高 global_localization_min_score, 减小了计算约束的数量, 提高约束正确的概率
提高 global_constraint_search_after_n_seconds , 减小了回环的次数(隔多长时间计算一次)
http://www.dtcms.com/a/285372.html

相关文章:

  • 需要保存至服务器的:常见编辑、发布文章页面基础技巧
  • Machine Learning HW2 report:语音辨识(Hongyi Lee)
  • 如何防止GitHub上的敏感信息被泄漏?
  • Jenkins+Docker+Git实现自动化CI/CD
  • 大带宽服务器都有哪些应用场景?
  • 群晖中相册管理 immich大模型的使用
  • Honeywell霍尼韦尔DV-10 变速器放大器 输入 15-28 VDC,输出 +/- 10VDC 060-6881-02
  • 【HCI log】Google Pixel 手机抓取hci log
  • HTTP 性能优化:五条建议
  • 构建智能客服Agent:从需求分析到生产部署
  • UGUI 性能优化系列:第二篇——Canvas 与 UI 元素管理
  • 如何选择旅游科技行业云ERP?Oracle NetSuite助力汇智国际数智化升级
  • Oracle 19C 后台主要进程的功能解析
  • (LeetCode 面试经典 150 题 ) 242. 有效的字母异位词 (哈希表)
  • nginx-http反向代理与负载均衡
  • 大规模图计算引擎的分区与通信优化:负载均衡与网络延迟的解决方案
  • Nginx配置Spring Boot集群:负载均衡+静态资源分离实战
  • 百度权重提升技巧分析:从底层逻辑到实战策略
  • x86上编译jetson nano的docker
  • 【Docker】在Linux环境下使用Dockerfile打包镜像(图文示例)
  • Spring中的设计模式
  • 因果图方法设计测试用例的价值与使用范围
  • untiy之导入插件(文件方式,适用于git克隆失败)
  • TCP通讯开发注意事项及常见问题解析
  • MTSC2025参会感悟:手工测试用例的智能化生成
  • Typecho+阿里云CDN完整配置:防止DDoS攻击与IP暴露
  • 6 种无线传输照片从安卓到 Mac 的方法
  • CertiK创始人顾荣辉出席上海Conflux大会,聚焦Web3全球化中的安全与合规路径
  • grpo 优化
  • 超简单linux上部署Apache