gazebo里插入的模型缓慢滑动+可运动的模型插好就没法移动(解决记录)

系统:Ubuntu18.04+ros-melodic+gazebo11

问题1:在gazebo搭建好的房间(墙壁)里,插入门的模型时,门会缓慢的转动

解决1:我们在与模型与world接触的那个link里加入<contact>相关标签:借鉴解决

<collision name="collision_)2">
  ...
  <surface>
    ...
    <contact>
    # 下面3行插入到<contact>标签里
      <ode>
        <min_depth>0.001</min_depth>
      </ode>
    </contact>
  </surface>
</collision>

问题2:插入模型时,一旦松开鼠标,就插入完毕,无法移动也无法转动(只在运动属性的model里存在这种情况)

解决2:我们在gazebo模型库里insert一些本身具有运动属性的模型时,比如门,门模型的sdf文件里往往有一个fixed类型的joint是把world和模型的base_link连接起来的,就导致我们一移动模型就乱飞,然后回到原位,如下代码段:

    <joint type="fixed" name="joint_world_frame">
      <pose>0 0 0 0 0 0</pose>
      <parent>world</parent>
      <child>frame</child>
      <physics>
        <ode>
          <implicit_spring_damper>1</implicit_spring_damper>
        </ode>
      </physics>
    </joint>

所以,把这个fixed的jiont删除,就可以在插入模型后,对模型的位置进行调整了.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了在Gazebo中控制模型运动,需要编写一个控制器。以下是一个简单的Python控制器示例,可以使模型在x、y和z方向上来回移动: ```python #!/usr/bin/env python import rospy from geometry_msgs.msg import Twist class ModelController: def __init__(self): rospy.init_node('model_controller') self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10) self.rate = rospy.Rate(10) self.command = Twist() self.direction = 1.0 self.distance = 0.0 self.max_distance = 10.0 def run(self): while not rospy.is_shutdown(): self.command.linear.x = self.direction * 0.1 self.command.linear.y = self.direction * 0.1 self.command.linear.z = self.direction * 0.1 self.pub.publish(self.command) self.distance += abs(self.command.linear.x) if self.distance >= self.max_distance: self.direction *= -1.0 self.distance = 0.0 self.rate.sleep() if __name__ == '__main__': try: controller = ModelController() controller.run() except rospy.ROSInterruptException: pass ``` 该控制器使用ROS Python API,通过发布Twist消息到/cmd_vel主题来控制模型运动。在run()方法中,控制器将模型向前移动,直到达到最大距离,然后将方向反转,继续移动。控制器以每秒10次的速度运行,可通过调整rate值来更改此速度。 要在Gazebo中使用该控制器,请将其保存为.py文件,并将其添加到模型的URDF文件中。在URDF文件中,添加一个controller节点,将该节点的type属性设置为"joint_state_controller/JointController",并将该节点的name属性设置为您选择的名称。然后,将该节点的joint属性设置为您要控制的关节的名称。最后,将该节点的command属性设置为您保存的控制器文件的路径。以下是一个示例URDF文件,其中包含该控制器: ```xml <?xml version="1.0"?> <robot name="my_robot"> <link name="base_link"/> <joint name="joint1" type="revolute"> <parent link="base_link"/> <child link="link1"/> <origin xyz="0 0 0" rpy="0 0 0"/> <axis xyz="0 0 1"/> <limit lower="-1.57" upper="1.57" effort="100" velocity="3.14"/> </joint> <link name="link1"/> <gazebo> <plugin name="joint_state_controller" filename="libgazebo_ros_joint_state_controller.so"> <robotNamespace>/my_robot</robotNamespace> <jointName>joint1</jointName> </plugin> <plugin name="model_controller" filename="path/to/your/controller.py"> <robotNamespace>/my_robot</robotNamespace> <jointName>joint1</jointName> </plugin> </gazebo> </robot> ``` 在该示例中,控制器节点被添加到gazebo节点下的plugin节点中。控制器节点的名称为"model_controller",它将控制关节"joint1"的运动。注意,控制器节点的robotNamespace属性必须与ROS命名空间中的模型名称匹配。 保存URDF文件并将其加载到Gazebo中后,您应该可以通过使用以下命令来启动控制器: ``` roslaunch my_robot my_robot.launch ``` 在新的终端中,运行控制器节点: ``` rosrun my_robot model_controller.py ``` 您应该会看到模型Gazebo移动

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值