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

    6.4.7机器人建模时在rviz中相机模块有质量和TF但是模块不可见

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    ros2 机器人建模
    3
    6
    298
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      2118561423
      最后由 编辑

      camera_link的TF坐标和质量都能正常表示但是外观和惯性无法在rviz中观察到,鱼哥帮忙看下是什么问题
      ccdc85d1-4d0d-47af-b8f9-bf7dd573f1ba-图片.png 281d9d77-c023-4748-88db-7ef42c791b17-图片.png
      <?xml version="1.0"?>
      <robot xmlns:xacro="http://www.ros.org/wiki/xacro">
      <xacro:include filename="$(find fishbot_description)/urdf/fishbot/common_intertia.xacro"/>
      <xacro:macro name="camera_xacro" params="xyz">
      <link name="camera_link">
      <!-- 部件外观描述 -->
      <visual>
      <!-- 沿着自己几何中心的偏移旋转 -->
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
      <!-- 几何形状 -->
      <geometry>
      <!-- 正方体 -->
      <box size="0.02 0.10 0.02"/>
      </geometry>
      <!-- 材质颜色 -->
      <material name="green">
      <color rgba="0.0 1.0 0.0 0.8"/>
      </material>
      </visual>
      <collision>
      <!-- 沿着自己几何中心的偏移旋转 -->
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
      <!-- 几何形状 -->
      <geometry>
      <!-- 正方体 -->
      <box size="0.02 0.10 0.02"/>
      </geometry>
      <!-- 材质颜色 -->
      <material name="green">
      <color rgba="0.0 1.0 0.0 0.8"/>
      </material>
      </collision>
      <xacro:box_interia m="0.1" w="0.02" h="0.10" d="0.02" />
      </link>
      <link name="camera_optical_link">
      </link>
      <!--机器人关节-->
      <joint name="camera_joint" type="fixed">
      <origin xyz="${xyz}" rpy="0.0 0.0 0.0"/>
      <parent link="base_link"/>
      <child link="camera_link"/>
      </joint>
      <joint name="camera_optical_link" type="fixed">
      <origin xyz="0 0 0" rpy="${-pi/2} 0.0 ${-pi/2}"/>
      <parent link="camera_link"/>
      <child link="camera_optical_link"/>
      </joint>
      </xacro:macro>
      </robot>

      日志输出:
      chen@chen-virtual-machine:~/Program/Chapt6/chapt6_ws$ ros2 launch fishbot_description dispalay_robot.launch.py model:=/home/chen/Program/Chapt6/chapt6_ws/install/fishbot_description/share/fishbot_
      description/urdf/fishbot/fishbot.urdf.xacro
      [INFO] [launch]: All log files can be found below /home/chen/.ros/log/2025-01-08-17-21-35-353117-chen-virtual-machine-2740
      [INFO] [launch]: Default logging verbosity is set to INFO
      [INFO] [robot_state_publisher-1]: process started with pid [2742]
      [INFO] [joint_state_publisher-2]: process started with pid [2744]
      [INFO] [rviz2-3]: process started with pid [2746]
      [rviz2-3] qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
      [robot_state_publisher-1] Error: Inertial: inertia element izz is not a valid double
      [robot_state_publisher-1] at line 334 in ./urdf_parser/src/link.cpp
      [robot_state_publisher-1] Error: Could not parse inertial element for Link [camera_link]
      [robot_state_publisher-1] at line 435 in ./urdf_parser/src/link.cpp
      [robot_state_publisher-1] Error: Inertial: inertia element izz is not a valid double
      [robot_state_publisher-1] at line 334 in ./urdf_parser/src/link.cpp
      [robot_state_publisher-1] Error: Could not parse inertial element for Link [imu_link]
      [robot_state_publisher-1] at line 435 in ./urdf_parser/src/link.cpp
      [robot_state_publisher-1] [INFO] [1736328095.667699306] [robot_state_publisher]: got segment back_caster_link
      [robot_state_publisher-1] [INFO] [1736328095.667924554] [robot_state_publisher]: got segment base_footprint
      [robot_state_publisher-1] [INFO] [1736328095.667944890] [robot_state_publisher]: got segment base_link
      [robot_state_publisher-1] [INFO] [1736328095.667953666] [robot_state_publisher]: got segment camera_link
      [robot_state_publisher-1] [INFO] [1736328095.667959129] [robot_state_publisher]: got segment camera_optical_link
      [robot_state_publisher-1] [INFO] [1736328095.667964040] [robot_state_publisher]: got segment front_caster_link
      [robot_state_publisher-1] [INFO] [1736328095.667968629] [robot_state_publisher]: got segment imu_link
      [robot_state_publisher-1] [INFO] [1736328095.667973430] [robot_state_publisher]: got segment laser_cylinder_link
      [robot_state_publisher-1] [INFO] [1736328095.667978059] [robot_state_publisher]: got segment laser_link
      [robot_state_publisher-1] [INFO] [1736328095.667982387] [robot_state_publisher]: got segment left_wheel_link
      [robot_state_publisher-1] [INFO] [1736328095.667986896] [robot_state_publisher]: got segment right_wheel_link
      [rviz2-3] [INFO] [1736328096.051481139] [rviz2]: Stereo is NOT SUPPORTED
      [rviz2-3] [INFO] [1736328096.051679395] [rviz2]: OpenGl version: 4.3 (GLSL 4.3)
      [joint_state_publisher-2] [INFO] [1736328096.065208564] [joint_state_publisher]: Waiting for robot_description to be published on the robot_description topic...
      [rviz2-3] [INFO] [1736328096.105255489] [rviz2]: Stereo is NOT SUPPORTED
      [rviz2-3] Error: Inertial: inertia element izz is not a valid double
      [rviz2-3] at line 334 in ./urdf_parser/src/link.cpp
      [rviz2-3] Error: Could not parse inertial element for Link [camera_link]
      [rviz2-3] at line 435 in ./urdf_parser/src/link.cpp
      [rviz2-3] Error: Inertial: inertia element izz is not a valid double
      [rviz2-3] at line 334 in ./urdf_parser/src/link.cpp
      [rviz2-3] Error: Could not parse inertial element for Link [imu_link]
      [rviz2-3] at line 435 in ./urdf_parser/src/link.cpp

      日志显示惯性数据不是双精度但是检查了下代码没什么问题
      惯性设置xacro文件代码:
      <?xml version="1.0"?>
      <robot xmlns:xacro="http://www.ros.org/wiki/xacro">
      <xacro:macro name="box_interia" params="m w h d">
      <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
      <mass value="${m}"/>
      <inertia ixx="${(m/12)(hh+dd)}" ixy="0.0" ixz="0.0" iyy="${(m/12.0)(ww+dd)}" iyz="0.0" izz="{(m/12.0)(ww+h*h)}"/>
      </inertial>
      </xacro:macro>

      <xacro:macro name="cylinder_interia" params="m r h">
          <inertial>
              <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
              <mass value="${m}"/>
              <inertia ixx="${(m/12)*(3*r*r+h*h)}" ixy="0.0" ixz="0.0" iyy="${(m/12.0)*(3*r*r+h*h)}" iyz="0.0" izz="${(m/2.0)*(r*r)}"/>
          </inertial>
      </xacro:macro>
      
      <xacro:macro name="sphere_interia" params="m r">
          <inertial>
              <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
              <mass value="${m}"/>
              <inertia ixx="${(2/5)*m*(r*r)}" ixy="0.0" ixz="0.0" iyy="${(2.0/5.0)*m*(r*r)}" iyz="0.0" izz="${(2.0/5.0)*m*(r*r)}"/>
          </inertial>
      </xacro:macro>
      

      </robot>

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

        从你提供的日志和代码来看,问题主要出在惯性(inertia)的计算和表示上。这里有几个关键点需要注意:

        1. 惯性公式中的变量表示:
          在你的 box_interia 宏中,惯性计算公式使用了变量 hh, dd, ww,但这些变量并没有在宏的参数或宏内部被定义。你应该使用传入的参数 h, d, w 来计算惯性。

        2. 变量替换和计算:
          在 XACRO 中,你需要确保所有的变量替换都正确无误,并且计算表达式也是正确的。在 XACRO 中,你可以直接使用数学表达式,但需要注意表达式的正确性和变量的准确性。

        3. XACRO 的语法:
          在 XACRO 文件中,确保所有的 XML 标签都正确闭合,并且 XACRO 的宏定义和调用都符合语法规则。

        针对你的问题,你可以修改 box_interia 宏如下:

        <xacro:macro name="box_interia" params="m w h d">
            <inertial>
                <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <mass value="${m}"/>
                <inertia ixx="${(m/12.0)*(h*h + d*d)}" ixy="0.0" ixz="0.0" 
                         iyy="${(m/12.0)*(w*w + d*d)}" iyz="0.0" 
                         izz="${(m/12.0)*(w*w + h*h)}"/>
            </inertial>
        </xacro:macro>
        

        这里我做了以下修改:

        • 使用 ${(m/12.0)*(h*h + d*d)} 替换原来的 ${(m/12)(hh+dd)},确保使用正确的参数 h 和 d。
        • 类似地,对 iyy 和 izz 也进行了修改。

        确保在你的主 URDF 文件中正确调用了这个宏,并且传入了正确的参数。

        另外,你的 camera_xacro 宏中的 camera_optical_link 链接定义不完整,它缺少 <visual>, <collision>, 和 <inertial> 元素。如果 camera_optical_link 只是一个虚拟链接,用于定位相机的光学中心,并且不需要在 RViz 中显示,你可以忽略这些元素。但如果你希望在 RViz 中看到它,你需要为它添加相应的视觉和碰撞属性。

        最后,确保你的 dispalay_robot.launch.py 文件中正确设置了 URDF 文件的路径,并且所有必要的 ROS 节点和组件都已正确启动。如果问题仍然存在,你可能需要检查 ROS 2 的日志以获取更多信息。


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

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

        1 条回复 最后回复 回复 引用 0
        • 2
          2118561423
          最后由 编辑

          我还发现了一个神奇的事情🐟哥。我每次启动在rviz中会出现两个robotmodel,其中一个只包含机器人主体和惯性单元,另一个除了IMU和相机为外都包含,都没有相机的外观,但是TF坐标却都是完整的,这是啥情况
          95ac93ec-aa71-4f36-a422-ec4bc235e099-图片.png
          ff9bde89-d7a1-46e7-b5a2-87b430fdbf8e-图片.png

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @2118561423
            最后由 编辑

            @2118561423 你添加了两个robotomodel插件了

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            2 2 条回复 最后回复 回复 引用 1
            • 2
              2118561423 @小鱼
              最后由 编辑

              @小鱼 感谢鱼哥,我又仔细检查了下应该是正方体惯性数据定义的时候少了一个dollar符导致rviz2启动经常出错误,修改后已经恢复正常了,感谢鱼哥答复

              1 条回复 最后回复 回复 引用 0
              • 2
                2118561423 @小鱼
                最后由 编辑

                @小鱼 在 6.4.7机器人建模时在rviz中相机模块有质量和TF但是模块不可见 中说:

                @2118561423 你添加了两个robotomodel插件了

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