警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
记录和播放数据 挎包
使用 ROS 1 桥接器
本教程是 ROS 1 和 ROS 2 之间的通信桥梁 可以找到的演示 这里在下文中,假设您已经完成了该教程。
ros1_bridge 可以从 二进制软件包 或 源生; 在这些例子中,这两种方法都有效。
接下来是一系列额外的例子,就像前文提到的《"......"》结尾的例子一样 ROS 1 和 ROS 2 之间的通信桥梁 演示。
使用 rosbag 和 ROS 1 Bridge 记录主题数据
在本例中,我们将使用 cam2image
ROS 2 自带的演示程序和 Python 脚本可以模拟一个简单的海龟机器人的传感器数据,这样我们就可以将其与 ROS 1 连接起来,并使用 rosbag 记录这些数据。
首先,我们将运行 ROS 1 玫瑰核
在一个新的外壳中:
# Shell A:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
玫瑰核
然后运行 ROS 1 <=> ROS 2 动态桥
与 -桥-所有主题
选项(这样我们就可以 游标 清单
并在另一个外壳中看到它们):
# Shell B:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
. /opt/ros/ardent/setup.bash
# 或者,如果从源代码构建 ROS 2:
# . <workspace-with-bridge>/install/setup.bash
出口 ROS_MASTER_URI=http://localhost:11311 ros2 运行 ros1_桥 动态桥 -桥-所有主题
记得更换 <带桥工作区>;
的路径,或者是提取 ROS 2 二进制文件的路径,或者是从源代码构建 ROS 2 的路径。
现在,我们可以启动 ROS 2 程序来模拟我们的海龟机器人。首先,我们将运行 cam2image
程序与 -b
选项,因此它不需要摄像头就能工作:
# Shell C:
. /opt/ros/ardent/setup.bash
# 或者,如果从源代码构建 ROS 2:
# . <workspace-with-bridge>/install/setup.bash
玫瑰2 运行 图像工具 cam2image -- -b
TODO: 使用命名的主题名称
然后,我们将运行一个简单的 Python 脚本来模拟 敖德
和 imu_data
小吹底座的主题。我会使用更准确的 ~sensors/imu_data
但 ROS 2 还不支持命名空间(即将推出!)。将此脚本放入一个名为 emulate_kobuki_node.py
:
#!/usr/bin/env python3
舶来品 系统
舶来品 时间
舶来品 rclpy
从 nav_msgs.msg 舶来品 测距
从 传感器_msgs.msg 舶来品 伊姆
捍卫 主要():
rclpy.启动(参数=系统.参数)
网站 = rclpy.创建节点('emulate_kobuki_node';)
imu_publisher = 网站.创建出版商(伊姆, 'imu_data';)
odom_publisher = 网站.创建出版商(测距, '奥多姆';)
imu_msg = 伊姆()
odom_msg = 测距()
计数器 = 0
虽然 正确:
计数器 += 1
现在 = 时间.时间()
如果 (计数器 % 50) == 0:
odom_msg.页眉.盖章.秒钟 = int(现在)
odom_msg.页眉.盖章.纳米 = int(现在 * 1e9) % 1000000000
odom_publisher.发布(odom_msg)
如果 (计数器 % 100) == 0:
imu_msg.页眉.盖章.秒钟 = int(现在)
imu_msg.页眉.盖章.纳米 = int(现在 * 1e9) % 1000000000
imu_publisher.发布(imu_msg)
计数器 = 0
时间.睡眠(0.001)
如果 姓名____ == '__main__';:
系统.出口(主要())
您可以在新的 ROS 2 shell 中运行这个 python 脚本:
# Shell D:
. /opt/ros/ardent/setup.bash
# 或者,如果从源代码构建 ROS 2:
# . <workspace-with-bridge>/install/setup.bash
python3 emulate_kobuki_node.py
现在,所有数据源和动态桥接器都已运行,我们可以在新的 ROS 1 shell 中查看可用主题:
# Shell E:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
游标 清单
你应该看到这样的内容:
% 游标 清单
/图像
/imu_data
/敖德
/莲雾
/啮合
我们现在可以用 挎包 记录
在同一个外壳中:
# Shell E:
挎包 记录 /图片 /imu_data /odom
几秒钟后,您可以 Ctrl-c
的 挎包
命令,并执行 ls -lh
来查看文件的大小,您可能会看到类似下面的内容:
% ls -总计 0
-rw-rw-r-- 1 威廉 威廉 12M 二月 23 16:59 2017-02-23-16-59-47.bag
不过,您的文件袋的文件名会有所不同(因为文件名来自日期和时间)。
使用 rosbag 和 ROS 1 Bridge 回放主题数据
现在,我们有了一个数据包文件,你可以使用任何 ROS 1 工具来反省数据包文件,例如 挎包 信息 <bag 文件>;
, 游标 清单 -b <bag 文件>;
或 rqt_bag <bag 文件>;
.不过,我们也可以通过以下方法将袋子数据回放至 ROS 2 挎包 游戏
和 ROS 1 <=> ROS 2 动态桥
.
首先关闭为上一教程打开的所有 shell,停止所有正在运行的程序。
然后在新的 shell 中启动 玫瑰核
:
# Shell P:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
玫瑰核
然后运行 动态桥
在另一个外壳中:
# Shell Q:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
. /opt/ros/ardent/setup.bash
# 或者,如果从源代码构建 ROS 2:
# . <workspace-with-bridge>/install/setup.bash
出口 ROS_MASTER_URI=http://localhost:11311 ros2 运行 ros1_桥 动态桥 -桥-所有主题
然后用 挎包 游戏
在另一个新的 shell 中,使用 --循环
选项,这样我们就不必一直为短包重新启动它:
# Shell R:
. /opt/ros/kinetic/setup.bash
# 或者,在 OSX 操作系统上,类似这样:
# . ~/ros_catkin_ws/install_isolated/setup.bash
挎包 游戏 --循环 path/to/bag_file
确保更换 path/to/bag_file
的路径。
现在,数据正在回放,网桥也在运行,我们可以在 ROS 2 中看到数据传输。
# Shell S:
. /opt/ros/ardent/setup.bash
# 或者,如果从源代码构建 ROS 2:
# . <workspace-with-bridge>/install/setup.bash
玫瑰2 主题 list ros2 主题 回响 /odom
你应该看到类似的内容:
% 玫瑰2 主题 清单
/钟
/图像
/imu_data
/敖德
/参数事件
您还可以通过使用 显示图像
工具
玫瑰2 运行 图像工具 显示图像