宇树机器狗go2—slam建图(2)gmapping

article/2025/7/21 16:59:43

0.前言

上一篇番外文章带大家认识了一下slam中常用的一些点云格式,本期文章会教大家如何让宇树的机器狗go2在仿真环境中使用gnaaping进行2d建图,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目来进行不定期更新,仿真不只限于在gazebo上实现,后面还会在isaac sim等仿真平台上教大家如何搭建,其目的还是帮助各位都能以较低的成本加入到宇树机器狗go2的学习中。gazebo的仿真对电脑的需求会低于isaac sim等仿真平台,这对实验条件要求会低很多,更很适合学校小实验室或个人进行仿真实验。

同时我也希望能有更多的开发者加入近来一起完成机器狗go2的仿真实验项目的建设,如有更好的方案和建议可以私聊或申请共创作者。

图片.png

图片.png

1.机器狗go2的cmd_vel和odom

1.启动gazebo仿真

roslaunch unitree_guide gazeboSim.launch

图片.png

2.启动控制器

这里推荐使用最高权限,按下按键2和按键5后会进入move_base模式

./devel/lib/unitree_guide/junior_ctrl
或着
rosrun unitree_guide junior_ctrl 
最高权限
sudo ./devel/lib/unitree_guide/junior_ctrl

图片.png

3.使用rostopic的cmd_vel对go2进行控制

在move_base模式下会不断的接收cmd_vel消息,随后将cmd_vel的角速度和线速度赋值到go2的运动速度上进而控制go2的运动,具体代码在FSM(有限状态机)的state_move_base.cpp中:

图片.png

代码如下:

void State_move_base::twistCallback(const geometry_msgs::Twist& msg){_vx = msg.linear.x;_vy = msg.linear.y;_wz = msg.angular.z;
}

图片.png

move_base模式和trotting模式几乎一致,只是将go2的运动控制切换成rostopic下cmd_vel话题进行运动控制,因此如果需要使用ros进行导航和路径规划则需要将go2的状态切换至move_base状态,同时在move_base模式下我们也可以使用cmd_vel话题进行机器狗的简单运动控制了

4.go2的odom

在启动控制器后go2的里程计就已经被启动了,odom的发布代码在估计器的代码中。

图片.png

代码在unitree_guide/unitree_guide/src/control下的Estimator.cpp里面。

    #ifdef COMPILE_WITH_MOVE_BASEif(_count % ((int)( 1.0/(_dt*_pubFreq))) == 0){_currentTime = ros::Time::now();/* tf */_odomTF.header.stamp = _currentTime;_odomTF.header.frame_id = "odom";_odomTF.child_frame_id  = "base";_odomTF.transform.translation.x = _xhat(0);_odomTF.transform.translation.y = _xhat(1);_odomTF.transform.translation.z = _xhat(2);_odomTF.transform.rotation.w = _lowState->imu.quaternion[0];_odomTF.transform.rotation.x = _lowState->imu.quaternion[1];_odomTF.transform.rotation.y = _lowState->imu.quaternion[2];_odomTF.transform.rotation.z = _lowState->imu.quaternion[3];_odomBroadcaster.sendTransform(_odomTF);/* odometry */_odomMsg.header.stamp = _currentTime;_odomMsg.header.frame_id = "odom";_odomMsg.pose.pose.position.x = _xhat(0);_odomMsg.pose.pose.position.y = _xhat(1);_odomMsg.pose.pose.position.z = _xhat(2);_odomMsg.pose.pose.orientation.w = _lowState->imu.quaternion[0];_odomMsg.pose.pose.orientation.x = _lowState->imu.quaternion[1];_odomMsg.pose.pose.orientation.y = _lowState->imu.quaternion[2];_odomMsg.pose.pose.orientation.z = _lowState->imu.quaternion[3];_odomMsg.pose.covariance = _odom_pose_covariance;_odomMsg.child_frame_id = "base";_velBody = _rotMatB2G.transpose() * _xhat.segment(3, 3);_wBody   = _lowState->imu.getGyro();_odomMsg.twist.twist.linear.x = _velBody(0);_odomMsg.twist.twist.linear.y = _velBody(1);_odomMsg.twist.twist.linear.z = _velBody(2);_odomMsg.twist.twist.angular.x = _wBody(0);_odomMsg.twist.twist.angular.y = _wBody(1);_odomMsg.twist.twist.angular.z = _wBody(2);_odomMsg.twist.covariance = _odom_twist_covariance;_pub.publish(_odomMsg);_count = 1;}/* ROS odometry publisher */#ifdef COMPILE_WITH_MOVE_BASE_pub = _nh.advertise<nav_msgs::Odometry>("odom", 1);#endif  // COMPILE_WITH_MOVE_BASE

2.gmapping建图

1.获取gmaaping功能包

在了解了机器狗go2的里程计和cmd_vel是怎样发布后,就可以开始使用gmapping进行slam建图了,先安装gmapping功能包

sudo apt-get install ros-noetic-gmapping

2.编写launch文件

在文件夹unitree_guide/unitree_guide/launch下创建go2_gmapping.launch文件

touch go2_gmapping.launch

图片.png

 打开go2_gmapping.launch文件

gedit go2_gmapping.launch

将下方描述添加到文件中

<launch><node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"><param name="base_frame" value="base"/> <!--机器人底盘坐标系基框架,附带在移动底盘的框架,原点--><param name="odom_frame" value="odom"/> <!--里程计坐标系里程计框架,附带在里程计的框架--><param name="map_frame" value="map"/> <!--地图坐标系地图框架,附带在地图上的框架--><param name="map_update_interval" value="0.01"/><!--地图更新速度,秒0.01--><param name="maxUrange" value="10.0"/><!--激光最大可用距离--><param name="maxRange" value="12.0"/><!--zuida juli-->        <param name="sigma" value="0.05"/><param name="kernelSize" value="3"/><!--moren:1--><param name="lstep" value="0.05"/><param name="astep" value="0.05"/><param name="iterations" value="5"/><param name="lsigma" value="0.075"/><param name="ogain" value="3.0"/><param name="lskip" value="0"/><param name="srr" value="0.1"/><param name="srt" value="0.2"/><param name="str" value="0.1"/><param name="stt" value="0.2"/><param name="minimumScore" value="0"/><param name="linearUpdate" value="0.05"/><!--线速度角速度在地图的更新--><param name="angularUpdate" value="0.0436"/><param name="temporalUpdate" value="-1"/><!--moren:-1--><param name="resampleThreshold" value="0.5"/><param name="particles" value="8"/><!--moren:30 gaicheng:8--><param name="xmin" value="-50.0"/><param name="ymin" value="-50.0"/><param name="xmax" value="50.0"/><param name="ymax" value="50.0"/><param name="delta" value="0.05"/><param name="llsamplerange" value="0.01"/> <param name="llsamplestep" value="0.01"/><param name="lasamplerange" value="0.005"/><param name="lasamplestep" value="0.005"/><!--param name="transform_publish_period" value="0.01"/--></node>
</launch>

3.建图测试

1.启动仿真

这里我们并没有更换地图场景(仅为测试使用),后面我们会更换地图场景

roslaunch unitree_guide gazeboSim.launch 

图片.png

2.启动控制器

这里推荐使用最高权限

./devel/lib/unitree_guide/junior_ctrl
或着
rosrun unitree_guide junior_ctrl 
最高权限
sudo ./devel/lib/unitree_guide/junior_ctrl

按下按键2后按下按键4,这会使得go2的有限状态机将控制状态更换为stand_trotting

图片.png

3.启动gmapping进行slam建图

启动我们在上方创建的gmapping建图的launch文件。

roslaunch unitree_guide go2_gmapping.launch 

图片.png

4.打开rviz并进行配置

rviz

图片.png

点击下方添加add

图片.png

添加地图

点击宇树机器狗go2—slam建图(2)gmapping查看全文


http://www.hkcw.cn/article/pAYbMInCmY.shtml

相关文章

CVE-2019-17558源码分析与漏洞复现

漏洞概述 漏洞名称&#xff1a;Apache Solr Velocity 模板注入远程命令执行漏洞 漏洞编号&#xff1a;CVE-2019-17558 CVSS 评分&#xff1a;9.8 影响版本&#xff1a;Apache Solr 5.0.0 - 8.3.1 修复版本&#xff1a;Apache Solr ≥ 8.4.0 漏洞类型&#xff1a;远程代码执行&…

Linux入门——入门常用基础指令(3)

文章目录 入门常用基础指令(3)grep指令压缩解压打包压缩的必要性zip/unzip指令关于rzsz的操作tar指令(重要) bc指令uname指令shutdown指令history指令几个常用的热键ctrl c和ctrl dctrl rTab按键 入门常用基础指令(3) 入门Linux的常用指令还是比较多的。本篇文章是Linux入门部…

常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY

网传压缩算法对比表 算法压缩率压缩速度解压速度支持流式压缩适用场景LZ4低极快极快是实时数据压缩、日志压缩、内存缓存等Zstandard高快快是文件压缩、网络传输、数据库备份等Brotli很高中等快是静态资源压缩&#xff08;HTML、CSS、JS&#xff09;等LZO低极快快是嵌入式系统…

Tkinter软件——显示txt标签的目标水平边框图像

代码&#xff1a; import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

学习vue3阶段性复习(插槽,Pinia,生命周期)

目录 插槽(匿名插槽&#xff0c;具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(统一管理&#xff0c;共享数据&#xff09; pinia概述 安装和使用Pinia 1 使用命令下载Pinia 2 再main.js中导入&#xff0c;注册到vue框架中 3使用pinia 持久化存储插件 1 第一步&…

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…

车载通信网络 --- OSI模型中传输层、会话层、表示层和应用层

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台&#xff0c;融合后端即服务&#xff08;Backend as Service&#xff09;和LLMOps理念&#xff0c;使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面&#xff1a;提供简洁明了的操作界面&#xff0c;使得用户能够…

Java类和对象详解

文章目录 1.初步认识2.类的定义与实例化2.1 类的定义2.2 类的实例化与使用 3.this关键字4.对象的构造和初始化4.1 默认初始化4.2 就地初始化4.3 构造方法初始化 5.对象的打印6.包的理解6.1 导入包中的类6.2 自定义包6.3 包访问权限 7.封装7.1 访问限定符详解 8.static关键字8.1…

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

武警智能兵器室系统架构设计与关键技术解析

在现代化武警部队建设中&#xff0c;武器弹药的安全管理与快速响应能力直接影响部队战斗力。本文基于某实战化智能兵器室建设案例&#xff0c;深入解析其系统架构设计、关键技术实现及创新管理机制&#xff0c;为安防领域提供可借鉴的解决方案。 整体拓扑结构 系统采用分层分布…

HTML5 列表、表格与媒体元素、页面结构分析

1. 列表 无序列表 有序列表 定义列表 列表对比 2. 表格 跨列 跨行 跨行和跨列 3. HTML5的媒体元素 视频元素 注意&#xff1a;autoplay现在很多浏览器不支持了&#xff01; 音频元素 4. 页面结构分析 5. 总结

中文文本分析及词云生成

一、代码解析&#xff08;按执行顺序&#xff09; 1. 库导入 import jieba # 中文分词工具 from wordcloud import WordCloud # 词云生成器 from collections import Counter # 词频统计 import matplotlib.pyplot as plt # 可视化 import numpy as np # 图像矩阵处理 f…

芯片手册解读

一&#xff1a; 1.这是一款差分转单端的芯片&#xff1a; 2.给出了逻辑高低的识别门限&#xff1a;并不是大于100mv和小于-100mv就识别不到了——而是大于100mv和小于-100mv都可以识别到&#xff0c;手册的意思仅仅代表门限节点而已&#xff0c;完全可以在进入门限后的其他电…

LangChain-Tool和Agent结合智谱AI大模型应用实例2

1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…

专业级图片分割解决方案

在日常处理图片的过程中&#xff0c;我们常常会遇到需要将一张图分割成多个小图的情况。这一款高效又实用的图片分割工具——它操作简单、功能强大&#xff0c;关键是完全免费开源&#xff0c;适合所有有图像处理需求的朋友&#xff01; 在使用之前&#xff0c;先花几分钟把它…

Re--题

一&#xff0e;[NSSCTF 2022 Spring Recruit]easy C 直接看for循环&#xff0c;异或 写代码 就得到了flag easy_Re 二&#xff0e;[SWPUCTF 2021 新生赛]非常简单的逻辑题 先对这段代码进行分析 flag xxxxxxxxxxxxxxxxxxxxx s wesyvbniazxchjko1973652048$-&*&l…

iOS 集成网易云信IM

云信官方文档在这 看官方文档的时候&#xff0c;版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…