在Gazebo Garden中使创建好的机器人动起来

本文介绍了在Ubuntu20.04环境下,如何在GazeboGarden中使用ROS2Foxy安装教程创建并移动机器人,涉及diff_drive插件的设置、话题和消息的使用,以及通过KeyPublisher和TriggeredPublisher实现键盘控制机器人移动的教程。

背景

系统

Ubuntu20.04

ROS版本

ROS2 Foxy
安装教程

Gazebo版本

Gazebo Garden
安装教程

在Gazebo中创建好一个机器人模型

创建教程

原版教程

Moving The Robot

移动机器人

在本教程中,我们将学习如何移动我们的机器人。我们将使用在“在Gazebo Garden中创建一个机器人”教程中构建的机器人。你可以从这里下载机器人。你也可以在这里找到本教程的成品世界描述文件。

什么是插件

为了让我们的机器人动起来,我们将使用 diff_drive 插件。但在此之前,让我们先回答一个问题:“什么是插件?”插件是作为共享库编译的代码块,并插入到模拟中。插件使我们能够控制模拟的许多方面,如世界、模型等。

Diff_drive 插件

diff_drive 插件可以帮助我们控制机器人,特别是可以进行差动驱动的机器人。让我们在机器人上设置该插件。打开 building_robot.sdf,并在 vehicle_blue 模型标签内添加以下代码:

<plugin
    filename="gz-sim-diff-drive-system"
    name="gz::sim::systems::DiffDrive">
    <left_joint>left_wheel_joint</left_joint>
    <right_joint>right_wheel_joint</r
Gazebo创建自定义的水下机器人模型可以按照以下步骤进行: 1. **安装必要的软件**: - 安装Gazebo和ROS(机器人操作系统),确保它们兼容。 - 安装必要的ROS包,例如`gazebo_ros_pkgs`。 2. **创建机器人描述文件**: - 在ROS工作空间的`src`目录下创建一个新的包,例如`my_underwater_robot`。 - 在包中创建一个`urdf`文件夹,用于存放机器人描述文件(URDF或XACRO)。 3. **编写URDF/XACRO文件**: - 使用XML格式编写机器人的描述文件,定义机器人的各个部件,如机身、推进器、传感器等。 - 可以使用XACRO文件来简化URDF文件的编写,通过宏定义和参数化来提高可维护性。 4. **添加物理属性和材料**: - 在URDF文件中添加物理属性,如质量、惯性矩阵等。 - 定义材料的颜色和纹理,以便在Gazebo中正确显示。 5. **定义关节和传动装置**: - 定义机器人各个部件之间的关节类型和参数,例如旋转关节、固定关节等。 - 添加传动装置参数,如关节限制、摩擦力等。 6. **添加传感器和插件**: - 在URDF文件中添加传感器模型,例如声呐、摄像头等。 - 使用Gazebo插件来模拟传感器数据和控制机器人行为。 7. **启动Gazebo并加载模型**: - 使用ROS启动文件或命令行启动Gazebo,并加载自定义的机器人模型。 - 可以编写一个ROS启动文件来自动启动Gazebo并加载模型。 8. **测试和调试**: - 在Gazebo中测试机器人的运动和控制。 - 根据需要调整URDF文件和参数,确保模型在Gazebo中正确显示和运动。 以下是一个简单的示例,展示了如何在URDF文件中定义一个简单的水下机器人模型: ```xml <?xml version="1.0"?> <robot name="underwater_robot" xmlns:xacro="http://ros.org/wiki/xacro"> <link name="base_link"> <visual> <geometry> <cylinder length="0.5" radius="0.2"/> </geometry> <material name="blue"/> </visual> <collision> <geometry> <cylinder length="0.5" radius="0.2"/> </geometry> </collision> <inertial> <mass value="10.0"/> <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/> </inertial> </link> <joint name="propeller_joint" type="revolute"> <parent link="base_link"/> <child link="propeller_link"/> <origin xyz="0 0 0.25" rpy="0 0 0"/> <axis xyz="0 0 1"/> <limit effort="10" velocity="10"/> </joint> <link name="propeller_link"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <material name="black"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </collision> <inertial> <mass value="1.0"/> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01"/> </inertial> </link> <transmission name="propeller_transmission"> <type>transmission_interface/SimpleTransmission</type> <joint name="propeller_joint"> <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface> </joint> <actuator name="propeller_motor"> <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> <gazebo> <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"> <ros> <namespace>/</namespace> <argument>update_rate</argument> <value>100.0</value> </ros> <updateRate>100.0</updateRate> <leftJoint>propeller_joint</leftJoint> <rightJoint>propeller_joint</rightJoint> <wheelSeparation>0.5</wheelSeparation> <wheelDiameter>0.1</wheelDiameter> <torque>5</torque> <commandTopic>cmd_vel</commandTopic> <odometryTopic>odom</odometryTopic> <odometryFrame>odom</odometryFrame> <robotBaseFrame>base_link</robotBaseFrame> </plugin> </gazebo> </robot> ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值