建造属于你的无人驾驶车——(七)为XACRO模型添加GAZEBO属性与运动控制插件

建造属于你的无人驾驶车!
本专栏持续更新中…
程序源码:https://github.com/kkmd66/ZZX_RUN
Solidworks模型文件:https://github.com/kkmd66/ZZX_RUN/releases

为XACRO模型添加GAZEBO属性与运动控制插件

第一步,在《建造属于你的无人驾驶车——(三)Solidworks模型导出为URDF模型》中的XACRO模型中添加XACRO描述

	xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"

    xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"

    xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"

第二步,继续添加激光雷达插件

<!--lidar_link-->

        <gazebo reference="lidar_link">

            <sensor type="ray" name="rplidar">

                <pose>0 0 0 0 0 0</pose>

                <visualize>false</visualize>

                <update_rate>5.5</update_rate>

                <ray>

                    <scan>

                      <horizontal>

                        <samples>360</samples>

                        <resolution>1</resolution>

                        <min_angle>-3</min_angle>

                        <max_angle>3</max_angle>

                      </horizontal>

                    </scan>

                    <range>

                      <min>0.10</min>

                      <max>6.0</max>

                      <resolution>0.01</resolution>

                    </range>

                    <noise>

                      <type>gaussian</type>

                      <mean>0.0</mean>

                      <stddev>0.01</stddev>

                    </noise>

                </ray>

                <plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so">

                    <topicName>/scan</topicName>

                    <frameName>lidar_link</frameName>

                </plugin>

            </sensor>

        </gazebo>


第三步,继续添加运动模型插件

这里四轮差速,选择滑动控制

<!-- Drive controller -->

<gazebo>

  <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">

    <updateRate>100.0</updateRate>

    <robotNamespace></robotNamespace>

    <leftFrontJoint>left_front_wheel_link_joint</leftFrontJoint>

    <rightFrontJoint>right_front_wheel_link_joint</rightFrontJoint>

    <leftRearJoint>left_behind_wheel_link_joint</leftRearJoint>

    <rightRearJoint>right_behind_wheel_link_joint</rightRearJoint>

    <wheelSeparation>0.64</wheelSeparation>

    <wheelDiameter>0.33</wheelDiameter>

    <commandTopic>cmd_vel</commandTopic>

    <odometryTopic>odom</odometryTopic>

    <robotBaseFrame>base_footprint</robotBaseFrame>

    <odometryFrame>odom</odometryFrame>

    <torque>1000</torque>

    <topicName>cmd_vel</topicName>

    <broadcastTF>1</broadcastTF>

  </plugin>

</gazebo>

第四步,继续添加控制插件

<!-- ros_control plugin -->

  <gazebo>

    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">

      <robotNamespace>/zzx_run_robot</robotNamespace>

      <legacyModeNS>true</legacyModeNS>

    </plugin>

  </gazebo>

第五步,添加GAZEBO属性,增大轮子摩擦属性

<!--friction-->

 <gazebo reference="left_front_wheel_link">

		    <mu1>10000</mu1>

		    <mu2>10000</mu2>

		    <kp>10000000</kp>

		    <kd>1</kd>

	</gazebo>



  <gazebo reference="left_behind_wheel_link">



		    <mu1>10000</mu1>

		    <mu2>10000</mu2>

		    <kp>10000000</kp>

		    <kd>1</kd>

	</gazebo>



  <gazebo reference="right_front_wheel_link">

		    <mu1>10000</mu1>

		    <mu2>10000</mu2>

		    <kp>10000000</kp>

		    <kd>1</kd>

	</gazebo>



  <gazebo reference="right_behind_wheel_link">

		    <mu1>10000</mu1>

		    <mu2>10000</mu2>

		    <kp>10000000</kp>

		    <kd>1</kd>

	</gazebo>





</robot>

最后

有问题可以和我交流哦~
WeChat ID:kkmd66-2

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
为了在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中移动。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值