如何订阅“/scan”主题,修改消息并再次发布到“/scan”主题?

How to subscribe "/scan" topic, modify the messages and publish it again to the "/scan" topic?

我想通过对传感器应用一些算法来改进 turtlebot3 LDS-01 传感器。所以我的策略是通过订阅“/scan”主题来改进和修改 Laserscan.ranges 的值(这是传感器到障碍物之间的距离),将算法应用于 Laserscan.ranges 并发布它再次回到“/扫描”主题。我怎样才能做到这一点?。我脑子里有一些想法:

  1. 创建新主题,将传感器值发布到新主题,订阅新主题并应用算法,最后将其发布到“/scan”主题。但是第一个想法,我找不到发布到“/scan”主题的 cpp 或 python 文件。我在哪里可以找到那个文件?这样我就可以更改编码以将 Laserscan.ranges 发布到新主题。

  2. 通过将算法应用于 float32 范围来修改 sensor_msgs/LaserScan。但是这第二个想法,我不知道消息是否可以修改?如果可以,如何修改sensor_msgs/LaserScan应用算法?

最后,如果有任何与这个问题相关的建议、教程或在线课程,我将非常乐意听到。

这张图片是想法 1 的摘要

您不应该在修改消息后重新发布传感器主题。如果您这样做,其他订阅者将只能看到修改过的和未修改过的消息的混合体。而是将其发布在一个单独的主题上,如下所示:

scan_msg_pub = rospy.Publisher('/scan/edited', LaserScan, queue_size=10)
def scan_msg_cb(msg):
    #Edit message here
    msg.header.frame_id = "new_frame_id" #You can change msg fields like this
    scan_msg_pub.publish(msg)

def main():
    rospy.Subscriber('/scan', LaserScan, scan_msg_cb)

    rospy.spin()

if __name__ == '__main__':
    rospy.init_node('scan_edit')
    main()