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

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF、Gazebo与Rviz综合应用

6.1 机器人运动控制以及里程计信息显示

(1)ros_control 简介

        场景:如何在不同的机器人系统上实现同一套 ROS 程序的部署?例如,在开发阶段,为了提高测试效率,程序通常在仿真平台(如 Gazebo)上进行。然而,实际部署时,可能涉及不同的实体机器人平台。这些平台在实现细节上存在差异,如何确保 ROS 程序的可移植性?ROS 提供的内置解决方案是 ros_control

        ros_controlros_control 是一组 ROS 软件包,提供了机器人控制的标准接口,包括控制器接口、控制器管理器、传动和硬件接口。它为开发者提供了一个机器人控制的中间件,设计了一套通用的控制规范。只要不同的机器人平台按照这套规范实现接口,便可以无缝对接 ROS 程序。通过这种规范化的架构设计,ros_control 实现了一种可插拔的系统,使得机器人程序可以灵活地适应不同硬件环境,从而大大提高了程序设计、测试与部署的效率和灵活性。

        Gazebo 与 ros_control:Gazebo 仿真平台已经实现了 ros_control 的相关接口。这意味着开发者可以在 Gazebo 中使用相同的 ROS 控制程序来模拟机器人控制,并且可以在仿真和实际硬件系统之间进行无缝切换。如果需要在 Gazebo 中控制机器人,只需调用 ros_control 接口,利用 Gazebo 的仿真环境模拟硬件行为,实现对机器人的运动控制。

(2)运动控制实现流程(Gazebo)

1)编写 Xacro 文件:在已创建好的机器人模型基础上,编写一个独立的 Xacro 文件,为机器人模型添加所需的传动装置(如轮子或关节)以及控制器组件。通常这些控制器是通过 ros_control 提供的标准控制接口来实现的,例如速度控制器、位置控制器等。

        例如,Xacro 文件可能会包含以下内容:

<transmission name="my_robot_transmission">
  <type>transmission_interface/SimpleTransmission</type>
  <joint name="joint1">
    <hardwareInterface>EffortJointInterface</hardwareInterface>
  </joint>
  <actuator name="motor1">
    <hardwareInterface>EffortJointInterface</hardwareInterface>
  </actuator>
</transmission>

        其中传动装置(transmission)定义了机器人运动关节与执行器(如电机)之间的关系。

2)集成 Xacro 文件:将新编写的 Xacro 文件包含到主 URDF 或 Xacro 机器人模型文件中。通过这种方式,模型将拥有完整的物理和控制功能,既包含机器人的几何结构,又具备运动控制能力。

        使用文件包含的方式将控制器文件集成到主模型文件中:

<xacro:include filename="$(find my_robot_description)/urdf/transmissions.xacro" />

3)启动 Gazebo 并控制机器人运动:启动 Gazebo 仿真环境,加载包含控制器的机器人模型。启动后,通过发布 /cmd_vel(或其他控制话题)消息,使用 ROS 话题或服务来控制机器人的运动。

        发布控制指令的示例:

rostopic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}'

        该命令会向机器人发送线速度和角速度指令,从而使其在 Gazebo 中移动。通过使用 ros_control 的接口,您可以在仿真中调试机器人的控制行为,并最终将相同的控制逻辑移植到实际的机器人硬件平台上。

(3)Rviz查看里程计信息

里程计: 机器人相对出发点坐标系的位姿状态(X 坐标 Y 坐标 Z坐标以及朝向)。

6.2 雷达信息仿真以及显示

6.3 摄像头信息仿真以及显示

6.4 kinect信息仿真以及显示

 Kinect 点云数据显示:

问题:在 RViz 中显示 Kinect 生成的点云时出现错位现象。

原因:这是由于 Kinect 的图像数据和点云数据使用了不同的坐标系统,而这两套坐标系统的位姿并不一致,导致在 RViz 中显示时出现不匹配的情况。

解决方案: (1)为 Kinect 设置统一的坐标系,确保点云和图像数据的坐标系统一致。可以通过修改相应插件的配置文件来设置正确的坐标系。具体方法是找到配置文件中的 <frameName> 标签,并将其内容修改为与点云和图像数据一致的坐标系名称。

<frameName>support_depth</frameName>

(2)发布新设置的坐标系到kinect连杆的坐标变换关系 距离+偏航(x,y,z,z,y,z),在启动rviz的launch中,添加:

<node pkg="tf2_ros" type="static_transform_publisher" name="static_transform_publisher" args="0 0 0 -1.57 0 -1.57 /support /support_depth" />


http://www.kler.cn/news/358583.html

相关文章:

  • Caffeine Cache解析(一):接口设计与TinyLFU
  • python如何使用SciPy matplotlib完成数据分析?
  • 【Flutter】基础入门:项目结构
  • spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容
  • 机器学习中的朴素贝叶斯
  • 【ChatGPT】如何让 ChatGPT 提供简短、精准的答案
  • 新版vs code + Vue高亮、语法自动补全插件
  • OkEdge边缘计算网关助力数字化工厂管理系统高效部署与维护
  • IntelliJ IDEA 常用快捷键详解与自定义修改方法
  • SoapShell 更新 | 增强免杀版适配冰蝎4.0客户端的WebShell
  • Tailwind css系列教程(二)
  • oracle numtodsinterval
  • ansibie的安装 |Ansible 在CentOS7上批量部署JDK、Tomcat、jenkins和Nginx
  • 028 elasticsearch索引管理-ElasticsearchRestTemplate
  • 水下侧扫声呐图像数据集,沉船,1.13G。声纳数据集 水下声纳数据集 水下图像声纳数据集
  • C#基于SkiaSharp实现印章管理(11)
  • 【力扣 | SQL题 | 每日3题】力扣1990, 2020, 2051
  • 基于Python实现“吾爱海洋”论坛自动签到
  • HCIE-Datacom题库_10_网络协议【13道题】
  • 分布式锁实现细节:使用Redisson进行并发控制