当前位置: 首页 > news >正文

从零基于Gazebo实现仿真车辆模型构建

1. 创建URDF模型

编写基础底盘URDF
创建文件 ~/catkin_ws/src/my_robot/urdf/diff_robot.urdf.xacro:

<?xml version="1.0"?>
<robot name="diff_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"><!-- 底盘 --><link name="base_link"><visual><geometry><box size="0.4 0.2 0.1"/>  <!-- 长宽高 --></geometry><material name="blue"><color rgba="0 0 1 1"/></material></visual><collision><geometry><box size="0.4 0.2 0.1"/></geometry></collision><inertial><mass value="2.0"/><inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.02"/></inertial></link><!-- 左轮 --><link name="left_wheel"><visual><geometry><cylinder length="0.05" radius="0.05"/>  <!-- 厚度与半径 --></geometry></visual></link><!-- 右轮(复制左轮并调整位置) --><joint name="left_wheel_joint" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.15 0" rpy="1.5707 0 0"/>  <!-- Y轴偏移,90度旋转 --><axis xyz="0 1 0"/>  <!-- 绕Y轴旋转 --></joint><!-- 右轮定义类似,偏移改为 xyz="0 -0.15 0" -->
</robot>

关键点:

差速轮需设置 type=“continuous” 关节10

惯性参数()必须定义,否则Gazebo物理引擎报错

添加差速控制器插件
在URDF末尾插入Gazebo插件:

<gazebo><plugin name="diff_drive" filename="libgazebo_ros_diff_drive.so"><rosDebugLevel>Debug</rosDebugLevel><commandTopic>cmd_vel</commandTopic>  <!-- 控制指令订阅 --><odometryTopic>odom</odometryTopic>    <!-- 里程计发布 --><odometryFrame>odom</odometryFrame><robotBaseFrame>base_link</robotBaseFrame><wheelSeparation>0.3</wheelSeparation>  <!-- 轮间距(同Y轴偏移量0.15*2) --><wheelDiameter>0.1</wheelDiameter>      <!-- 轮直径(半径0.05*2) --></plugin>
</gazebo>

此插件实现ROS的cmd_vel话题控制4。

2. 生成模型并加载到Gazebo

# 创建功能包与编译
cd ~/catkin_ws/src
catkin_create_pkg my_robot roscpp gazebo_ros
mkdir my_robot/launch my_robot/urdf
# 将URDF文件放入urdf目录
cd ~/catkin_ws
catkin_make

编写启动文件
创建 my_robot/launch/start.launch:

<launch><!-- 加载URDF到参数服务器 --><param name="robot_description" command="$(find xacro)/xacro '$(find my_robot)/urdf/diff_robot.urdf.xacro'" /><!-- 启动Gazebo空世界 --><include file="$(find gazebo_ros)/launch/empty_world.launch"/><!-- 在Gazebo中生成机器人 --><node name="spawn_model" pkg="gazebo_ros" type="spawn_model"args="-urdf -model diff_robot -param robot_description -z 0.1" /><!-- 启动机器人状态发布 --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
</launch>

注意:Noetic中必须使用 type=“robot_state_publisher”(而非旧版state_publisher)10。

启动仿真

roslaunch my_robot start.launch

3. 控制机器人移动

# 发布速度指令测试(线速度0.2m/s,角速度0.5rad/s)
rostopic pub /cmd_vel geometry_msgs/Twist "linear:x: 0.2y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 0.5" -r 10# 或使用键盘控制
sudo apt install ros-noetic-teleop-twist-keyboard
rosrun teleop_twist_keyboard teleop_twist_keyboard.py

成功现象:机器人绕圈运动(差速转向)。

http://www.xdnf.cn/news/959617.html

相关文章:

  • unity 输入框 自己定义光标显示逻辑
  • 结构化文件管理实战:实现目录自动创建与归类
  • 【性能篇I】为应用加速:整合 Redis 实现高速缓存
  • RAID存储技术概述
  • 湖北理元理律师事务所:债务清偿方案中的法律技术革新
  • FreeRtos下创建任务失败原因记录
  • 动态元素绑定事件总失效?通过AI 对话框的开发,详解绑定逻辑!
  • @Transactional 什么情况下会失效
  • Linux应用开发之网络套接字编程(实例篇)
  • VMware Workstation踩坑指南
  • Ubuntu 可执行程序自启动方法
  • apt命令介绍
  • 【音乐分析】根据拍号结合bpm计算bar_duration
  • 每日算法题(12-1)ACM输出九九乘法表-20250609
  • DeviceNet转Modbus-RTU协议网关详细解读
  • 医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
  • CCleaner Professional 下载安装教程 - 电脑清理优化工具详细使用指南
  • Kafka入门-监控与可视化
  • 今天做的力扣SQL
  • 二维FDTD算法仿真
  • C++ 类的定义与构造 / 析构函数解析
  • python3基础语法梳理(一)
  • 验证回文串
  • 【学习分享】shell脚本基础(全)
  • 深度解析云存储:概念、架构与应用实践
  • 外链域名年龄 vs 数量老域名的1个链接抵新域名的100个吗?
  • 【配置篇】告别硬编码:多环境配置、@ConfigurationProperties与配置中心初探
  • FDD损失函数 损失函数和梯度的关系
  • Day49 Python打卡训练营
  • 【前端】js Map集合的使用方法