完善ROS中的话题通讯

This commit is contained in:
张梦南 2025-07-02 13:37:37 +08:00
parent b4047e937f
commit 4d34c200dc
2 changed files with 6 additions and 40 deletions

View File

@ -19,7 +19,7 @@ def main():
msg.point.y = math.cos(0.05 * math.pi * k) # y 值 msg.point.y = math.cos(0.05 * math.pi * k) # y 值
msg.point.z = 0.0 msg.point.z = 0.0
pub.publish(msg) # 发布话题 pub.publish(msg) # 发布话题
rospy.loginfo("Published: x=%.3f, y=%.3f" % (msg.point.x, msg.point.y)) # 打印坐标信息 rospy.loginfo("发布端发送坐标信息: x=%.3f, y=%.3f" % (msg.point.x, msg.point.y)) # 打印坐标信息
k += 1 k += 1
rate.sleep() rate.sleep()

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import rospy import rospy
import random
from geometry_msgs.msg import PointStamped, Point from geometry_msgs.msg import PointStamped, Point
from visualization_msgs.msg import Marker, MarkerArray from visualization_msgs.msg import Marker, MarkerArray
from std_msgs.msg import ColorRGBA from std_msgs.msg import ColorRGBA
@ -9,28 +8,15 @@ from std_msgs.msg import ColorRGBA
MAX_POINTS = 100 MAX_POINTS = 100
original_trajectory = [] original_trajectory = []
noisy_trajectory = []
noisy_pub = None
marker_pub = None marker_pub = None
def position_callback(msg): def position_callback(msg):
global original_trajectory, noisy_trajectory global original_trajectory
global noisy_pub, marker_pub global marker_pub
noise_x = random.uniform(-0.1, 0.1)
noise_y = random.uniform(-0.1, 0.1)
noisy_msg = PointStamped()
noisy_msg.header = msg.header
noisy_msg.point.x = msg.point.x + noise_x # 对 x 添加噪声
noisy_msg.point.y = msg.point.y + noise_y # 对 y 添加噪声
noisy_msg.point.z = 0.0
original_trajectory.append(msg.point) original_trajectory.append(msg.point)
if len(original_trajectory) > MAX_POINTS: if len(original_trajectory) > MAX_POINTS:
original_trajectory.pop(0) original_trajectory.pop(0)
noisy_trajectory.append(noisy_msg.point)
if len(noisy_trajectory) > MAX_POINTS:
noisy_trajectory.pop(0)
marker_array = MarkerArray() marker_array = MarkerArray()
original_line = Marker() original_line = Marker()
@ -45,18 +31,6 @@ def position_callback(msg):
original_line.points = list(original_trajectory) original_line.points = list(original_trajectory)
marker_array.markers.append(original_line) marker_array.markers.append(original_line)
noisy_line = Marker()
noisy_line.header = msg.header
noisy_line.ns = "trajectory"
noisy_line.id = 1
noisy_line.type = Marker.LINE_STRIP
noisy_line.action = Marker.ADD
noisy_line.scale.x = 0.02
noisy_line.color.r = 1.0
noisy_line.color.a = 1.0
noisy_line.points = list(noisy_trajectory)
marker_array.markers.append(noisy_line)
marker = Marker() marker = Marker()
marker.header.frame_id = "map" # 设置坐标系 marker.header.frame_id = "map" # 设置坐标系
marker.header.stamp = rospy.Time.now() marker.header.stamp = rospy.Time.now()
@ -66,26 +40,18 @@ def position_callback(msg):
marker.scale.y = 0.025 # 点的直径 marker.scale.y = 0.025 # 点的直径
marker.color = ColorRGBA(1.0, 0.0, 0.0, 1.0) # 红色 marker.color = ColorRGBA(1.0, 0.0, 0.0, 1.0) # 红色
points = [] marker.points = [Point(x=p.x, y=p.y, z=p.z) for p in original_trajectory]
for point in noisy_trajectory:
p = Point()
p.x = point.x
p.y = point.y
p.z = 0.0
points.append(p)
marker.points = points
marker_array.markers.append(marker) marker_array.markers.append(marker)
marker_pub.publish(marker_array) marker_pub.publish(marker_array)
rospy.loginfo("Published noisy point: x=%.3f, y=%.3f | Noisy: x=%.3f, y=%.3f",msg.point.x, msg.point.y, noisy_msg.point.x, noisy_msg.point.y) rospy.loginfo("订阅端接收坐标信息: x=%.3f, y=%.3f ",msg.point.x, msg.point.y)
if __name__ == '__main__': if __name__ == '__main__':
rospy.init_node('Subscriber_Client_S') rospy.init_node('Subscriber_Client_S')
rospy.Subscriber('position', PointStamped, position_callback) rospy.Subscriber('position', PointStamped, position_callback)
noisy_pub = rospy.Publisher('noisy_position', PointStamped, queue_size=10)
marker_pub = rospy.Publisher('visualization_marker_array', MarkerArray, queue_size=10) marker_pub = rospy.Publisher('visualization_marker_array', MarkerArray, queue_size=10)
rospy.loginfo("Node initialized, waiting for position data...") rospy.loginfo("订阅端节点启动成功,等待发布端信息。")
rospy.spin() rospy.spin()