Cartographer源码阅读2:0基础小白也能上手 跑自己的机器人

Cartographer总览 本文目的大概的讲一下整个代码框架,本来是想尽量这一篇写详细一点,后来时间不够了,而且一篇太长了阅读太难受,后面拆成了好多章去讲,这篇主要是拆官方文档,之后的篇章东西我也没有很透彻,有错误的地方欢迎指正。 从这章开始,借鉴了很多大佬的精华: 1.无处不在的小土 2.南北粉面馆 3.火种源码的机器人 4._Leveon 下面开始解读代码 一、算法概述 官方文档(这里要翻墙,基本下面也就是照着官方文档说的,可以把下面当成官方文档的翻译) Cartographer 可以被视为两个独立但相关 阅读详情

为了先开始帮组里干活,我先开始学习如何用自己的机器人跑算法部分。

参照官方文档,部分参照大佬Cartographer 建图教程 | Vision Knowledge Base的博客

Cartographer 具体参数配置

创建 .lua 配置

Cartographer可以配置在各种机器人上工作,每个机器人的配置必须从Lua脚本定义的数据结构读取,所以我们需要配置不同的.lua文件来对应不同的机器人。

官方示例配置在:
src/cartographer_ros/cartographer_ros/configuration_files 和
install_isolated/share/cartographer_ros/configuration_files/ 中。

我们可以复制其中一个示例,然后根据自己的需要进行调整:

具体配置可参考 Lua 配置参考文档以及Cartographer配置值。同时我也将部分附在文末。

2D:

cp install_isolated/share/cartographer_ros/configuration_files/backpack_2d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua

3D:

cp install_isolated/share/cartographer_ros/configuration_files/backpack_3d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua

创建 .launch 配置:

官方示例 .launch 文件在src/cartographer_ros/cartographer_ros/configuration_files 和 install_isolated/share/cartographer_ros/configuration_files/ 中。同样可以先复制官方提供的示例:

cp install_isolated/share/cartographer_ros/launch/backpack_3d.launch install_isolated/share/cartographer_ros/launch/my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d.launch install_isolated/share/cartographer_ros/launch/demo_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/offline_backpack_3d.launch install_isolated/share/cartographer_ros/launch/offline_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d_localization.launch install_isolated/share/cartographer_ros/launch/demo_my_robot_localization.launch
cp install_isolated/share/cartographer_ros/launch/assets_writer_backpack_3d.launch install_isolated/share/cartographer_ros/launch/assets_writer_my_robot.launch
  • my_robot.launch旨在用于机器人,以使用真实传感器数据在线(实时)执行 SLAM。
  • demo_my_robot.launch旨在从开发计算机使用,并需要一个参数来重播记录中的数据。此启动文件还会生成一个 rviz 窗口,该窗口配置为可视化 Cartographer 的状态。bag_filename
  • offline_my_robot.launch与 SLAM 非常相似,但会尝试尽快执行 SLAM。这可以显著提高地图构建速度。此启动文件还可以使用提供给参数的多个 bag 文件。demo_my_robot.launchbag_filenames
  • demo_my_robot_localization.launch与上一个 Cartographer 执行的记录非常相似,但需要一个指向先前 Cartographer 执行记录的参数。之前的记录将用作预先计算的地图,Cartographer 将仅在此地图上执行定位。demo_my_robot.launchload_state_filename.pbstream
  • assets_writer_my_robot.launch用于从先前 Cartographer 执行的记录中提取数据。.pbstream

我们需要对这些文件进行一些调整以适合我们的机器人。

  • 给定的每个参数 to 都应该调整为指向 -configuration_basenamemy_robot.lua
  • 如果决定使用 robot 的描述,则应将描述放入并调整参数以指向文件名。.urdfinstall_isolated/share/cartographer_ros/urdfrobot_description
  • 如果您决定使用messages,则可以删除参数、节点和表示 ./tfrobot_descriptionrobot_state_publisher-urdf
  • 如果包或传感器发布的主题名称与 Cartographer ROS 预期的主题名称不匹配,可以使用元素来重定向主题。预期的主题名称取决于使用的范围查找设备的类型。<remap>

 每个 .launch 文件的具体使用方法可查看这里

都设置好之后,可以启动carto来试用配置 

roslaunch cartographer_ros my_robot.launch bag_filename:=/path/to/your_bag.bag

 运行自己的 Cartographer ROS

注意:1.不要在 src 下写自己的代码,不然重新编译时可能会失败。官方教程是在install_isolated/share 文件夹下修改代码。2.默认Cartographer 的工作空间为 catkin_ws,自行修改。3.雷达功能包lsn10自行修改

2D 建图 + 激光雷达​

1. 在 Cartographer ROS 中使用雷达

在 Cartographer 的工作空间下编译 lsn10 功能包。

将雷达的功能包放至 catkin_ws/src/cartographer_ros 下, 。

运行以下命令,编译新的工作空间:

# 重新编译工作空间
# 如果碰到报错,删除所有已编译出来的文件,再次编译
catkin_make_isolated --install --use-ninja

看到 Finish 字眼说明编译成功。 

catkin lsn10 and Cartographer ROS

2. 创建 .lua 配置文件

运行下列命令,复制 revo_lds.lua 文件作为自己的新的 .lua 配置文件。

# 进入 Cartographer 工作空间
cd catkin_ws
# 复制2D建图 revo_lds.lua 文件  
cp install_isolated/share/cartographer_ros/configuration_files/revo_lds.lua install_isolated/share/cartographer_ros/configuration_files/my_robot_laser_only.lua

将参数 tracking_frame 修改成雷达的frame_id,即 laser。

将参数 published_frame 修改成底盘的frame_id,即 base_link。

将参数 provide_odom_frame 设置为 false。
没有用到里程计,所以将其设置成 false。

tracking_frame: SLAM 算法跟踪的帧的 ROS 帧 ID。
​tracking_frame 一般设置为发布频率最高的传感器的 frame_id,Cartographer 将会把其他数据都转移到该坐标系下进行计算。

published_frame: 要用作发布坐标的子帧的 ROS 帧 ID。
如果 odom 框架由系统的不同部分提供,则设置为 odom。
在这种情况下将发布 map_frame 中 odom 的坐标。否则,将其设置为 base_link 可能是合适的。

具体代码如下:

tracking_frame = "laser"
published_frame = "base_link"

provide_odom_frame = false

将下列参数 TRAJECTORY_BUILDER_2D.min_range , TRAJECTORY_BUILDER_2D.max_range 修改成你所用的雷达的具体扫描参数。

具体代码如下:

TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 11.

3. 创建 .launch 配置文件

运行下列命令,复制 demo_revo_lds.launch 文件作为自己的新的 .launch 配置文件。

# 进入 Cartographer 工作空间
cd catkin_ws
# 复制2D建图 demo_revo_lds.launch 文件
cp install_isolated/share/cartographer_ros/launch/demo_revo_lds.launch install_isolated/share/cartographer_ros/launch/my_robot_laser_only.launch

修改 cartographer_node 节点,映射雷达的 topic,即 /scan。

将 rviz 节点切换至你所用的 .rviz 文件。

关闭运行 bag 的节点。

增加 map 与 laser 的 tf 关系节点。

具体代码如下:

<launch>
  <param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename my_robot_only_laser.lua"
      output="screen">
    <remap from="scan" to="/scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node pkg="tf2_ros" type="static_transform_publisher" name="laser_broadcaster" 
      args="0 0 0 0 0 0 map laser" />

  <!-- 请修改成自己的 rviz 路径 -->      
  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="/home/zr/.ros/laser.rviz" />
</launch>

4. 合并雷达的功能包与 Cartographer ROS

将 lsn10 节点写进上述 .launch 文件。

节点代码如下:

  <include file="$(find lsn10)/launch/lsn10.launch" />

整体 my_robot_laser_only.launch 代码如下:

<launch>
  <include file="$(find lsn10)/launch/lsn10.launch" />

  <param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename my_robot_only_laser.lua"
      output="screen">
    <remap from="scan" to="/scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node pkg="tf2_ros" type="static_transform_publisher" name="laser_broadcaster" 
      args="0 0 0 0 0 0 map laser" />
      
  <!-- 请修改成自己的 rviz 路径 -->      
  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="/home/zr/.ros/laser.rviz" />
</launch>

5. 运行建图程序

运行以下命令,启动建图程序。

# 进入 Cartographer 工作空间
cd catkin_ws
# 不能编译!否则刚刚写的代码就没了!!
# 原因为 src 里没有改动,编译的话会将 install_isolated恢复成初始状态。
# 常规,source 工作空间环境
source install_isolated/setup.bash 
# 运行程序
roslaunch cartographer_ros my_robot_laser_only.launch

6. 在 rviz 中添加 topic

添加 Submaps 话题即可看到雷达建图。 

Submaps

其他 topic 可自行添加。

主要使用的 topic 为 Map 、TF、LaserScan 、MarkArray 。

最终运行效果如下: 

retult of laser

保存已建好的地图​

使用 Cartographer 建图后需要在工作空间输入以下命令进行保存地图。

1. 停止建图

# 停止地图构建
rosservice call /finish_trajectory 0

2. 保存地图

# 保存地图
rosservice call /write_state "{filename: '<绝对路径>/‘<地图名字>’.pbstream'}"
# 如:
rosservice call /write_state "{filename: ${HOME}/catkin_ws/map/map.pbstream}"

3. 将 Cartographer 保存的地图转换为 ROS 格式下的栅格地图

rosrun cartographer_ros cartographer_pbstream_to_ros_map -pbstream_filename=<绝对路径>/<地图名字>.pbstream -map_filestem=<绝对路径>/<地图名字>
# 如:
rosrun cartographer_ros cartographer_pbstream_to_ros_map -pbstream_filename=${HOME}/catkin_ws/map/map.pbstream -map_filestem=${HOME}/catkin_ws/map/map>

为了更加方便地保存地图,还可以将这些命令做成一个脚本文件 CartographerSaveMap.sh。​

脚本文件 CartographerSaveMap.sh 的代码如下:

#!/bin/bash
# enter the workspace
source install_isolated/setup.bash

# map  folder 
map_dir="${HOME}/catkin_ws/map"      
 # map name defined as current datatime   
map_name=$(date +%Y%m%d_%H-%M-%S)  

# check the file folder exist
if [ ! -d "$map_dir" ];then
  echo "文件夹不存在, 即将创建文件夹"
  mkdir -p $map_dir
fi

# finish slam
rosservice call /finish_trajectory 0

# make pbstream
rosservice call /write_state "{filename: '$map_dir/$map_name.pbstream'}"

# pbstream to map
rosrun cartographer_ros cartographer_pbstream_to_ros_map \
-pbstream_filename=$map_dir/$map_name.pbstream \
-map_filestem=$map_dir/$map_name

给脚本赋予权限:

  sudo chmod 777 CartographerSaveMap.sh

运行脚本文件即可保存地图。

文末为Lua配置参考。

Lua配置参考:

map_frame

用于发布子图的 ROS 帧 ID,姿势的父帧, 通常是 “map”。

tracking_frame

SLAM 算法跟踪的帧的 ROS 帧 ID。如果 IMU ,则它应该位于其位置,尽管它可能会旋转。常见的 choice 为 “imu_link”。

published_frame

用作发布姿势的子帧的 ROS 帧 ID。例如 如果 “odom” 帧由系统的不同部分提供,则为 “odom”。在 在这种情况下,map_frame中 “Odom” 的姿势将被公布。否则 将其设置为 “base_link” 可能是合适的。
​
odom_frame

仅当 provide_odom_frame 为 true 时使用。published_frame 和 map_frame 之间的帧,用于发布(非闭环)本地 SLAM 结果。通常是 “odom”。

provide_odom_frame

如果启用,则本地非循环闭合的连续姿势将发布为 map_frame中的odom_frame。

publish_frame_projected_to_2d

如果启用,则发布的姿势将被限制为纯 2D 姿势(无滚动、 pitch 或 z 偏移量)。这可以防止 2D 模式(例如,如果姿势 应作为“基本足迹”式框架发布)

use_odometry

如果启用,则订阅主题 “odom” 上的 nav_msgs/Odometry。里程计 必须提供,并且该信息将包含在 SLAM 中。

use_nav_sat

如果启用,则订阅主题 “fix” 的 sensor_msgs/NavSatFix。 在这种情况下,必须提供导航数据,并且信息将是 包含在全局 SLAM 中。

use_landmarks

如果启用,则订阅主题上的 cartographer_ros_msgs/LandmarkList “地标”。必须提供地标,如 cartographer_ros_msgs/LandmarkList 中的 cartographer_ros_msgs/LandmarkEntry。如果提供了 cartographer_ros_msgs/LandmarkEntry 数据,则信息 将根据 cartographer_ros_msgs/LandmarkEntry 的 ID 包含在 SLAM 中。cartographer_ros_msgs/LandmarkList 应以与其他传感器相当的采样率提供。该列表可以为空,但必须提供,因为 Cartographer 对传感器数据进行严格时间排序,以使地标具有确定性。但是,可以将 trajectory builder 选项 “collate_landmarks” 设置为 false,并允许使用非确定性但也是非阻塞的方法。

num_laser_scans

要订阅的 laser scan 主题数。订阅 sensor_msgs/LaserScan 关于一个激光扫描仪的 “scan” 主题或主题 “scan_1”、“scan_2”等,用于多个激光扫描仪。

num_multi_echo_laser_scans

要订阅的多回波激光扫描主题的数量。订阅 sensor_msgs/MultiEchoLaserScan 关于一台激光扫描仪的“echoes”主题, 或多个激光扫描仪的主题 “echoes_1”、“echoes_2” 等。

num_subdivisions_per_laser_scan

将每个接收的(多回波)激光扫描拆分成的点云数。 细分扫描可以取消翘曲获取的扫描,而 扫描仪在移动。有一个相应的 trajectory builder 选项,用于 将细分的扫描累积到将用于扫描的点云中 匹配。

num_point_clouds

要订阅的点云主题数。订阅 sensor_msgs/PointCloud2 的 “points2” 主题,用于一台测距仪,或 多个测距仪的主题 “points2_1”、“points2_2” 等。

lookup_transform_timeout_sec

超时(以秒为单位),用于使用 tf2 查找转换。

submap_publish_period_sec

发布子贴图姿势的间隔(以秒为单位),例如 0.3 秒。

pose_publish_period_sec

发布姿势的间隔(以秒为单位),例如 5e-3 的频率 200 赫兹。

publish_to_tf

启用或禁用提供 TF 转换。

publish_tracked_pose

允许将跟踪的姿势作为 geometry_msgs/PoseStamped 发布到主题 “tracked_pose”。

trajectory_publish_period_sec

发布轨迹标记的间隔(以秒为单位),例如 30e-3 持续 30 毫秒。

rangefinder_sampling_ratio

固定测距仪消息的比率采样。

odometry_sampling_ratio

里程计消息的固定比率采样。

fixed_frame_sampling_ratio

固定帧消息的固定比率采样。

imu_sampling_ratio

IMU 消息的固定比率采样。

landmarks_sampling_ratio

固定地标消息的比率采样。

​

40-总结-【cartographer源码分析】系列的第四部分【io源码分析】 【cartographer源码分析】系列的第四部分【io源码分析】。 阅读详情

相关推荐

Cartographer 代码阅读分析-2

接着上一篇的分析, 主要分析ceres_scan_matcher_.Match() 与 sparse_pose_graph_->AddScan()。 先看ceres_scan_matcher_.Match() ,转到mapping_2d\scan_matching\ 里找它的头文件与源文件。 CeresScanMatcher::Match()主要就是构造约束条件,然后调用ceres库完成优

这趋势是要成为IT男啊的博客 6474

【cartographer_ros】四: 发布和订阅里程计odom信息

上一节介绍了激光雷达Odometry传感数据的订阅和发布。本节会介绍里程计Odom数据的发布和订阅。里程计在cartographer中主要用于前端位置预估和后端优化。

Cloud_H的博客 8644

cartographer源码分析(49)-mapping-odometry_state_tracker.h

文件:dometry_state_tracker.h

slamcode的博客 1344

20.04/cartographer源码保姆级教程(全是坑已经踩完,太折磨了)

源码安装编译cartographer

qq_53004665的博客 1万+

机器人开发入门:从ROS2环境搭建到SLAM建图与自动导航实战

移动机器人开发涉及感知、定位、建图与路径规划等关键技术,而ROS2作为开源机器人操作系统的核心框架,提供了从节点通信到导航仿真的完整工具链。SLAM技术使机器人能在未知环境中实时构建地图并确定自身位置,Navigation2则在此基础上实现路径规划与自主避障。本文围绕一套完整的机器人导航实战流程,介绍在Ubuntu 22.04环境下安装ROS2 Humble、创建功能包、运行Gazebo仿真,并结合TurtleBot3完成SLAM建图、地图保存与自动导航的全过程。内容兼顾概念原理与工程操作,适合希望快速跑通

weixin_33863087的博客 356

基于ROS2的Fishbot机器人:从Gazebo仿真到Cartographer建图与Nav2导航全流程实战

机器人操作系统(ROS2)是构建现代机器人应用的核心框架,它通过节点通信机制实现了模块化开发。其核心原理在于提供标准化的消息接口与工具链,从而高效整合感知、规划与控制模块。在移动机器人领域,这一技术价值尤为突出,它能将仿真环境、传感器数据处理、同步定位与地图构建(SLAM)以及自主导航等复杂任务串联成完整工作流。典型的应用场景包括服务机器人、自动导引车(AGV)和无人驾驶系统的原型开发与算法验证。本文聚焦于一个具体的工程实践案例:使用ROS2 Humble,在Gazebo物理仿真环境中部署一个差速轮式机器人

weixin_30832405的博客 324

cartographer 源码解析(六)

相关链接: cartographer 源码解析(一) cartographer 源码解析(二) cartographer 源码解析(三) cartographer 源码解析(四) cartographer 源码解析(五)

To be a better man 2546

ROS2机器人建模仿真:fishbot源码与麦克纳姆轮导航

在机器人开发中,仿真环境是算法验证的低成本试验场。URDF/Xacro用于描述机器人本体结构,麦克纳姆轮则赋予机器人全向移动能力,其运动学解算是实现精准控制的关键。Gazebo作为高集成度仿真平台,能模拟雷达、IMU等传感器,结合Cartographer与Nav2,可完成从建图到自主导航的完整闭环。这些技术普遍应用于移动机器人研发。以fishbot源码包为例,详细拆解ROS2机器人建模、仿真、导航的实现流程,为开发者提供可落地的工程参考。

weixin_30566111的博客 387

Cartographer源码篇:源码分析(1)

本文主要对cartographer_ros的文件结构、节点、代码、流程进行了简单的梳理,理解cartographer_ros是cartographer在ROS平台的封装。

slamml 2761

ROS2机器人导航实战:从SLAM建图到Nav2路径规划的完整系统解析

机器人自主导航是现代移动机器人领域的核心技术,其核心原理是通过传感器感知环境,利用SLAM算法同时完成定位与地图构建,再基于已知地图进行路径规划与运动控制。这项技术融合了多传感器融合、状态估计、运动规划等多个学科,是实现仓储物流、服务机器人、自动驾驶等应用的关键。在工程实践中,ROS2作为主流的机器人操作系统,为导航系统的模块化开发提供了标准框架。通过Gazebo物理仿真环境,开发者可以在高保真的虚拟场景中验证算法,而无需依赖昂贵的实体机器人。本文以Fishbot项目为例,深入剖析了如何整合Cartogra

weixin_33769125的博客 371

从公式到实践:用SPSS解锁香农多样性指数的生态洞察

本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。

weixin_30832143的博客 465

Cartographer源码简读

Cartographer源码简读

xiner0114的博客 2830

深信服防火墙路由模式开局部署-手把手教学(小白篇)

手把手教学,拿到深信服的防火墙路由模式该如何开局?

m0_64423407的博客 2万+

GraphSLAM算法源码Cartographer阅读

GraphSLAM是目前比较主流的建图方法之一,它的思想是将机器人的位姿以及地图上的特征抽象成图,每一时刻的位姿可以看作是图的顶点,而位姿之间由观测而产生的约束看作是图的边,那么建图的过程就是将图的点与边进行优化的过程。 GraphSLAM的大致流程如下: 1.首先根据运动模型初始化每一时刻的位姿,无视测量数据。 2.将一系列控制量、测量值、位姿的估计通过线性化方法构造信息矩阵与信息矢量。 ...

weixin_42048023的博客 2102

ESP32-S3数字麦克风入门:手把手教你用Arduino IDE读取MSM261S4030H0R的I2S数据

本文详细介绍了如何使用Arduino IDE读取MSM261S4030H0R数字麦克风的I2S数据,涵盖硬件连接、代码编写和数据可视化全流程。重点解决I2S引脚配置、环境噪声过滤和声波观察等实际问题,适合ESP32-S3开发者快速上手数字麦克风应用。

weixin_26742753的博客 318

【FPGA】Robei EDA的使用(10)————如何更新EDA的使用license

#海卑而下,能聚众水;学问笃实,以生光辉。 有的时候,有些问题自己通过查找资料解决,宁愿磨难一下,走点弯路,但收获更深刻的认知;不过,有些问题,问一下别人,可能会避免自己耗费过多时间做无用工,这些问题问会的人是极好的。但是怎样把握这个问题的类型,大约只能靠经验了~ (问我为何出此感言,谁叫我纠结了两天的问题,被人家一句话解决,我这个恨啊) ————————————————————正文开始的分割线———————————————— Robei EDA在使用上会有一个注册码,这个license在获取之后,每一次的

Ninquelote的博客 1004

ROS2+TurtleBot3+Cartographer+Nav2建图保存

最近在学习Cartographer框架,没有真实小车,想着就在模拟器里跑,我们在学习初期,可以运用官方提供的Turtlebot3模型来进行进行建图,先能跑起来,再细看源码。废话不多,直接上命令。因为目前正在看Cartographer源码,后面会慢慢更新Cartographer源码阅读分享笔记~

Ambtion_123的博客 1596

PCB 传输线教程(上):基于 Polar Si9000 与嘉立创工艺的传输线设计

理论线宽是W1,但在实际制作时,铜线顶部会有部分被刻蚀掉,表面被刻蚀后的宽度表示为W2,一般取经验值W2=W1-1,单位为 mil,Si9000 里面默认也是采用 W1,W2 相差 1 mil 的方式进行计算。表面阻抗结构就是简单的在一个平面上走信号线,以另外一个平面为地平面,信号线所在平面不进行铺铜(或铺铜间距大到可以忽略不计),这是最简单的一种结构,只需要知道介质层的厚度和介电常数、信号线厚度就可以进行阻抗计算。这个也是经验值,一般保持默认,或者可以填入 C1 相同的值(即忽略堆积)。

Surrea1的博客 1万+

cartographer源码阅读二 Node

输入:NodeOptions的变量,mapbuilder类型的指针,tf,是否启用性能监控collect_metrics,默认关闭。可以看到子图的话题名早就被定义了,选中参数F12可以看到下面都是提前定义的话题和服务。

weixin_49821329的博客 78

DINOv3 网络结构解析:从 ViT 到 ConvNeXt 的双路线设计

本文深入解析了DINOv3网络结构的双路线设计,包括ViT和ConvNeXt两种主干架构。ViT路线通过轴向旋转位置编码解决了传统ViT对固定分辨率的依赖,而ConvNeXt路线则优化了卷积设计,提升了实时处理能力。文章还探讨了Gram Anchoring、混合自监督目标等关键技术,展示了DINOv3在多任务和多模态应用中的强大潜力。

weixin_29214199的博客 564

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1095

cartographer源码阅读三-sensor_bridge

这个类涉及到两个类Rigid3d和TfBridge。

weixin_49821329的博客 240

基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计

一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)

zhusl6688的博客 528

ROS下编译谷歌cartographer

ROS下编译谷歌cartographer 目录 ROS下编译谷歌cartographer 一、介绍 二、编译安装 三、cartographer测试 四、cartographer实体运行 一、介绍 2016年10月5日,谷歌宣布开放一个名为cartgrapher的即时定位与地图建模库,开发人员可以使用该库实现机器人在二维或三维条件下的定位及建图功能,cartgraph...

山城盛夏的博客 1358

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

cartographer源码阅读---位姿推测器

有3中位姿推测的方法, 但是不同情况下用哪一个呢?使用imu, 使用里程计平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间姿态的预测: 通过imu的角速度乘以时间使用imu, 不使用里程计平移的预测: 通过pose数据队列开始和末尾的2个数据计算出的线速度乘以时间姿态的预测: 通过imu的角速度乘以时间不使用imu, 使用里程计平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间。

qq_41663016的博客 1219

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从代码理解 cartographer 2

从上一篇开始, 我很着急地去希望看到雷达信息是如订阅的. 只要有了订阅的开始, 那么数据就会被回调到回调函数,才知道那些VoxelFilter所处理的数据, 在某个特定的情况下,实际上是怎么做的. 我首先是按照着上面的想法,开始看回调函数. 当到了某一定程度之后. 会产生迷茫, 这到底调用的是哪个对象的哪个函数. 这样主要是因为谷歌为了同时适用3D和2D情况. 用了虚类设计了许多接口...

weixin_30362801的博客 246

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: Cartographer源码阅读1
下一篇: ICP算法学习1:原理推导
十点后下班
博客等级 码龄4年 27粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值