Topic /mavros/setpoint_raw/local cannot control the drone in real time

ros2 humble ubuntu22.04
I’m exploring mavros topic and I find that the /mavros/setpoint_raw/local can be used to control the drone in SITL. But it seems like when I publish the topic, drone sometimes run, but sometimes it just does nothing.
What I pub is like: ros2 topic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget ‘{coordinate_frame: 8,type_mask: 3576, position: {x: 0.0, y: 0.0, z: 2.0}}’ --once
When I pub several times, it will run once. But if I use Mavproxy to send the message like: message SET_POSITION_TARGET_LOCAL_NED 0 0 0 8 3576 0 0 2 0 0 0 0 0 0 0 0, the drone will run once correctly, so why this happened and how can I use the /mavros/setpoint_raw/local topic accurately for one time control.