ROS 位置姿态Odometry仿真模拟(gmapping)

article/2025/7/22 14:42:55

使用单纯的雷达数据进行 2D 建立图像的时候,建图的效果和雷达的性能也有关系,雷达的扫描频率会随着小车的移动速度增大而变化,通过更改扫描的频率来更新栅格地图的完整性。


点击DEMO-LINK

在这里插入图片描述


所需要的环境

ubuntu 18.04 + ROS Melodic desktop full #ROS 别的可运行版本也可以

主要文件夹

mini_sim18_ws 这个文件夹是主要的工作空间,通过 roslaunch 执行 launch 文件去观察和控制 demo
original_neor_mini 这个文件夹是一个原始的 neor _ mini urdf 文件,你可以自己构建
pictures 全过程图片

下载编译

# 打开一个终端
git clone https://github.com/COONEO/neor_mini.git
cd neor_mini/mini_sim18_ws
rosdep install --from-paths src --ignore-src -r -y     # 需要一定时间# 编译空间
catkin_make                              # 如果失败了请重复

如果出现依赖错误的的话,类似于下面的情况
在这里插入图片描述
去文件夹里面将一下两个文件夹删除
在这里插入图片描述

然后重新编译
得到的编译结果会生成可执行文件(包含各个功能包的编译文件)
在这里插入图片描述

总共有五个功能包

neor_mini # 用 urdf 文件存储 neor mini 外观的说明
steer_drive_ros # 运动学 ROS 插件
steer_mini_gazebo # 存储发射文件的新近迷你模型可视化在露台
mini_gmapping # 存储启动文件和 gmap params 文件
mini_navigation # 存储启动文件和导航参数文件

执行 Demo

查看demo小车模型 Rviz
cd ~/neor_mini/mini_sim18_ws
source devel/setup.bash
roslaunch neor_mini display.launch

在这里插入图片描述
可以通过更改滑动条更改模型的脚点链接位置


查看仿真雷达模型 urdf
cd ~/neor_mini/mini_sim18_ws
source devel/setup.bash
roslaunch neor_mini display_gazebo_sensors.launch

在这里插入图片描述
同样也可以可以通过更改滑动条更改模型的脚点链接位置


gazebo 仿真 demo 测试
cd ~/neor_mini/mini_sim18_ws
source devel/setup.bash
roslaunch steer_mini_gazebo steer_mini_sim_sensors.launch

在这里插入图片描述
通过使用小窗口上的速度和方向控制小车,控制小车的运行轨迹


使用 neor_mini urdf 进行 Gmapping建图
cd ~/neor_mini/mini_sim18_ws
source devel/setup.bash
roslaunch mini_gmapping gmapping_steer_mini_sensors.launch

在这里插入图片描述
同样也是可以通过控制小窗上的键位来控制小车运动的位置


rf20_laser_odometry ROS 包可调参数

上述仓库的 demo 用来验证(根据相邻的雷达数据帧推算出本体的2D姿态数据,结合周围的测距数据,构建对应的栅格地图)。

  • 订阅

scan (sensor_msgs/LaserScan) # 定于的雷达话题数据
tf (tf/tfMessage)         # 静态的 tf 变换

  • 发布

odom (nav_msgs/Odometry)   # 估计的里程计话题数据输出
tf (tf/tfMessage)         # 发布的odom坐标系和base_link坐标系之间的tf变换

同样的可以通过更改仿真中的扫描频率来降低性能和适用的范围

neor_mini/mini_sim18_ws/src/neor_mini/urdf
修改


![在这里插入图片描述](https://img-blog.csdnimg.cn/a26988a13d5946ab8c25913c8297b32e.png)<!------------------- 修改部分 ----------------------->
<gazebo reference="laser_link"><sensor type="ray" name="Top_laser_sensor"><visualize>false</visualize>   <!-- visual or unvisual laser ray :true or false--><update_rate>40</update_rate> <!-- 默认是 40,修改为 5 Hz -->
...
</gazebo>
<!---------------------------------------------------->

里程计的描述消息

# rf2o_laser_odometry 激光里程计节点配置 
<node pkg="rf2o_laser_odometry" type="rf2o_laser_odometry_node" name="rf2o_laser_odometry" ><param name="laser_scan_topic" value="/scan"/>   # topic where the lidar scans are being published<param name="odom_topic" value="/odom" />        # topic where tu publish the odometry estimations<param name="publish_tf" value="true" />         # wheter or not to publish the tf::transform (base->odom)<param name="base_frame_id" value="/base_link"/> # frame_id (tf) of the mobile robot base. A tf transform from the laser_frame to the base_frame is mandatory<param name="odom_frame_id" value="/odom" />     # frame_id (tf) to publish the odometry estimations    <param name="init_pose_from_topic" value="" />   # (Odom topic) Leave empty to start at point (0,0)<param name="freq" value="5.0"/>                 # Execution frequency.<param name="verbose" value="true" />            
</node>

脚本运行

根据上述描述完里程计之后,可以使用 gmapping 来建图,然后运行脚本

roslaunch mini_gmapping laser_odom_gmapping.launch


仓库示例中还有很多可以调用
例如:
雷达点云3D 建图
在这里插入图片描述
Updating…


🌸🌸🌸完结撒花🌸🌸🌸


🌈🌈@Redamancy🌈🌈



http://chatgpt.dhexx.cn/article/yYLkIggj.shtml

相关文章

rospy Odometry天坑小计

rospy Odometry天坑小计 在使用 python 自己搭建 ros 控制小车的上位机接口时&#xff0c;遇到了一个非常奇怪的问题&#xff0c;发布里程计的时候&#xff0c;一旦里程计得到订阅&#xff0c;发布者就会报 ndarray 属性找不到错误&#xff0c;乍一看着实让人脑瓜疼&#xff0…

Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(一)

Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析&#xff08;一&#xff09; 1. LiDAR inertial odometry and mapping简介2. Tightly coupled LiDAR inertial odometry2.1 LiDAR-IMU odometry overview2.2 IMU and pre-integration2.3 De-skewing and feature e…

SLAM——入门到放弃:ROS里程计(odometry)

ROS gmapping导航包&#xff0c;要求有2 个 输入&#xff0c;一个是激光数据&#xff0c;另一个就是里程计信息。 里程计又包含2 个方面的信息&#xff1a; 位姿&#xff08;位置和转角&#xff09;&#xff0c;即&#xff08;x,y,θ&#xff09;是速度&#xff08;前进速度和…

Ros Odometry获取机器人位置-python 代码打印

纪念一下&#xff0c;辛苦了一天多&#xff0c;终于找出来了&#xff0c;经过网上的资料反向推出结构。 博主需要通过机器人的实时位置来进行计算。从网上查阅得知nav_msgs/Odometry消息中存储机器人的位置和速度估计等。 下面展示一下操作流程&#xff1a; 1.首先通过 ros…

ROS里程计消息nav_msgs/Odometry的可视化方法

ROS中里程计的消息类型为nav_msgs/Odometry&#xff0c;该消息类型具有以下结构&#xff1a; 可以看到&#xff0c;里程计消息中的pose包含了位置pose.position和姿态pose.orientation 在ROS中&#xff0c;有一种常用消息类型为nav_msgs/Path&#xff0c;可视化的方法为&#…

基于rf2o_laser_odometry纯激光里程计的gmapping建图

ROS环境&#xff1a;ubuntu16.04 & ROS kinetic激光雷达&#xff1a;EAI-X4 or RPlidar-A1激光里程计&#xff1a;rf2o_laser_odometry建图&#xff1a;gmapping 对于很多刚入门的同学&#xff0c;购买一台带有高精度轮式里程计的ROS小车经济上往往不允许。但是大多数同学…

nav_msgs/Odometry消息的发布和tf变换

一。ROS使用tf来决定机器人的位置和静态地图中的传感器数据&#xff0c;但是tf中没有机器人的速度信息&#xff0c;所以导航功能包要求机器人 能够通过里程计信息源发布包含速度信息的里程计nav_msgs/Odometry 消息。 本篇将介绍nav_msgs/Odometry消息&#xff0c;并且通过代码…

【视觉SLAM】DM-VIO: Delayed Marginalization Visual-Inertial Odometry

L. v. Stumberg and D. Cremers, “DM-VIO: Delayed Marginalization Visual-Inertial Odometry,” in IEEE Robotics and Automation Letters, vol. 7, no. 2, pp. 1408-1415, April 2022, doi: 10.1109/LRA.2021.3140129. 论文阅读方法&#xff1a;Title&#xff0c;Abstract…

DSO(Direct Sparse Odometry)

DSO&#xff08;Direct Sparse Odometry&#xff09; 文章目录 1. 简述2. 概述3. 框架流程3.1 代码框架与数据表示3.2 VO流程 4. DSO详细介绍4.1 残差的构成与雅可比4.2 滑动窗口的维护与边缘化4.3 零空间&#xff0c;FEJ4.4 其他零散的模块和算法 5. 光度标定6. 评述7. 资料与…

SVO(SVO: fast semi-direct monocular visual odometry)

SVO2系列之深度滤波DepthFiltersvo_noteSVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;SVO 半直接视觉里程计【DepthFilter】深度滤波器【svopro】代码梳理 SVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;翻译 1、…

航迹推演

​ 做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换…

航迹推演(Odometry)

做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换。…

大数据基础编程+实验

本文仅用于分析和记录在校期间学习大数据分析课程的一点心得体会。 1、Ubuntu系统的安装和使用 本文采用Ubuntu16.04系统&#xff0c;安装系统省略&#xff0c;选择镜像后一直点击下一步 1.1 进入系统后&#xff0c;调整输入法&#xff0c;将输入法切换至中英文切换 1.2为…

Python数据库编程pymysql

Python数据库编程pymysql 一、数据库编程介绍 数据库编程就是针对数据库的操作&#xff0c;通过编写程序的方式&#xff0c;让程序做为数据库的客户端进行数据库操作。 对于MySQL的操作我们可以通过SQL语句&#xff0c;但是有很多情况下我们需要写入MySQL的数据非常多&#…

过程化SQL数据库编程

一、过程化SQL的块结构 基本的SQL是高度非过程化的语言。嵌入式SQL将SQL语句嵌入程序设计语言&#xff0c;借助高级语言的控制功能实现过程化。过程化SQL是对SQL的扩展&#xff0c;使其增加了过程化语句功能。 过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的…

Java的数据库编程:JDBC

目录 一、JDBC是什么&#xff1f; 二、使用步骤 1.首先将JDBC的包引进java中 2.创建新的类来写代码 3.描述你的服务器 4.设置你的数据库地址,数据库用户名,数据库密码 5.连接数据库 6.书写你所要执行的SQL语句 7.把字符串风格的sql转化成一个对象 8.执行语句 9.回收资…

Python数据库编程

操作SQLite3数据库 从Python3.x版本开始&#xff0c;在标准库中已经内置了SQLlite3模块&#xff0c;它可以支持SQLite3数据库的访问和相关的数据库操作。在需要操作SQLite3数据库数据时&#xff0c;只须在程序中导入SQLite3模块即可。Python语言操作SQLite3数据库的基本流程如…

实验7 数据库编程

第1关 定义一个名为PROC_COUNT的无参数存储过程 任务描述 定义一个名为PROC_COUNT的无参数存储过程&#xff0c;查询工程名称中含有“厂”字的工程数量&#xff0c;并调用该存储过程。 相关知识 1、工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)…

C++数据库编程简介

C数据库编程简介 C数据库编程 ODBC简介 C数据库编程 ODBC连接SQL Server数据库 C数据库编程 ODBC插入数据 C数据库编程 ODBC查询数据 C数据库编程 ODBC删除数据 C数据库编程 ODBC修改数据 C数据库编程 ODBC连接MySQL增删改查数据 C数据库编程 MySQL Connecttor C简介 …

游戏设计模式——面向数据编程(转)

作者&#xff1a;KillerAery 出处&#xff1a;http://www.cnblogs.com/KillerAery/ 随着软件需求的日益复杂发展&#xff0c;远古时期面的向过程编程思想才渐渐萌生了面向对象编程思想。 当人们发现面向对象在应对高层软件的种种好处时&#xff0c;越来越沉醉于面向对象&…