A couple of points to add:
1. Yes, BsmHelper is not (yet) ideal, and could benefit from some documentation and/or maybe API changes. The original intend was to couple that with the VANET BSM generation application. So, using it outside of the framework of the VANET script will require some more thought / work to make it "stand alone".
Part of what BsmStats and helper are trying to work-around are:
2. The well-discussed "FlowMonitor does not work with broadcast packets." The VANET application is broadcasting from every node a Basic Safety Message (BSM) 10 times per second. While FlowMonitor does not work with broadcast packets, there remains a need to capture some statistics for those packets. BsmStats is intended to allow someone to set up a "range" of distances and then track the PDR, i.e., the percent of expected packets that are actually received within the set of user-provided ranges (i.e., distances from the transmitter). I guess I would favor / suggest a refactoring to more generally support a stand-alone mechanism to capture statistics for broadcast packets.
3. Node in a VANET need to "start" and "stop" moving. I think this has also been discussed in the forum, but as of yet there is not an implementation to generically support starting and stopping nodes. Playing back a mobility file in the vanet-routing-compare script simulates cars (nodes) moving. But, not all nodes are initially "started". Some of them may actually sit idle for some part of the simulation (e.g., until the "driver" turns the key to start the car and finally gets the vehicle underway). Thus, when playing back a mobility file, it is (currently) left up to the user to specify when nodes are actually considered to "start" moving. Similarly, there is an issue when vehicles reach their destination (but the simulation is NOT yet completed), then such vehicles should be thought of as "the car reached the destination. User turned off the key, so the node should stop transmitting packets. This, again, is not necessarily "normal" in an ns-3 script, which is why the static vector as mentioned in the prior post needs to be controlled by the user - i.e., to indicate when nodes are moving, or stopped, as corresponds with the user's mobility playback file. Ultimately, I would hope this part could be refactored to support StartNode() StopNode() concepts.
-Scott