gazebo抓取/轮式底盘仿真问题汇总

本文详细描述了在使用Gazebo进行机器人仿真时遇到的问题,如机器人启动后悬浮、Robotiq手抓无法正常运动和轮子摩擦设置等,并提供了相应的解决方案,包括修改URDF文件和使用特定插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录gazebo仿真中各种疑问

1、启动gazebo仿真环境后机器人不下落

<launch>

  <arg name="world_name" default="worlds/empty.world"/>
  <include file="$(find gazebo_ros)/launch/empty_world.launch" >
    <arg name="paused" value="true" />
    <arg name="gui" value="true"/>
    <arg name="world_name" value="$(arg world_name)"/>
    <arg name="debug" value="false"/>
  </include>

  <arg name="urdf_path" default="$(find lunyi_description)/urdf/lunyi_description.xacro"/>
  <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg urdf_path)"/>

  <node
    name="spawn_model"
    pkg="gazebo_ros"
    type="spawn_model"
    args="-urdf -param robot_description -model lunyi -z 0.17
          -J ur3_shoulder_lift_joint -1.57
          -J ur3_elbow_joint 1.57
          -J ur3_wrist_1_joint -1.57
          -J ur3_wrist_2_joint -1.57
          -J ur3_wrist_3_joint -1.57"
    output="screen" />

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
</launch>

上方代码中

args="-urdf -param robot_description -model lunyi -z 0.17

-z是让机器人在一定高度出现,我记得之前机器人出现之后,就会在重力的作用下,落到地面,但是今天机器人出现之后,直接悬浮在空中,死活不降落。
后来发现问题原因:

<?xml version="1.0" encoding="utf-8"?>
<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) 
     Commit Version: 1.6.0-4-g7f85cfe  Build Version: 1.6.7995.38578
     For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot name="lunyi" xmlns:xacro="http://wiki.ros.org/xacro">
  <!-- <link name="world"/>
  <joint name="w_b_joint" type="fixed">
      <origin xyz="0 0 0" rpy="0 0 0" />
      <parent link="world" />
      <child link="base_link" />
  </joint> -->

是因为我在xacro文件中加入了没有mass和inertia的world link, 导致机器人整个悬浮,去掉world就好了。

2、robotiq手抓在gazebo中无力下垂/乱转

我的环境是 ros melodic
先说无力下垂的原因:

<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">

  <xacro:macro name="robotiq_85_gripper_transmission" params="prefix">

        <transmission name="${prefix}gripper_finger1_trans">
            <type>transmission_interface/SimpleTransmission</type>
            <joint name="${prefix}gripper_finger1_joint">
                <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
            </joint>
            <actuator name="${prefix}gripper_finger1_motor">
                <mechanicalReduction>1</mechanicalReduction>
                <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
            </actuator>
        </transmission>
        
        <gazebo>
            <!-- loading plugin: mimic joints works in gazebo now -->
            <!-- libroboticsgroup_gazebo_mimic_joint_plugin.so -->
            <!-- libgazebo_mimic_joint_plugin.so -->
            <plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_1">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger2_joint</mimicJoint>
                <!--multiplier>1.0</multiplier>
                <offset>0.0</offset-->
            </plugin>
            <plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_2">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger2_inner_knuckle_joint</mimicJoint>
                <!--multiplier>1.0</multiplier>
                <offset>0.0</offset-->
            </plugin>
            <plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_3">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger1_inner_knuckle_joint</mimicJoint>
                <!--multiplier>1.0</multiplier>
                <offset>0.0</offset-->
            </plugin>
            <plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_4">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger1_finger_tip_joint</mimicJoint>
                <multiplier>-1.0</multiplier>
                <offset>0.0</offset>
            </plugin>
            <plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_5">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger2_finger_tip_joint</mimicJoint>
                <multiplier>-1.0</multiplier>
                <offset>0.0</offset>
            </plugin>
        </gazebo>

        <gazebo>
            <plugin name="gazebo_grasp_fix" filename="libgazebo_grasp_fix.so">
                <arm>
                    <arm_name>ur5_grasp_robot</arm_name>
                    <palm_link> ur3_wrist_3_link </palm_link>
                    <gripper_link>gripper_finger1_finger_tip_link</gripper_link>
                    <gripper_link>gripper_finger2_finger_tip_link</gripper_link>
                    <gripper_link>gripper_finger1_inner_knuckle_link</gripper_link>
                    <gripper_link>gripper_finger2_inner_knuckle_link</gripper_link>
                    <gripper_link>gripper_finger1_knuckle_link</gripper_link>
                    <gripper_link>gripper_finger2_knuckle_link</gripper_link>
                </arm>
                <forces_angle_tolerance>90</forces_angle_tolerance>
                <update_rate>130</update_rate>
                <grip_count_threshold>2</grip_count_threshold>
                <max_grip_count>8</max_grip_count>
                <release_tolerance>0.005</release_tolerance>
                <disable_collisions_on_attach>true</disable_collisions_on_attach>
                <contact_topic>__default_topic__</contact_topic>
            </plugin>
        </gazebo>
    </xacro:macro>

</robot>

以上是robotiq_85_gripper/robotiq_85_description/urdf/robotiq_85_gripper.transmission.xacro的内容,可以看到,mimic_joint 需要插件驱动。
先是参考了这位https://blog.youkuaiyun.com/qq_44642372/article/details/123995916。下载了roboticsgroup_gazebo_plugins-master, 经过编译之后,得到libroboticsgroup_gazebo_mimic_joint_plugin.so , 然后在robotiq_85_gripper/robotiq_85_description/urdf/robotiq_85_gripper.transmission.xacro中使用 libroboticsgroup_gazebo_mimic_joint_plugin.so
即改为:

<plugin filename="libroboticsgroup_gazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_1">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger2_joint</mimicJoint>
                <!--multiplier>1.0</multiplier>
                <offset>0.0</offset-->
            </plugin>

可能有人到这一步就可以了,但是我加载进gazebo之后,夹抓可以正常一会,之后就开始某些关节疯狂转圈,然后我替换了另外一个插件:

libgazebo_mimic_joint_plugin.so

相应代码就是:

<plugin filename="libgazebo_mimic_joint_plugin.so" name="${prefix}mimic_robotiq_85_1">
                <joint>${prefix}gripper_finger1_joint</joint>
                <mimicJoint>${prefix}gripper_finger2_joint</mimicJoint>
                <!--multiplier>1.0</multiplier>
                <offset>0.0</offset-->
            </plugin>

这个插件需要编译的包是robotiq_85_gripper/robotiq_gazebo,应该在robotiq_gripper包里,github可以搜到。
最后为改成这个就正常了。
其他参考https://blog.youkuaiyun.com/lejou_lee/article/details/109644533,这个我没尝试,可能也有用,用升级版的。

3、夹抓夹不起来物体

原因:工作空间的环境没有抓取的插件:libgazebo_grasp_fix.so
下载两个包到工作空间编译即可:gazebo-pkgsgeneral-message-pkgs,在github应该可以搜到。

4、给轮子添加摩擦系数

<gazebo reference="lf_link2">
    <mu1>100000000</mu1>
    <mu2>100000000</mu2>
    <kp>100000000</kp>
    <kd>1</kd>
    <minDepth>0.01</minDepth>
    <maxVel>100</maxVel>  
  </gazebo>

5、给两轮添加差速控制器

<gazebo>
        <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
            <rosDebugLevel>Debug</rosDebugLevel>
            <publishWheelTF>true</publishWheelTF>
            <robotNamespace>/</robotNamespace>
            <publishTf>1</publishTf>
            <publishWheelJointState>true</publishWheelJointState>
            <alwaysOn>true</alwaysOn>
            <updateRate>100.0</updateRate>
            <legacyMode>true</legacyMode>
            <leftJoint>lb_joint</leftJoint>
            <!--left_joint-->
            <rightJoint>rb_joint</rightJoint>
            <!--right_joint-->
            <wheelSeparation>0.4985</wheelSeparation>
            <!--wheel_separation-->
            <wheelDiameter>0.305</wheelDiameter>
            <!--wheel_diameter-->
            <broadcastTF>1</broadcastTF>
            <wheelTorque>30</wheelTorque>
            <wheelAcceleration>1.8</wheelAcceleration>
            <commandTopic>cmd_vel</commandTopic>
            <odometryFrame>odom</odometryFrame> 
            <odometryTopic>odom</odometryTopic>
            <robotBaseFrame>base_link</robotBaseFrame>
            <!--
            <odometrySource>world</odometrySource>
            <publishTf>1</publishTf>
            -->
        </plugin>
    </gazebo>

参数含义:https://blog.youkuaiyun.com/qq_27865227/article/details/132506820

### 回答1: 线性回归是一种统计学方法,可用于预测数值型变量之间的关系,如房价和房屋尺寸之间的关系。在这个场景下,我们考虑通过线性回归来建立一种模型,在已知的房屋尺寸的基础上,预测相应的房价。 假设我们有一个包含有房价和房屋尺寸的数据集,我们可以使用数据探索的工具,如散点图,来初步探索两个变量之间的关系。然后,我们可以使用线性回归模型来拟合这些数据点,并且预测新的房屋尺寸的房价。 接下来,我们将绘制一个图形来展示我们的线性回归模型如何拟合数据点和预测房价。在这张图中,我们将在横轴上表示房屋尺寸,纵轴上表示房价,并绘制出我们的线性回归模型所拟合的直线。这张图将使我们更容易地理解房价和房屋尺寸之间的关系,并且可以用于后续的数据分析以及预测。 在绘制完这张图后,我们可以检查线性回归模型的拟合精度。如果线性回归模型在数据集中存在显著的偏差,就需要重新考虑预测模型,或者增加更多的特征变量,这样可以使预测的结果更准确。此外,在应用线性回归模型之前,我们还应该注意一些其他的影响因素,如噪声或异常值,这样可以避免模型的偏差以及其他的预测错误。 ### 回答2: 线性回归是一种常用的机器学习算法,可以用于预测房价等连续值的问题。具体地说,线性回归就是通过找到一条直线(或者超平面,在高维空间中)来尽可能地拟合已知数据,然后利用这条直线进行预测。 在房价预测的问题中,我们可以使用线性回归算法来构建一个模型。首先,我们需要收集一些房价相关的数据,例如房屋面积、地理位置、年龄等等。然后,我们可以使用这些数据来训练线性回归模型,找到一个最优的线性函数,使得它最好地拟合已有的数据。 训练模型之后,我们就可以利用这个模型来进行预测。比如,我们输入某个房屋的面积、位置等信息,就可以利用模型预测这个房屋的价格了。 为了更加直观地理解线性回归算法,我们可以绘制出数据点和拟合直线的图像。在这个图像中,我们可以看到每一个数据点的位置,以及拟合直线的位置,这样可以更加方便地理解线性回归算法的表现。 总之,线性回归是一种非常实用的机器学习算法,它可以帮助我们解决很多连续值预测的问题,例如房价预测等。同时,在理解线性回归算法的时候,我们可以通过绘制图像来更好地理解模型的表现。 ### 回答3: 线性回归是一种广泛用于预测连续数值的统计学方法,常用于房价预测。我们可以通过已知的房屋面积、房龄等特征,拟合出一个数学函数,进而计算出未知房屋的价格。下面我将简单介绍如何使用Python中的scikit-learn库进行线性回归分析,以及如何绘制预测结果的图像。 首先,我们需要加载数据并探索数据的基本特征。数据可以从Kaggle等网站下载得到。以Boston House Price数据集为例,我们可以通过Pandas库读入数据并查看前几行数据的情况: ``` import pandas as pd df = pd.read_csv('train.csv') print(df.head()) ``` 接下来,我们需要针对数据的特征选择适当的模型进行拟合。这里我们选取最简单的线性回归模型。通过scikit-learn库中的LinearRegression模块,可以方便地进行模型训练。 ``` from sklearn.linear_model import LinearRegression X = df[['RM', 'LSTAT', 'PTRATIO']] # 我们选择房间数量、低收入人群比例以及学生教师之比三个特征来预测房价 y = df['MEDV'] lr = LinearRegression() lr.fit(X, y) # 模型拟合 ``` 至此,我们已经拟合出了一个模型,可以使用测试数据集进行预测并计算模型的评估指标,例如均方误差(Mean Squared Error,MSE)等。同时,我们还可以通过matplotlib库绘制出预测结果的图像: ``` import matplotlib.pyplot as plt import numpy as np import seaborn as sns sns.set(style='whitegrid', context='notebook') pred_y = lr.predict(X) plt.scatter(y, pred_y) plt.plot([0, 50], [0, 50], '--k') plt.xlabel('True value') plt.ylabel('Predicted value') ``` 在图像中,横坐标代表真实房价,纵坐标代表预测房价。可以看到,预测结果真实情况的差异较小,说明模型的拟合效果较好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里飞刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值