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

    fishbot bringup 节点无法订阅odom话题发布里程计 TF

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    slam nav2bringup
    3
    10
    1.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      agent
      最后由 小鱼 编辑

      背景:

      你做了哪些操作,什么系统,什么ROS版本

      Launch 文件

      import os
      from launch import LaunchDescription
      from launch.substitutions import LaunchConfiguration
      from launch_ros.actions import Node
      from launch_ros.substitutions import FindPackageShare
      
      
      def generate_launch_description():
          package_name = 'fishbot_description'
          urdf_name = "fishbot_v1.0.0.urdf"
      
          ld = LaunchDescription()
          pkg_share = FindPackageShare(package=package_name).find(package_name)
          urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
      
          robot_state_publisher_node = Node(
              package='robot_state_publisher',
              executable='robot_state_publisher',
              arguments=[urdf_model_path]
          )
      
          joint_state_publisher_node = Node(
              package='joint_state_publisher',
              executable='joint_state_publisher',
              name='joint_state_publisher',
              arguments=[urdf_model_path],
              output='screen',
      
          )
      
          fishbot_bringup_node = Node(
              package='fishbot_bringup',
              executable='fishbot_bringup',
              name='fishbot_bringup',
              output='screen',
          )
      
          ld.add_action(joint_state_publisher_node)
          ld.add_action(robot_state_publisher_node)
          ld.add_action(fishbot_bringup_node)
      
          return ld
      

      运行日志:

      做了哪些尝试

      ros2 topic echo /odom 可以正常输出里程计

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

        您提供的代码是一个Python脚本,用于生成一个launch文件,该文件是ROS 2中用于启动一组节点(nodes)的配置文件。在这个脚本中,您定义了三个节点:robot_state_publisher、joint_state_publisher和fishbot_bringup。这些节点通常是机器人系统启动时需要运行的组件。

        1. robot_state_publisher节点负责从URDF文件中读取机器人模型的信息,并发布机器人的状态信息。
        2. joint_state_publisher节点用于发布关节状态信息,这对于机器人的运动规划和控制非常重要。
        3. fishbot_bringup节点可能是用于启动FishBot机器人特定功能的节点。

        这个脚本使用launch和launch_ros库的API来构建启动描述(LaunchDescription),并使用FindPackageShare和os.path.join来找到URDF文件的路径。

        在脚本的末尾,generate_launch_description函数返回这个启动描述,这样您就可以使用ROS 2的launch工具来启动这些节点了。

        至于您提到的回复“[FishBot教程]7. FishBot-Nav2导航测试[链接文本]”和“@小鱼”,这似乎是对某个教程或讨论论坛的回复或提及。如果您有关于这个教程或如何使用这个launch文件的具体问题,或者需要进一步的帮助,请提供更多的上下文或具体的问题描述,我会尽量为您提供帮助。

        如果您想要运行这个launch文件,您通常需要保存它为.launch.py文件(例如fishbot_bringup.launch.py),然后使用ROS 2的ros2 launch命令来启动它。

        例如:

        ros2 launch fishbot_description fishbot_bringup.launch.py
        

        这条命令会启动在generate_launch_description函数中定义的所有节点。请确保您的ROS 2工作空间已经构建,并且所有依赖的包都已经正确安装。


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

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

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

          @2940867840 https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答

          1.请修改格式
          2.请修改标题
          3.请贴上运行日志信息

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

            @小鱼 问题:运行bringup 文件接受不到TF消息,终端如下图!截图 2024-06-08 12-28-44.png
            bringup launch文件代码如下
            import os
            from launch import LaunchDescription
            from launch.substitutions import LaunchConfiguration
            from launch_ros.actions import Node
            from launch_ros.substitutions import FindPackageShare

            def generate_launch_description():
            package_name = 'fishbot_description'
            urdf_name = "fishbot_v1.0.0.urdf"

            ld = LaunchDescription()
            pkg_share = FindPackageShare(package=package_name).find(package_name)
            urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
            
            robot_state_publisher_node = Node(
                package='robot_state_publisher',
                executable='robot_state_publisher',
                arguments=[urdf_model_path]
            )
            
            joint_state_publisher_node = Node(
                package='joint_state_publisher',
                executable='joint_state_publisher',
                name='joint_state_publisher',
                arguments=[urdf_model_path],
                output='screen',
            
            )
            
            fishbot_bringup_node = Node(
                package='fishbot_bringup',
                executable='fishbot_bringup',
                name='fishbot_bringup',
                output='screen',
            )
            
            ld.add_action(joint_state_publisher_node)
            ld.add_action(robot_state_publisher_node)
            ld.add_action(fishbot_bringup_node)
            
            return ld
            
            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @2940867840
              最后由 编辑

              @2940867840 你做了哪些操作,什么系统,什么ROS版本

              目前还判断不出问题所在,请尽量提供更多的信息,

              --

              提问模板(建议直接复制粘贴):

              背景(可选):

              [在这里描述你要实现什么,也许有更好的方案]

              问题描述:

              [在这里详细描述您遇到的问题。请确保您提供了足够的背景信息,以便其他人能够理解您的问题。]

              具体细节和上下文:

              • [列出任何相关细节或前后操作,以帮助回答者更好地理解您的问题。]
              • [如果可能,请提供与您问题相关的链接或参考资料。]

              尝试过的解决方法:

              • [描述您已经尝试过的任何解决方法或方法。这可以帮助其他人了解您遇到问题的具体情况,并避免给出与您已经尝试过的解决方案相同的答案。]
              2 1 条回复 最后回复 回复 引用 0
              • 2
                agent @小鱼
                最后由 编辑

                @小鱼 系统:双系统22.04,ros humble版本,我在烧录时候修改了命名空间namespace,其他的都是按照教程文档一步一步操作的,前几个步骤都可以实现,到bringup 就没有转换TF 信息

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

                  @2940867840 无法订阅是,修改命名空间造成的,命名空间改变,话题的名字也会改变,之前你是不是因为遇到一台电脑可以控制多个小车造成冲突才修改的,解决冲突办法有很多,如果每台小车都要实现导航功能,最好的办法不是修改命名空间,因为导航也会冲突,建议的解决办法有两个:

                  1. 每台车+电脑 配备一个路由器

                  2.关闭电脑的局域网通信功能,避免ROS2 同一个局域网自动通信(此时:agent使用手动构建版本,https://fishros.org.cn/forum/topic/1295/agent-手动编译-不用docker-以及树莓派上使用micros-agent的方法/10)

                  @小伊 总结下上面的回答

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

                    总结:

                    上述回答针对ROS2环境中遇到的小车控制冲突问题,给出了两种建议的解决办法。首先,冲突的原因可能是修改了命名空间,导致话题名字改变,而之前修改的原因可能是为了避免一台电脑控制多个小车时产生的冲突。不过,修改命名空间并非最佳解决方案,尤其是在需要实现导航功能的情况下,因为导航本身也可能产生冲突。

                    推荐的两种解决办法如下:

                    1. 每台小车和对应的电脑配备一个独立的路由器。这样做可以将每台小车的通信环境隔离开来,避免它们之间的通信冲突。

                    2. 关闭电脑的局域网通信功能。这样可以防止ROS2在同一个局域网内自动通信,从而避免冲突。如果采用这种方法,需要使用手动构建版本的agent,而不是依赖docker容器。此外,还提到了在树莓派上使用micros-agent的方法。

                    总之,为了避免小车控制冲突,应该优先考虑隔离通信环境或使用其他非修改命名空间的解决方案。


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

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

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

                      @小鱼 只允许本地通信的方法:

                      默认情况下,ROS 2 通信不限于本地主机。 ROS_LOCALHOST_ONLY环境变量允许您将 ROS 2 通信限制为仅本地主机。这意味着您的 ROS 2 系统及其主题(Topic)、服务(Service)和操作(Action)对本地网络上的其他计算机不可见。在某些环境中使用ROS_LOCALHOST_ONLY很有帮助,例如教室,多个机器人可能会发布到同一主题,从而导致奇怪的行为。您可以使用以下命令设置环境变量

                      Linux
                      export ROS_LOCALHOST_ONLY=1

                      若要在每个shell都默认使用这个值,使用以下命令

                      echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc

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

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