鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ros使用teleop_twist_keyboard teleop_twist_keyboard.py控制小车运动时,Gazebo和Rviz中的模型都没有任何反应

    已定时 已固定 已锁定 已移动
    机器人相关领域
    gazebo无响应 rviz不反应 ros melodic
    2
    2
    444
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 9
      903804897
      最后由 编辑

      标题:ros使用teleop_twist_keyboard teleop_twist_keyboard.py控制小车运动时,Gazebo和Rviz中的模型都没有任何反应

      背景:
      创建了一个四轮差速小车模型,需要让它在Gazebo和Rviz中动起来

      问题描述:
      ros使用teleop_twist_keyboard teleop_twist_keyboard.py控制小车运动时,Gazebo和Rviz中的模型都没有任何反应

      具体细节和上下文:
      底盘配置xacro文件如下:
      <robot name="my_car_move" xmlns:xacro="http://wiki.ros.org/xacro">

      <xacro:macro name="joint_trans" params="joint_name">
          <!-- Transmission is important to link the joints and the controller -->
          <transmission name="${joint_name}_trans">
              <type>transmission_interface/SimpleTransmission</type>
              <joint name="${joint_name}">
                  <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
              </joint>
              <actuator name="${joint_name}_motor">
                  <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                  <mechanicalReduction>1</mechanicalReduction>
              </actuator>
          </transmission>
      </xacro:macro>
      
      <xacro:joint_trans joint_name="left_up2base" />
      <xacro:joint_trans joint_name="left_down2base" />
      <xacro:joint_trans joint_name="right_up2base" />
      <xacro:joint_trans joint_name="right_down2base" />
      
      <!-- differential drive -->
      <gazebo>
          <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
              <rosDebugLevel>Debug</rosDebugLevel>
              <robotNamespace>/</robotNamespace>
              <publishTf>1</publishTf>
              <publishOdomTF>true</publishOdomTF>
              <publishWheelTF>true</publishWheelTF>
              <publishWheelJointState>true</publishWheelJointState>
              <alwaysOn>true</alwaysOn>
              <updateRate>100.0</updateRate>
              <legacyMode>true</legacyMode>
              <leftJoint>left_up2base,left_down2base</leftJoint> 
              <rightJoint>right_up2base,right_down2base</rightJoint> 
              <wheelSeparation>${base_radius * 2}</wheelSeparation> 
              <wheelDiameter>${wheel_radius * 2}</wheelDiameter> 
              <broadcastTF>1</broadcastTF>
              <torque>55.7</torque>
              <wheelTorque>30</wheelTorque>
              <wheelAcceleration>1.8</wheelAcceleration>
              <commandTopic>cmd_vel</commandTopic>
              <odometryFrame>odom</odometryFrame> 
              <odometryTopic>odom</odometryTopic> 
              <odometrySource>1</odometrySource>
              <robotBaseFrame>base_footprint</robotBaseFrame> 
          </plugin>
      </gazebo>
      

      </robot>

      control.yaml文件如下:

      该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....

      因此,根 name 是 controller

      controllers: {

      单控制器设置

      base_controller: {
      #类型: 差速控制器
      type: diff_controller,
      #参考坐标
      base_frame_id: base_footprint,
      #两个轮子之间的间距
      base_width: 0.2,
      #控制频率
      ticks_meter: 2000,
      #PID控制参数,使机器人车轮快速达到预期速度
      Kp: 12,
      Ki: 0,
      Kd: 12,
      Ko: 50,
      #加速限制
      accel_limit: 1.0
      }
      }

      尝试过的解决方法:
      修改过很多次配置文件,主要在gazebo标签部分

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在你遇到的问题中,有几个潜在的原因可能导致使用 teleop_twist_keyboard 时 Gazebo 和 Rviz 中的模型没有反应。这里我会逐步分析并给出一些可能的解决方案。

        1. 确保所有配置文件的正确性

        首先,检查你的配置文件,特别是 URDF/XACRO 文件和控制器配置文件(如 control.yaml)。从你提供的 xacro 文件来看,你正确地设置了差分驱动插件(libgazebo_ros_diff_drive.so),但在 control.yaml 文件中存在一些潜在的问题:

        • 控制器类型:你使用的是 diff_controller,但在 ROS 中,标准的差分驱动控制器类型通常是 diff_drive_controller。确保你的控制器节点正确加载了正确的控制器类型。
        • 配置文件与控制器名称匹配:在 control.yaml 中定义的控制器名称是 base_controller,但在你的 xacro 文件中没有直接提及这个名称。你需要确保在你的 ROS 启动文件中(如 robot_description.launch 或 controller_spawner.launch)正确加载了这个控制器。

        2. 控制器启动

        确保你已经正确启动了控制器管理器并加载了 base_controller。这通常通过 roslaunch 或 rosrun 命令结合 .launch 文件完成。例如:

        roslaunch your_package_name controller_spawner.launch
        

        确保 controller_spawner.launch 文件中包含了类似以下的内容:

        <launch>
          <arg name="manager" default="controller_manager" />
          <node name="$(arg manager)" pkg="controller_manager" type="spawner" respawn="false"
                output="screen" args="base_controller" />
        </launch>
        

        3. 检查 ROS 话题

        使用 rostopic list 查看是否有 cmd_vel 话题发布,并且确保 teleop_twist_keyboard 正在发布到这个话题。使用 rostopic echo /cmd_vel 来检查是否有速度命令被发送。

        4. 检查 Gazebo 日志

        检查 Gazebo 的终端输出或日志文件,看是否有关于控制器的错误或警告信息。特别是关于差分驱动插件的错误或配置问题。

        5. 确保坐标系一致

        确保所有坐标系(如 base_footprint, odom 等)在你的模型中已正确定义并一致。错误的坐标系配置会导致数据传递错误或无法传递。

        6. Rviz 配置

        在 Rviz 中,确保你添加了 RobotModel 显示和适当的 TF 框架。这有助于你检查坐标变换是否正确。

        7. 重新加载 URDF/XACRO

        有时,在做了重大更改后,重新启动 ROS 节点和 Gazebo 并重新加载 URDF/XACRO 文件可以解决问题。

        按照这些步骤检查和修改你的配置,通常可以解决大部分关于 ROS、Gazebo 和 Rviz 中模型无反应的问题。如果问题仍然存在,请详细检查 ROS 的日志输出以获取更多线索。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS