Mini Pupper在ROS中的仿真

news2024/11/15 11:45:30

Mini Pupper在ROS中的仿真


课程概述

在这个课程中,你将会学习Mini Pupper结合Rivz和Gazebo的实例应用。你将使用Rviz可视化机器人模型,并在Gazebo仿真环境中实现Mini Pupper的键盘移动控制,然后带着Mini Pupper在你搭建的虚拟世界中散步。


关于课程

按照规划,本课程需要花费大约2小时来完成,目标受众为四足机器人开发爱好者。
note
本课程是基于Mangdang的Mini Pupper系列产品搭建的。


学习目标

在这个课程中,你将会学到:

  • 如何使用可视化工具Rviz来观察Mini Pupper机器人模型
  • 如何使用仿真工具Gazebo在虚拟环境中控制Mini Pupper
  • 如何使用并监视一个Mini Pupper键盘控制ROS节点

课程细节

本课程将使用以下组件:

  • Ubuntu是一个以桌面应用为主的Linux操作系统,具有良好的版本维护和社区环境
  • ROS是一个机器人通用的开发的平台,可帮助您方便地构建机器人应用程序
  • Rviz是ROS体系下的 3D 数据可视化工具
  • Gazebo是3D仿真工具,它能配合ROS组成一个强大的机器人仿真测试环境

准备材料

在开始这个课程前,你需要具备以下知识:

  • 对 Linux 操作系统的基本了解
  • 对ROS的基本了解
  • 对Rviz和Gazebo的基本了解

在开始这个课程前,你需要准备好以下材料:

  • 安装有Ubuntu22.04系统并配置好ROS2 Humble环境的笔记本电脑
  • 能够访问Github等网站的良好网络状态

引言

四足机器人仿真可以快速、低成本、高安全性地验证四足机器人的结构设计、运动控制等工作的原理有效性。通过仿真结果与实际测试结果的对比,可以帮助机器人开发者更好地完善机器人。

在本课程中,仿真意味着你无需理会Mini Pupper实际硬件的组装和调试,就能快速上手四足机器人并在仿真环境中找到如同遥控玩具车一样简单的乐趣。


整体步骤

  1. 检查Ubuntu22.04和ROS2 Humble的环境配置
  2. 查看并熟悉Rviz的窗口和组件
  3. 部署四足机器人数据可视化与仿真环境
  4. 了解URDF
  5. 在Rviz中观察机器人模型
  6. 配置键盘控制节点
  7. 通过键盘控制Rviz中的Mini Pupper
  8. 查看并熟悉Gazebo的窗口和组件
  9. 为Mini Pupper构建仿真世界
  10. 调整Gazebo环境
  11. 带着Mini Pupper在你构建的虚拟世界中散步

任务1:键盘控制Rviz中的Mini Pupper模型

Rviz是ROS中非常受欢迎的数据可视化工具,通过将机器人模型导入Rviz,并发布机器人控制信息,你将能通过键盘控制Rviz中的Mini Pupper运动。

在这里插入图片描述


第一步:检查Ubuntu22.04和ROS2 Humble的环境配置

Ubuntu22.04和ROS2 Humble的环境是搭建mini pupper仿真环境的前提,请先检查你是否完成了课程的准备材料。

  1. 查看系统内核版本号及系统名称
    确认系统版本是否为Ubuntu22.04
uname -a

  1. 查看ROS版本
    确认ROS版本是否为Humble
printenv ROS_DISTRO

在这里插入图片描述


第二步:查看并熟悉Rviz的窗口和组件

  1. 打开Rviz并观察整体界面布局
    ROS2 Humble版本中使用的Rviz版本为Rviz2
rviz2

在这里插入图片描述

  1. 观察左侧状态栏目Displays
    Displays部分是在三维空间中绘制图像的组件,通过选择订阅话题等方式,能将机器人的数据可视化。
    在这里插入图片描述

Rviz支持许多常见的传感器的数据,比如激光雷达、相机等。
通过Rviz插件,甚至可以将特定的冷门传感器数据可视化。

在这里插入图片描述

  1. 观察右侧状态栏目Views和中间的界面
    在Views栏目中,你可以调整你的观察视角。
    默认的相机模式为轨道相机,当移动相机时,中间界面出现的黄色圆盘即是相机的焦点。

你可以通过这些按键调整视角:

  • 鼠标左键:长按左键拖动旋转视野
  • 鼠标中键:移动焦点位置
  • 鼠标右键:放大/缩小视野
  1. 观察上侧的导航部分
    通过和导航包Navigation的配合,在Rviz中,只需要点一下你的鼠标,使用Rviz上侧的几个按钮,就可以进行导航。
  • 2D Pose Estimate:为机器人选择初始位置和姿态
  • 2D Goal Pose:向"goal"话题发送目标位置信息

在这里插入图片描述


第三步:部署四足机器人数据可视化与仿真环境

  1. 在工作区下载Mini Pupper ROS包。
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/mangdangroboticsclub/mini_pupper_ros.git -b ros2
  1. 使用vcstool版本控制工具解决Python包版本依赖问题。
vcs import < mini_pupper_ros/.minipupper.repos --recursive

note
如果你未安装vcstool,请先安装vcstool。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install python3-vcstool
  1. 构建并安装需要的 ROS 包
    回到ros2_ws工作空间下,解决ROS包依赖问题,安装需要的键盘控制ROS包并构建。
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y  # solve the dependency of ros package
sudo apt-get install ros-humble-teleop-twist-keyboard  # keyboard package
colcon build --symlink-install  # build

note
如果你遇到rosdep相关问题,请查看背景信息和资源

  1. 预下载Gazebo常见模型
    在首次启动Gazebo时会耗费很长时间准备模型文件,需要预先下载模型以避免耗时。
cd ~/.gazebo/
git clone https://github.com/osrf/gazebo_models.git models

第四步:了解URDF

Unified Robot Description Format(URDF)是统一机器人描述格式,它是一种用于表示机器人模型的 XML 格式,能对机器人进行描述。

  1. 打开并查看URDF文件
cd ~/ros2_ws/src/mini_pupper_ros/mini_pupper_description/urdf
sudo apt install gedit
sudo gedit mini_pupper_description.urdf

在这里插入图片描述

  1. 将urdf文件转化为图像
    urdf文件通常难以阅读,将urdf文件转化为树状结构图,了解机器人的模型描述。
cd ~/ros2_ws/src/mini_pupper_ros/mini_pupper_description/urdf
urdf_to_graphviz mini_pupper_description.urdf  # translate urdf to tree graph
xdg-open mini-pupper.pdf  # open graph pdf

在这里插入图片描述
note
如果你希望深入了解URDF和Xacro,请查看背景信息和资源


第五步:在Rviz中观察机器人模型

在Rviz中,机器人模型可作为Displays的对象,Displays将以正确的位姿显示机器人可视化模型,并且这个模型受当前的TF transforms定义。

  1. 启动Mini Pupper的节点打开Rviz观察机器人模型的可视化信息。
. ~/ros2_ws/install/setup.bash # setup.zsh if you use zsh instead of bash
ros2 launch mini_pupper_bringup bringup.launch.py joint_hardware_connected:=false rviz:=true

在这里插入图片描述
2. 查看/robot_description话题
经过此前启动文件的配置,robot_state_publisher节点将发布机器人的描述信息,Rviz将接收robot_description话题信息并更新机器人模型。

ros2 topic info -v /robot_description

在这里插入图片描述
在这里插入图片描述

note
如果你希望深入了解TF2,请查看背景信息和资源


第六步:配置键盘控制节点

  1. 打开键盘控制节点
    通过键盘可发布/cmd_vel话题,控制机器人旋转、移动。
    键盘控制方式如下,按住shift可以切换到平移模式。
    [ u i o j k l m , . ] = [ ↖ ↑ ↗ ← s t o p → ↙ ↓ ↘ ] \left[ \begin{matrix} u & i & o \\ j & k & l \\ m & , & . \\ \end{matrix} \right] = \left[ \begin{matrix} \nwarrow & \uparrow & \nearrow \\ \leftarrow & stop & \rightarrow \\ \swarrow & \downarrow & \searrow\\ \end{matrix} \right] ujmik,ol. = stop
gnome-terminal --title "keyboard" -- ros2 run teleop_twist_keyboard teleop_twist_keyboard

在这里插入图片描述

  1. 查看当前正在发布的话题
    teleop_twist_keyboard发布/cmd_vel话题,quadruped_controller_node节点订阅/cmd_vel话题以控制机器人的运动。
gnome-terminal  -- bash -c "ros2 topic info -v /cmd_vel; exec bash"

在这里插入图片描述

  1. 查看当前正在发布的话题内容
    键盘节点正在以geometry_msgs/msg/Twist的数据格式发布状态信息。
gnome-terminal  -- bash -c "ros2 topic echo /cmd_vel; exec bash"

在这里插入图片描述

note
如果你希望深入了解ROS话题机制,请查看背景信息和资源


第七步:通过键盘控制Rviz中的Mini Pupper

通过键盘终端输入移动指令,观察Rviz中Mini Pupper的运动。
在这里插入图片描述


任务2:键盘控制Mini Pupper在Gazebo仿真里散步

Gazebo是强大的3D仿真工具,它能配合ROS组成一个强大的机器人仿真测试环境。
通过自己构建一个Gazebo虚拟世界并配合机器人模型,你将能通过键盘控制Gazebo虚拟世界中的Mini Pupper运动。

在这里插入图片描述


第八步: 查看并熟悉Gazebo的窗口和组件

  1. 打开gazebo并观察整体界面布局
    当不添加参数地打开gazebo时,将会打开一个空世界,这将方便你对gazebo进行观察。
gazebo

在这里插入图片描述

note
在打开gazebo前,请务必先按照第三步:部署四足机器人数据可视化与仿真环境下载好模型。

  1. 熟悉左侧工作栏
    左侧的工作栏包含World里的各个实体模型、光照等环境属性、物理属性的设置。
    其中的Insert部分允许你向世界添加之前预下载的各类复杂模型,比如房子、巴士、可乐瓶。
    在这里插入图片描述
  2. 熟悉调整观察角度和旋转平移模型

在Gazebo中,你可以通过这些按键调整视角:

  • 鼠标左键:平移视野
  • 鼠标中键:旋转视野
  • 鼠标右键:放大/缩小视野

在这里插入图片描述

在Gazebo的上方工具栏中,你可以使用这几个按钮来平移、旋转调整模型。
如下是将一个实体模型旋转朝向,按住Shift可以帮助你更精确地调整。
在这里插入图片描述
在这里插入图片描述

  1. 在gazebo世界中尝试放置物体
    点击Gazebo上方的简单几何体按钮可以将实体放置在世界中。
    在这里插入图片描述

除了能放置简单的几何物体,通过左侧栏目的Insert选项添加模型,你甚至能放置复杂的公共汽车,这得益于你此前预下载的模型库。

在这里插入图片描述


第九步: 为Mini Pupper构建仿真世界

你可以为Mini Pupper构建一个你喜欢的仿真环境。
通过使用简单的几何模型、预下载的复杂模型、旋转与平移,你能获取一个良好的仿真环境。
下图为使用了salon、suv、school、tablemarble的简单世界。

  1. 搭建仿真世界
    在这里插入图片描述

第十步: 调整Gazebo环境

  1. 保存仿真世界
  • 点击左上角的File按钮
  • 点击save world as
  • 将世界命名为playground.world
  1. 将自拟的世界文件移动到指定目录下
    Mini Pupper Gazebo的demo world默认保存在该目录下
 ~/ros2_ws/src/mini_pupper_ros/mini_pupper_gazebo/world

将自拟的世界文件playground.world替换原有的世界文件playground.world


第十一步:带着Mini Pupper在你构建的虚拟世界中散步

现在,你可以带着Mini Pupper在你自拟的虚拟世界中散步了!

  1. 启动Mini Pupper Gazebo Demo节点
. ~/ros2_ws/install/setup.bash # setup.zsh if you use zsh instead of bash
ros2 launch mini_pupper_gazebo gazebo.launch.py rviz:=true
  1. 启动键盘控制节点
    在新的终端窗口下,启动键盘节点
ros2 run teleop_twist_keyboard teleop_twist_keyboard

在这里插入图片描述


总结Summary

经过本课程的学习,你应该能达到以下水平:

知识点内容了解熟悉掌握
Rviz使用可视化工具Rviz来观察机器人模型
Gazebo搭建世界
Gazebo使用仿真工具Gazebo在虚拟环境中控制机器人
ROS使用并监视一个ROS节点

背景信息和资源Background Information and Resources

Reference : ROS2 Humble rosdep

Reference : setup.bash for configuring environment

Reference : Rviz in ROS Wiki

Reference : URDF

Reference : Xacro

Reference : vcstool

Reference : TF2

Reference : ROS Topic

版权信息:教材尚未完善,此处预留版权信息处理方式
mini pupper相关内容可访问:https://github.com/mangdangroboticsclub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dorcker与vlu靶场搭建

dorcker与vlu靶场搭建 dorcker安装 以kali linux 为例 安装必要的一些系统工具 apt update apt -y install apt-transport-https ca-certificates curl software-properties-common 添加Docker PGP key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg …

【JavaSE】数组的定义与使用详解

目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…

(蓝桥真题)分果果(动态规划)

题目链接&#xff1a;P8746 [蓝桥杯 2021 省 A] 分果果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例1输入&#xff1a; 5 2 6 1 2 7 9 样例1输出&#xff1a; 0 样例2输入&#xff1a; 5 5 6 1 2 7 9 样例2输出&#xff1a; 2 分析&#xff1a;这道题的状态表…

第十二章 opengl之模型加载(Assimp)

OpenGLAssimp模型加载库构建Assimp网格网格渲染Assimp 我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们要的是将这些模型(Model)导入(Import)到程序当中。模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制…

备份时间缩短为原来 1/4,西安交大云数据中心的软件定义存储实践

XEDP 统一数据平台为西安交通大学云平台业务提供可靠的备份空间和强大的容灾能力&#xff0c;同时确保数据安全。西安交通大学&#xff08;简称“西安交大”&#xff09;是我国最早兴办、享誉海内外的著名高等学府&#xff0c;是教育部直属重点大学。学校现有兴庆、雁塔、曲江和…

strace 用法介绍

strace 是什么 strace 是一个可用于诊断和调试的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互&#xff0c;比如系统调用、信号传递、进程状态变更等。 strace 作为一种动态跟踪工具&#xff0c;能够帮助我们高效地定位进程和服务故障。它像是一个侦探&…

企业电子招投标采购系统源码之系统的首页设计

​​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

ThreadLocal解析

ThreadLocal是一个存储线程本地变量的对象&#xff0c;在ThreadLocal中存储的对象在其他线程中是不可见的&#xff0c;本文介绍ThreadLocal的原理。 1、threadLocal使用 有如下代码&#xff1a; Slf4j public class TestThreadLocal {public static void main(String[] args…

干货!设备管理包括哪些内容?

本文将为您介绍&#xff1a;1、设备管理的内容有哪些2、好用的设备管理软件&#xff1b; 设备管理在企业管理中非常重要&#xff1a;设备是企业安全生产的前提&#xff0c;没有安全生产&#xff0c;一切工作都可能是无用功&#xff1b; 而好的设备管理可以极大地提高生产效率…

【数据库】MySQL数据库约束(六大约束)

目录 1.数据库约束 1.1约束类型 1.2 非空约束&#xff08;NOT NULL &#xff09; 1.3 唯一约束&#xff08;UNIQUE&#xff09; 1.4默认值约束&#xff08;DEFAULT &#xff09; 1.5主键约束&#xff08;PRIMARY KEY&#xff09; 1.6外键约束&#xff08;FOREIGN KEY &…

安全漏洞修复帖

对于项目漏洞都是一堆又不重要又很重要的事情一、修复HTTP 响应头缺失NginxTomcat响应头&#xff1a;值二、会话 Cookie 中缺少 secure 属性三、Html form 表单没有 CSRF 防护Security的示例Shiro的示例四、Host 头攻击NginxTomcatApache五、开启 options 方法一、修复HTTP 响应…

【设计模式】适配器模式和桥接模式

适配器模式 适配器模式 : 就是将一个类的接口变成客户端所期望的另一种接口&#xff0c;使得原本因为接口不匹配而无法一起工作的接口可以正常工作。属于结构型模式 比方说我有一个A牌子的奶瓶&#xff0c;然后买了个B牌子的奶嘴&#xff0c;不能匹配怎么办? 再买一个转换器…

Python3-输入和输出

Python3 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法&#xff0c;标准输出文件可以用 sys.stdout 引用。 如果你希望输出的形式更加多样&#xff0c;可以使用 str.format() 函数来格式化输出值。…

2020蓝桥杯真题洁净数 C语言/C++

题目描述 小明非常不喜欢数字 2&#xff0c;包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2&#xff0c;小明将它称为洁净数。 请问在整数 1 至 n 中&#xff0c;洁净数有多少个&#xff1f; 输入描述 输入的第一行包含一个整数 n(1≤n≤10^6)。 输出描述 输…

VS Code 解决 SpringBoot 项目启动时报 Failed to refresh live data from process **** 的问题

问题 SpringBoot 启动后 &#xff0c;VS Code 报错 Failed to refresh live data from process ****。 现场是&#xff0c;SpringBoot 项目启动时&#xff0c;VS Code 将进行如下刷新&#xff0c;图片如下所示 当刷新 10 次以后&#xff0c;如果还是失败&#xff0c;则会抛出…

C++ queue的以及优先级队列(堆)的介绍和使用

因为队列与之前学习的栈等使用方法比较类似&#xff0c;所以对此进行简单介绍1 queue的介绍1. 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。2. 队列作为容器适配器实现&#xff0c;容…

基于RK3588人工智能大算力5网口工业交换机

RK3588是瑞芯微旗下最新的8K旗舰SoC芯片&#xff0c;采用ARM架构&#xff0c;主要用于PC、个人移动互联网设备、边缘计算和其他数字多媒体应用。RK3588集成了四核Cortex-A76和四核Cortex-A55&#xff0c;以及单独的NEON协处理器&#xff0c;支持8K视频编解码。许多功能强大的嵌…

肠道菌群与健康:探究发酵食品、饮食方式、益生菌和后生元的影响

谷禾健康 肠道微生物群之间编织了一个复杂的相互作用网络&#xff0c;影响人体的营养吸收和代谢&#xff0c;免疫功能等&#xff0c;对我们的健康状态有很大的影响。 我们知道&#xff0c;肠道微生物群具有多样性&#xff0c;平衡性&#xff0c;稳定性等特征&#xff0c;但同时…

c语言面试题目整理

1、static有什么用途&#xff1f; 在C语言中&#xff0c;static主要定义全局静态变量&#xff0c;定义局部静态变量&#xff0c;定义静态函数 限制变量的作用域&#xff0c;设置变量的存储域。 static 关键字主要有两种作用&#xff1a; 第一&#xff0c;为某特定数据类型或对…

05 C语言数据类型

05 C语言数据类型 1、数据类型 编程语言对数据类型分为两派&#xff1a;一种认为要注重&#xff0c;一种认为可以忽视。 C语言类型 1、整数 : char < short < int < long < long long &#xff0c;bool 2、浮点数&#xff1a;float < double < long doub…