在Gazebo中添加悬浮模型方法 / Gazebo中模型如何不因重力下落:修改sdf、urdf模型

简介: 在使用ros做仿真实验时,有时会需要在空间中添加一个模型文件,使之悬浮在空间中的某个坐标,但是往往会因为重力原因,模型会直接掉落在地上

一、问题描述:

在使用ros做仿真实验时,有时会需要在空间中添加一个模型文件,使之悬浮在空间中的某个坐标,但是往往会因为重力原因,模型会直接掉落在地上

二、解决方法:

修改模型文件,禁用重力标签

<gravity>1</gravity>

2.1 SDF模型:

找到你的模型文件目录,如果你的模型文件是.sdf格式,找到模型代码的重力标签部分

<gravity>0</gravity>

将其中的数字1改为数字0,达到禁用重力的目的


这将阻止Gazebo对该模型施加重力,使其悬浮在半空中。其他的惯性(inertial)和碰撞(collision)等属性保持不变,只需修改标签即可。保存文件后,重新加载模型到Gazebo中,它将悬浮在半空中而不会受到重力的影响。

保存文件后重新在Gazebo中添加模型,就可以悬浮在半空中了;

2.2 URDF模型:

找到你的模型文件目录,如果你的模型文件是.urdf格式,要让模型悬浮在半空中而不受重力影响,你可以将模型的惯性属性适当设置为零。

在URDF文件中,惯性属性可以在每个链接(link)的元素中设置。确保在你想要悬浮的链接中将惯性属性设置为合适的零值

一个例子如下:

<link name="floating_link">
  <inertial>
    <mass value="0.0"/>
    <!-- Set all inertia values to zero -->
    <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
  </inertial>
  <!-- Other visual, collision, and other elements -->
</link>

通过将mass值设置为0,以及设置inertia的所有值为0,你可以让该链接悬浮在半空中,并且不受重力影响。需要注意的是,如果该链接是连接到其他链接的,你可能还需要检查其父链接或子链接的属性,确保整个模型都符合你的要求。


同样地,你也可以根据需要进行一些调整,以达到适合你模型的平衡状态。完成修改后,重新加载URDF文件到ROS和Gazebo中,你的模型应该会悬浮在半空中而不会受到重力影响。

2.3 测试添加模型

使用程序在坐标(1,1,1)处添加模型,可以看到能够悬浮在此坐标系下

三、通过Python程序在Gazebo中添加模型

这里需要注意的一点是,在将模型文件的重力标签禁用之后,模型处于零重力状态,想象一下宇航员在太空空间站中的状态,以及结合中学物理知识,只要有一个初速度,他就会进行匀速直线运动,且很难停下。

所以如果用鼠标直接添加模型的话,大概率是有一个向上的初速度的,此时就建议使用额外的脚本命令来添加模型,这里我使用的是Python程序

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import os
import rospy
from gazebo_msgs.msg import ModelState
from gazebo_msgs.srv import DeleteModel, SpawnModel
from std_msgs.msg import Header
from geometry_msgs.msg import Pose, Point
# 初始化ROS节点
rospy.init_node('spawn_aruco_cubo_hover', anonymous=True)
# 定义生成模型的函数
def spawn_aruco_cubo_hover():
    model_name = "aruco_cubo_hover"
    model_path = "/home/sjh/project/Tiago_ws/src/pal_gazebo_worlds/models/aruco_cube_hover/aruco_cube_hover.sdf"
    initial_pose = Pose(position=Point(x=1, y=1, z=1))
    # 从文件加载模型
    with open(model_path, "r") as f:
        model_xml = f.read()
    # 调用Gazebo的SpawnModel服务
    spawn_model = rospy.ServiceProxy('/gazebo/spawn_sdf_model', SpawnModel)
    resp_sdf = spawn_model(model_name, model_xml, "", initial_pose, "world")
    if resp_sdf.success:
        rospy.loginfo("模型 '{}' 生成成功。".format(model_name))
    else:
        rospy.logerr("模型 '{}' 生成失败。".format(model_name))
# 调用生成模型的函数
if __name__ == '__main__':
    try:
        spawn_aruco_cubo_hover()
    except rospy.ROSInterruptException:
        pass


在使用程序时,注意将spawn_aruco_cubo_hover函数中的模型路径和指定坐标修改为你需要的

def spawn_aruco_cubo_hover():
    model_name = "你的模型的名称"
    model_path = "你的模型的路径"
    initial_pose = Pose(position=Point(x=1, y=1, z=1)) # xyz值就是指定坐标位置
目录
相关文章
|
Ubuntu 机器人 API
ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
758 0
|
JSON 网络协议 机器人
ROSBridge简介以及理解使用(下)
ROSBridge简介以及理解使用(下)
2166 0
在Gazebo中添加悬浮模型后,利用键盘控制其移动方法
今天讲一下如何通过键盘来控制其移动:监听键盘输入并根据按键调整模型的位置,然后通过调用set_model_state函数来更新模型在Gazebo中的状态
744 0
|
传感器 NoSQL 算法
ROS Moveit 配置全网最详细教程
本文是关于ROS Moveit配置的全网最详细教程,提供了一键安装脚本,以及如何使用Moveit进行机器人运动规划的详细步骤和说明。文中还深入解析了Moveit的配置包文件、Moveit的源码,以及如何使用不同的运动规划算法(如CHOMP、LERP、STOMP)进行路径规划。
2250 1
ROS Moveit 配置全网最详细教程
|
XML 存储 网络安全
ROS入门(二):launch文件解析
该文章是关于ROS入门的第二篇教程,详细解析了ROS中的launch文件,包括其运行方式、XML格式规范、标签使用、参数替代、条件属性以及通过简单和复杂案例来演示launch文件的使用,最后介绍了如何在参数服务器上设置参数。
ROS入门(二):launch文件解析
|
存储 Ubuntu 计算机视觉
使用ros标定相机的内参和外参
使用ros标定相机的内参和外参
765 2
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
2036 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
算法 数据可视化 机器人
Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)
本文是Nvidia Isaac Sim搭建仿真环境的入门教程,详细讲解了如何在Isaac Sim中创建物理场景、添加地面和光照、创建和配置仿真对象的物理属性、使用USD文件进行仿真场景的保存和引用,以及个人练习和相关物理概念的介绍。
2413 0
|
传感器 数据可视化 机器人
Nvidia Isaac Sim图编程OmniGraph 入门教程 2024(6)
本文是Nvidia Isaac Sim图编程OmniGraph的入门教程,介绍了OmniGraph的概念、图的分类、以及如何利用ActionGraph创建可视化编程流程来控制仿真中的机器人动作和物体跟随,包括键盘控制小车的流程分析、Graph的创建、节点添加与连接,以及测试和Python实现方法。
979 0
|
Ubuntu 机器人 虚拟化
Ubuntu22.04配置ROS2 Humble
这篇文章是关于如何在Ubuntu 22.04系统上配置ROS2 Humble的详细教程,包括虚拟机安装、环境配置、网络设置、软件源更换、ROS1和ROS2的安装步骤。
3455 1