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


    使用单纯的雷达数据进行 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                              # 如果失败了请重复
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

    总共有五个功能包

    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
    
    • 1
    • 2
    • 3

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


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

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


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

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


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

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


    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)
    
    
    
      
        false   
        40 
    ...
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    里程计的描述消息
    # 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    脚本运行

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

    roslaunch mini_gmapping laser_odom_gmapping.launch


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


    🌸🌸🌸完结撒花🌸🌸🌸


    🌈🌈@Redamancy🌈🌈


  • 相关阅读:
    Hadoop3教程(十二):MapReduce中Shuffle机制的概述
    2023 CCF国际AIOps挑战赛,报名倒计时!|截止时间9月15日
    HyperLynx(十七)SATA的设计与仿真
    js函数新东西——匿名函数
    北邮22级信通院数电:Verilog-FPGA(6)第六周实验:全加器(关注我的uu们加群咯~)
    CSS魔法!如何将任意CSS类型转换为数值?
    DataBinding使用报错
    对比两个数组中 每个对应位置的元素大小 返回每个对比结果组成的列表 numpy.fmin()
    毅速课堂:3D打印随形水路设计应注意什么?
    C++之map_set的使用
  • 原文地址:https://blog.csdn.net/Msyusheng/article/details/126612742