Webots小车与Gampping建图仿真与ORB3算法实践

2023-11-14

此篇博客转自本作者在古月居的博客: https://www.guyuehome.com/34537

前言:

​ 在研一的时候,由于XXX项目的需要,其中一项就是需要测试Gmapping建图,自然也要求使用ROS系统。由于之前经常在webots中进行仿真,所以想先在仿真中完成代码,再迁移实体。还有的是项目需要使用的ORB-SLAM3,便又测试了单目里程估计。这部分代码已经上传到我的Github上供大家参考(研究生小白菜福利)。这里就不贴代码了,文中会说文件和函数。先上一波图,说明是可以的。

Gmapping

​ gmapping是基于RBpf粒子滤波的,定位和建图分离,是先定位后建图的思想。机器人不断运动运动,不断观测,降低自己位置的不确定度,最后精确定位。如果只是想使用,通过ROS可以很方便调用这部分算法。对于具体的不同环境可以调节参数来获得良好效果。参数可以在gampping的node下面进行修改,每个不同的属性可以在ROS wiki gmapping网站上查询。在我的代码中,节点描述和启动在mob.launch文件中实现。

ORB3

​ ORB-SLAM3是开源视觉SLAM库,建的稀疏图,emmmmm我也不是专门研究这个视觉定位建图方向的,了解浅薄,没啥太多实践,所以这里就不在BB了:)。在我的这个项目里用来做里程估计,给的代码是没有给webots中的相机进行标定内参的,就是随便给的,主要的文件就是orb3_odom.cpp,主要功能函数就是GrabImage。启动这部分功能,运行orb3.launch就可以了。另外要很准确的在webots标定相机,没有试过,这个还得靠大家一起探索,如果有好的方法可以留言。webots的相机都是理想的(没有畸变),查查官网,估计也不是难事。再不行也可以通过一些手段反向得到相机内参,也不是不可以。

​ 在我的工程中,主要就是矫正了坐标系,测试了下效果(里程的单位不是准确的),感觉还行。突出的贡献,主要是如何和webots结合在一起仿真使用吧。题外话:webots搭建世界环境是很方便的,做视觉SLAM的可以在这个虚拟环境中先进行测试,然后在部署到硬件上,感觉开发会快不少。

webots和ROS

​ Webots平台可以说是足够简单容易上手的,基于ODE物理引擎。凡事有个但是。但是当大家想把webots和ROS一起用的时候似乎就不是那么流行。很多做ROS物理仿真的人都是在GAZEBO中实现的,但是总是有人想要用webots和ROS。总的来说,webots支持ROS还不错,在ubuntu下面只要装额外的包即可webots_ros。按照官网说的,装好环境后

​ 对于传感器初始化,我写成了一个函数,在mob.hpp下的 __Order_Init_Sensor。通过ServiceClient的形式配置传感器的time_step和使能。然后,通过 rostopic list 你就会发现传感器话题。电机貌似直接给指令,不用使能。使能的传感器会以time_step的间隔发送topic,订阅后,只要在callback函数里面处理数据就可以了。另外,给电机指令的函数我封装成 mob.hpp下 __Order_Float。 工程中的传感器没多少,如果要用其他的传感器,举一反三,照着来就会了。

​ 总的来说特别方便。就是代码的内容相比没有ROS的时候多了点,这个自己封装下就好。

​ 还有就是webots的启动可以通过webots.launch运行脚本webots_launcher.py启动,里面的参数配置仔细看下就好。

其他

​ 上面的内容都弄好了,ROS的topic接口衔接以下就好。对于ROS默认坐标系和Webots不同的问题,我的解决办法是自己在callback函数里面进行矫正。在这个工程里,我没有控制小车pioneer3,而是直接给了个速度,向前进,但足以说明工程已经走通。工程里面,可能会多一些之前没咋见过的东西,这些都是Webots提供的一些.msg(消息格式)啊,或者.srv(ROS Service)文件,不要太在意。
​ 还有就是这个代码需要修改launch文件中的一些路径,不是简单下载编译就好了。
​ 工程在编译好后,先运行mob.launch(gmapping),再运行orb3.launch (orb3)。

​ 代码可以在这里下载

​ 最后,如果有啥问题,可以留言,古德拉克。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webots小车与Gampping建图仿真与ORB3算法实践 的相关文章

  • gazebo通过sdf搭建仿真环境和机器人Husky

    具体格式要求可参考 http sdformat org spec ver 1 6 elem sdf
  • ROS中使用VLP16激光雷达获取点云数据

    ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为 Ubuntu20 04 ROS Noetic 需要将激光雷达与PC连接 然后在设置 gt 网络 gt 有线中将IPv4改为手动 并且地址为192 168 1 100
  • ros 中ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdist

    ros 中ERROR cannot download default sources list from https raw githubusercontent com ros rosdistro master rosdep sources
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • Ubuntu镜像下载地址

    镜像地址https launchpad net ubuntu cdmirrors
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • Ubuntu18.04配置Seetaface6

    目录 一 下载安装Qt软件 1 安装包下载 2 安装Qt 3 配置 二 下载源码 三 编译工具 四 编译 1 编译OpenRoleZoo 2 编译SeetaAuthorize 3 编译TenniS 五 运行 1 修改lib路径 2 buil
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 无法在 ROS 中使用本地安装的 Protocol Buffer

    我已经安装了协议缓冲区 https developers google com protocol buffers 本地 ROS包的目录结构如下 CMakeLists txt package xml include addressbook p
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • 在webots中使用opencv的“imshow”绘制图像

    嗨 我在 webots 中使用 opencv 我想绘制图像 这是控制器 include
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • ROS 问题:libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

    当我跑步时 rosrun turtlesim turtlesim node 在 Ubuntu 上 我收到以下消息 opt ros noetic lib turtlesim turtlesim node 加载共享库时出错 libQt5Core

随机推荐

  • Tina填坑

    1 Tina3 5 编译全志X3报错 environment variable SOURCE DATE EPOCH must expand to a non negative integer less than or equal to 25
  • QT学习 --自定义的信号与槽发生重载的解决

    当自定义的信号与槽发生重载时 应该怎样处理呢 首先 要定义一个函数指针 其次 我们在声明一个成员函数的函数地址时 要把成员函数的作用域也放到指针的前面 在 student h 中 ifndef STUDENT H define STUDEN
  • MACOS 编译FFMPEG库

    1 下载ffmpeg4 3 1源码 2 解压 configure prefix usr local enable gpl enable nonfree enable libass enable libfdk aac enable libfr
  • React 使用数组遍历循环渲染页面时,数组长度和值变了但不触发渲染

    在store内定义一个数组 observable list 类组件遍历循环渲染 render return div store list map item gt return div item name div div handleAdd
  • Linux运维工程师面试知识点汇总

    Linux运维工程师面试知识点汇总 一 Linux系统部分 1 使用iptables实现端口转发 做DNAT转换 做SNAT转换 清空iptables过滤规则 2 iptables和firewall区别 3 查询系统及资源的相关状态 4 f
  • 下电影去哪里啊

    入门级 电影天堂 http www xiaopian com 飘花电影 http www piaohua com 6V电影 http www 6vdy com 圣城家园 http www cnscg org 电影FM http dianyi
  • Jenkins使用操作手册

    Jenkins使用操作手册 Jenkins的安装非常简单 可以找个Jenkins的war包 直接放在Tomcat下启动Tomcat就行 这里有war包 也可以自己在网上找 链接 https pan baidu com s 18NAW2Bfi
  • 解决sockjs.js?9be2:1609 GET http://192.168.1.1:8080/sockjs-node/info?t=1634257459…… 中的报错

    亲测可用 报错原因 在项目运行以后 network会一直调用这个接口 如果没有使用 那么就一直会报这个异常 解决方案 找到 node modules 下的 node modules sockjs client dist sockjs js
  • Mybatis 开启控制台打印sql语句

    1 无论使用mybatis plus还是mybatis 只要在springboot的配置文件 appcation yml中添加 就可以答应sql logging level org jeecg modules hdx mapper debu
  • Linux常用命令介绍

    简介 介绍linux的常用命令 shutdown h now 立即关机 shutdown h n n分钟后关机 shutdown r now 立即重启 halt 效果等效与立即关机 reboot 立即重启 sync 把内存中的数据保存到磁盘
  • c++中规范使用全局变量

    c 中规范使用全局变量 一 static extern全局变量的区别 在qt c 编程中经常出现段错误 变量声名未前置extern等问题 经排查为全局变量使用不规范导致 static extern主要用来定义全局变量 static和exte
  • webapi请求返回{"$id":"1","Message":"请求的资源不支持 http 方法“GET”。"}

    webapi请求返回 id 1 Message 请求的资源不支持 http 方法 GET 一开始时进不了断点 以为是建立Controller方法不对 是不是要加 HttpGet 没用 直接在浏览器输入 返回 id 1 Message 请求的
  • python实现ssh+scp文件上传下载,sudo免密执行命令脚本

    import paramiko from scp import SCPClient import os scpclient只能上传 下载单文件 不能传文件目录 def scp up ip list username password fil
  • 玩转文本统计利器:Linux wc命令详解与实用技巧

    原创2023 06 04 23 56 程序猿食堂 玩转文本统计利器 Linux wc命令详解与实用技巧 Linux 的 wc 命令是一个用于统计文件内容的实用工具 它主要用于计算文件中的字节数 单词数和行数 这些统计信息对于文本文件的分析和
  • 这几天,服务器被攻击了(后续,已解决)

    上周困扰我的官网被攻击的事情 今天终于解决啦 现在我分享一下继上篇文章之后 我做了哪些事情 上篇文章简书链接 点我 一 发现 上次使用D盾工具 查杀了大部分后门程序和感染文件 而且还在阿里云上做了端口域名限制 之后我打开官网访问就正常了 但
  • 学习一下vue-element-admin的使用

    要在 Windows 上使用 Vue Element Admin 您需要完成以下步骤 1 安装 Node js 访问 Node js 官网 https nodejs org zh cn 下载并安装最新版本的 Node js 2 下载 Vue
  • Linux之CGI编程小结

    一 CGI标准输入 环境变量 标准输出 1 标准输入 CGI程序的标准输入是与Web服务器的标准输出对应的 看起来就像其他可执行程序一样通过标准输入 stdin 得到输入信息 实则这些数据是由浏览器传递给服务器后再由服务器定向到CGI的输入
  • 【Java】文档注释

    文章目录 1 概念 2 简单使用演示 3 Java的文档注释的基本格式 4 javadoc的常用标签 1 概念 文档注释 在程序中采用特定的注释格式进行注释 然后通过JDK提供的工具javadoc来解析 生成一套以网页文件形式体现的程序说明
  • Demo项目介绍(Maven)

    1 Demo项目框架 为什么开发要使用框架 1 项目使用的框架 a Srping Boot Springboot可以在几分钟之内搭建好一个可以运行的项目 b Mybatis 对数据库的访问使用Mybatis c Devtools 热部署工具
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真