ROS学习笔记(十五):Using the robot state publisher on your own robot

当您使用具有许多相关框架的机器人时,将它们全部发布到tf成为一项艰巨的任务。 机器人状态发布者是一款可以为您完成此工作的工具。
在这里插入图片描述机器人状态发布者可帮助您将机器人的状态广播到tf转换库。 机器人状态发布者在内部具有机器人的运动学模型。 因此,根据机器人的关节位置,机器人状态发布者可以计算和广播机器人中每个链接的3D姿态。

您可以将机械手状态发布器用作独立的ROS节点或库:

1.Running as a ROS node

1.1 robot_state_publisher

运行机器人状态发布者的最简单方法是作为节点。 对于普通用户,这是建议的用法。 您需要执行以下两项操作来运行机械手状态发布器:

  • 在参数服务器上加载的urdf xml机械手描述。
  • 将关节位置发布为sensor_msgs / JointState的源。

请阅读以下章节,了解如何为robot_state_publisher配置参数和主题。

1.1.1 Subscribed topics

  • joint_states(sensor_msgs / JointState)
  • 关节位置信息

1.1.2 Parameters

robot_description(urdf map)

 urdf xml机械手说明。 通过`urdf_model :: initParam`访问

tf_prefix(string)

 设置tf前缀,以进行名称空间感知的转换发布。 有关更多详细信息,请参见tf_prefix。

publish_frequency(double)

 状态发布者的发布频率,默认值:50Hz。

1.2 Example launch file
设置XML机械手描述和关节位置信息源后,只需创建一个启动文件,如下所示:

<launch>
   <!-- Load the urdf into the parameter server. -->
   <param name="my_robot_description" textfile="$(find mypackage)/urdf/robotmodel.xml"/>
    
   <node pkg="robot_state_publisher" type="robot_state_publisher" name="rob_st_pub" >
      <remap from="robot_description" to="my_robot_description" />
      <remap from="joint_states" to="different_joint_states" />
    </node>
  </launch>

2.Running as a library

高级用户还可以从自己的C ++代码中以库的形式运行机械手状态发布器。 包含标题后:

  #include <robot_state_publisher/robot_state_publisher.h>

您只需要一个包含KDL树的构造函数:

  RobotStatePublisher(const KDL::Tree& tree);

现在,每次您要发布机器人状态时,都可以调用publishTransforms函数:

 // publish moving joints
  void publishTransforms(const std::map<std::string, double>& joint_positions,
                         const ros::Time& time);

  // publish fixed joints
  void publishFixedTransforms();

第一个参数是具有关节名称和关节位置的地图,第二个参数是记录关节位置的时间。 如果地图不包含所有关节名称,也可以。 如果地图包含的运动学模型不包含某些关节名称,也可以。 但是请注意,如果您不将运动模型中的某些关节告诉联合州发布者,那么您的tf树将是不完整的。

猜你喜欢

转载自blog.csdn.net/qq_42910179/article/details/107037235