使用ros_gz_bridge将gz topic转换成ros2 topic
使用ros_gz_bridge将gz topic转换成ros2 topic
- 理解
- ros_gz_bridge 使用以下语法定义话题映射
- 来源
- 命令写法
理解
ros_gz_bridge 使用以下语法定义话题映射
<gazebo_topic>@<ros_message_type>@<gazebo_message_type>
<gazebo_topic>:Gazebo 中的话题名称(如 /imu)。
<ros_message_type>:ROS 2 消息类型(如 sensor_msgs/msg/Imu)。
<gazebo_message_type>:Gazebo 消息类型(如 gz.msgs.IMU)
将 Gazebo 的 /imu 话题(消息类型为 gz.msgs.IMU)转换为 ROS 2 的 /imu 话题(消息类型为 sensor_msgs/msg/Imu)
来源
- sensor_msgs/msg/Imu
ROS 2 的标准包 sensor_msgs,该消息类型是 ROS 2 官方定义的,用于表示惯性测量单元(IMU)的数据,包含加速度、角速度、姿态等信息。
安装 ROS 2 时,sensor_msgs 包会自动安装,无需手动生成
ros2 interface show sensor_msgs/msg/Imu
# 输出
# 包含线性加速度、角速度、姿态四元数等字段
std_msgs/Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance
- gz.msgs.IMU
Gazebo 的核心消息库,Gazebo 内部定义了 gz.msgs.IMU 消息类型,用于仿真中的 IMU 传感器数据,安装 Gazebo 时,这些消息类型已编译到库中,无需手动生成。 gz::msgs Namespace Reference
gz msg -i gz.msgs.IMU
# 输出
gz.msgs.Header header
gz.msgs.Vector3d angular_velocity
gz.msgs.Vector3d linear_acceleration
gz.msgs.Quaternion orientation
- /imu
需要桥接的话题是 /imu,这是在sdf文件中写的< plugin>下的< topic>
命令写法
终端命令:
ros2 run ros_gz_bridge parameter_bridge /imu@sensor_msgs/msg/Imu@gz.msgs.IMU
ros2 run ros_gz_bridge parameter_bridge /cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist
相应的launch.py中的写法
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='ros_gz_bridge',
executable='parameter_bridge',
arguments=[
'/imu@sensor_msgs/msg/Imu@gz.msgs.IMU',
'/cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist'
],
output='screen'
)
])
launch中的写法
<launch>
<node pkg="ros_gz_bridge" exec="parameter_bridge" name="gz_ros_bridge" output="screen">
<arg name="args" value="/imu@sensor_msgs/msg/Imu@gz.msgs.IMU /cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist"/>
</node>
</launch>