【ROS_SDF】

文章讲述了如何在Gazebo仿真环境中使用SDF文件来控制闭链机器人,如五连杆轮腿式机器人,因为URDF不支持闭链结构。作者提到了通过GazeboQ&A视频学习到的方法,包括创建功能包、加载SDF模型到Gazebo以及面临的控制问题。由于ros_control不支持SDF,提出了两种可能的解决方案:SDF转URDF或编写自定义Gazebo插件,但后者是目前未掌握的方法。

SDF文件在Gazebo中的实现与控制

引言

最近尝试在Gazebo中仿真轮腿式机器人,目的是实现在Gazebo中实现控制。但是发现轮腿属于闭链机器人,无论是RM常用五连杆还是ascento或sk8o这类的机器人,URDF格式都是不支持的,只能使用SDF

在Gazebo中实现

主要参考了油管上的Gazebo Q&A,介绍了如何在Gazebo中显示SDF文件模型
如何需要观看链接放在最下面

首先依旧是创建功能包,最后这两个依赖不能少,否则运行不起来

catkin_create_pkg _name_ rospy gazebo_ros
catkin_make

没有报错后在功能包内创建launch和models
在这里插入图片描述
spawn_test.launch文件中主要做设置参数,加载Gazebo仿真环境,加载机器人sdf文件
spawn_sdf.launch主要负责将模型在gazebo中实例化

以下是为编写的文件内容,仅供参考

<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <!-- 设置launch文件的参数 -->
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <include file="$(find my_sdf)/launch/spawn_sdf.launch">
        <arg name="robot_name" value="stoupento" />
        <arg name="x" value="0.0" />
        <arg name="y" value="0.0" />
        <arg name="z" value="1.0" />
        <arg name="roll" value="0" />
        <arg name="pitch" value="0" />
        <arg name="yaw" value="0" />
        <arg name="sdf_robot_file" value="$(find my_sdf)/models/stoupento/model.sdf" />
    </include>
</launch>
<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <arg name="robot_name" default="" />
    <arg name="x" default="0.0" />
    <arg name="y" default="0.0" />
    <arg name="z" default="1.0" />
    <arg name="roll" default="0" />
    <arg name="pitch" default="0" />
    <arg name="yaw" default="0" />
    <arg name="sdf_robot_file" default="" />

    <node name="$(arg robot_name)_spawn_urdf" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
    args="-file $(arg sdf_robot_file) -sdf -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg roll) -P $(arg pitch) -Y $(arg yaw) -model $(arg robot_name)" />
        
</launch>


在这里插入图片描述

SDF控制

事实上,完成SDF显示后我就想着怎么让机器人动动了。最先想到的就是像过去parm加载机器人参数,再发布机器人状态和关节状态,并在rviz中显示。毫无疑问,我失败了。查阅大量资料后,发现rviz只支持URDF,并不支持SDF格式。同时,加载机器人参数的“robot_description”并没有支持sdf的示例,只有urdf和xacro。我在查找,直接发现ros_control都不支持SDF,同时发现,要想实现对SDF格式模型的控制,只有两种办法:其一,将SDF转URDF;其二,通过Gazebo预留的API自己编写控制plugin。

第一个方法首先pass,就是因为URDF不支持闭链运动所以才采用SDF的,没必要再转回去。第二个方法我还不会,但是留下方法,供读者参考,并希望可以有所感悟之后发布一个博客,提醒一下小白我,我必前来学习。

https://classic.gazebosim.org/tutorials?cat=guided_i&tut=guided_i5

对于五连杆的轮腿式机器人,up历识咩咩已经描述的很清楚了,使用了URDF文件外加了一个gazebo的关节去起固定作用,为这边就不再赘述了。
在这里插入图片描述

### libgazebo_ros_control 使用说明 `libgazebo_ros_control` 是 Gazebo ROS 控制器框架之间的桥梁,用于实现机器人仿真环境下的控制功能。它允许用户通过 `ros_control` 接口来操作虚拟机器人模型。 #### 安装教程 为了安装与 `libgazebo_ros_control` 相关的功能包,可以通过以下命令完成: ```bash sudo apt-get install ros-kinetic-gazebo-ros-control [^1] ``` 上述命令适用于 ROS Kinetic 版本。如果使用其他版本(如 Melodic 或 Noetic),需将 `kinetic` 替换为目标版本名称。例如,在 ROS Melodic 中执行以下命令即可: ```bash sudo apt-get install ros-melodic-gazebo-ros-control ``` 此命令会自动下载并安装所需的依赖项以及核心库文件 `libgazebo_ros_control.so`。 --- ### 常见问题及其解决方法 1. **无法找到 `libgazebo_ros_control` 库** 如果在运行仿真时遇到错误提示找不到该库,则可能是未正确加载或路径配置有误。解决方案包括重新编译工作空间以更新缓存,并确认 `.bashrc` 文件中已设置正确的 ROS 路径变量[^3]。 2. **控制器启动失败** 当尝试初始化硬件接口时发生异常,通常是因为 URDF/XACRO 配置不完整或者缺失必要的 `<transmission>` 参数定义。确保机器人的描述文件包含完整的传动参数声明。 3. **Gazebo 插件冲突** 若多个插件试图接管同一资源(比如关节位置/速度管理权柄),则可能导致不可预测的行为甚至崩溃退出。此时应仔细审查 SDF 导出结果,移除冗余组件实例化语句。 4. **性能优化不足** 对于复杂场景而言,默认时间步长可能过短从而加重 CPU 占用率负担;适当调整物理引擎属性能够缓解此类现象的发生几率。 --- ### 示例代码片段 下面展示了一个简单的 Xacro 文件模板,演示如何集成 `gazebo_ros_control` 到您的项目当中去: ```xml <?xml version="1.0"?> <robot name="example_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <!-- Include common macros --> <xacro:include filename="$(find example_description)/urdf/macros.xacro"/> <!-- Robot base link definition --> <link name="base_link"/> <!-- Transmission setup for joint control --> <joint name="wheel_joint" type="continuous"> <parent link="base_link"/> <child link="wheel"/> <axis xyz="0 1 0"/> </joint> <transmission name="tran_wheel"> <type>transmission_interface/SimpleTransmission</type> <actuator name="motor_wheel"> <mechanicalReduction>1</mechanicalReduction> </actuator> <joint name="wheel_joint"> <hardwareInterface>EffortJointInterface</hardwareInterface> </joint> </transmission> <!-- Load controllers via plugin mechanism --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/mybot</robotNamespace> </plugin> </gazebo> </robot> ``` 以上 XML 结构展示了基本的机械臂结构设计思路,同时引入了 gazebo 的模拟控件支持能力[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值