小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
fishbot bringup 节点无法订阅odom话题发布里程计 TF
-
背景:
你做了哪些操作,什么系统,什么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 可以正常输出里程计
-
您提供的代码是一个Python脚本,用于生成一个
launch
文件,该文件是ROS 2中用于启动一组节点(nodes)的配置文件。在这个脚本中,您定义了三个节点:robot_state_publisher
、joint_state_publisher
和fishbot_bringup
。这些节点通常是机器人系统启动时需要运行的组件。robot_state_publisher
节点负责从URDF文件中读取机器人模型的信息,并发布机器人的状态信息。joint_state_publisher
节点用于发布关节状态信息,这对于机器人的运动规划和控制非常重要。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工作空间已经构建,并且所有依赖的包都已经正确安装。
以上为生成回答,仅供参考~
-
@2940867840 https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答
1.请修改格式
2.请修改标题
3.请贴上运行日志信息 -
@小鱼 问题:运行bringup 文件接受不到TF消息,终端如下图!
bringup launch文件代码如下
import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageSharedef 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
-
@2940867840 你做了哪些操作,什么系统,什么ROS版本
目前还判断不出问题所在,请尽量提供更多的信息,
--
提问模板(建议直接复制粘贴):
背景(可选):
[在这里描述你要实现什么,也许有更好的方案]
问题描述:
[在这里详细描述您遇到的问题。请确保您提供了足够的背景信息,以便其他人能够理解您的问题。]
具体细节和上下文:
- [列出任何相关细节或前后操作,以帮助回答者更好地理解您的问题。]
- [如果可能,请提供与您问题相关的链接或参考资料。]
尝试过的解决方法:
- [描述您已经尝试过的任何解决方法或方法。这可以帮助其他人了解您遇到问题的具体情况,并避免给出与您已经尝试过的解决方案相同的答案。]
-
@小鱼 系统:双系统22.04,ros humble版本,我在烧录时候修改了命名空间namespace,其他的都是按照教程文档一步一步操作的,前几个步骤都可以实现,到bringup 就没有转换TF 信息
-
@2940867840 无法订阅是,修改命名空间造成的,命名空间改变,话题的名字也会改变,之前你是不是因为遇到一台电脑可以控制多个小车造成冲突才修改的,解决冲突办法有很多,如果每台小车都要实现导航功能,最好的办法不是修改命名空间,因为导航也会冲突,建议的解决办法有两个:
- 每台车+电脑 配备一个路由器
2.关闭电脑的局域网通信功能,避免ROS2 同一个局域网自动通信(此时:agent使用手动构建版本,https://fishros.org.cn/forum/topic/1295/agent-手动编译-不用docker-以及树莓派上使用micros-agent的方法/10)
@小伊 总结下上面的回答
-
总结:
上述回答针对ROS2环境中遇到的小车控制冲突问题,给出了两种建议的解决办法。首先,冲突的原因可能是修改了命名空间,导致话题名字改变,而之前修改的原因可能是为了避免一台电脑控制多个小车时产生的冲突。不过,修改命名空间并非最佳解决方案,尤其是在需要实现导航功能的情况下,因为导航本身也可能产生冲突。
推荐的两种解决办法如下:
-
每台小车和对应的电脑配备一个独立的路由器。这样做可以将每台小车的通信环境隔离开来,避免它们之间的通信冲突。
-
关闭电脑的局域网通信功能。这样可以防止ROS2在同一个局域网内自动通信,从而避免冲突。如果采用这种方法,需要使用手动构建版本的agent,而不是依赖docker容器。此外,还提到了在树莓派上使用micros-agent的方法。
总之,为了避免小车控制冲突,应该优先考虑隔离通信环境或使用其他非修改命名空间的解决方案。
以上为生成回答,仅供参考~
-
-
@小鱼 只允许本地通信的方法:
默认情况下,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