Pongbot Nova S Pro owners' review and discussion thread

says rejoicing in rbpon 🆚 robipon
says rejoicing in rbpon 🆚 robipon
Member
Sep 2024
355
210
1,193
Read 2 reviews
  • Shuffle: The machine generates a random sequence of balls. For a 4-ball drill (A, B, C, D), Nova will pick any combination of those four, such as AABB or ABDD.
Hi, thanks for your quick answer. The above quote is concise (and prolly contains all logical info to be inferred from it) but for a quick read/understand, it is not clear imho. From what i understand, lemme explain the Shuffle in my own words and please correct me if wrong:

Shuffle. The machine generates a "random" sequence of balls. Random how, random in what way? Well, the total number of balls will remain the same for the drill. And no, "shuffle" does not mean permutation as in the mixing of a deck of cards. Even the "order sequence" will be the same, i.e. A is followed by B is followed by C is followed by D etc. For example, define a 4-ball drill (each ball with Reps=1): A, B, C, D. Then running the drill with "Shuffle balls = ON (not OFF)" might result in 1 of 35 possible outcomes, where each outcome has a different probability to erh come out:​
wmw7f4a6.png
In other words, it is very unlikely that you'll get a AAAA sequence but rather common that you'll get a DDDD sequence (see gpt link).​
So the Shuffle function is based on the k-Multiset (see attached pdf).​

If my above explanation of the implementation of Shuffle was correct, then i'd rather disagree with the implementation of the function. Imho Shuffle shouldn't be based on k-Multiset. In Stochastik/Kombinatorik (as important part of probability theory, or randomization theory), there are exactly 6 basic cases. Imho the n-Permutation would make more sense, as in shuffling a deck of n cards. Then each of the n! outcomes would have equal probability of 1/n!, which is fair/nice. The only practical problem with that approach is that, if the first ball (ball A) was a cerve. (((That's why robi1 has a sophisticated triple implementation of randomization called "Random" "Shuffle" "Scatter" which takes cerves into account ... but which i find even more confusing because of lack of explanation lol)))

In practice, n-Permutation might be boring/too predictable too (because once you get B,D,A, you'll know that the last ball will be C). To me, Random should mean that each ball is random at equal probability .. which points to the k-Tupel case. Anyway, this post shall serve as food for thought only. (((in the original app, they had misimplemented the Randomization function; in the robi1 app, they tried harder but the implementation turned into a mess which nobody can explain what the robi1 does there conceptually)))
 

Attachments

  • KombinatorikMerkblatt.pdf
    161 KB · Views: 70
Last edited:
This user has no status.
This user has no status.
Member
Nov 2025
45
20
68
Dear olanga,

why do you still offer "shuffle balls"?
I think, it is not necessary. You can do it also with one ball and its variants!

And:
what is the difference between the "Copy"-Button and the "+"-Button to add balls?
Do we need both?

I am a fan of optimizing!:)

best regards
 
This user has no status.
This user has no status.
Member
Nov 2025
68
97
179
Hi, thanks for your quick answer. The above quote is concise (and prolly contains all logical info to be inferred from it) but for a quick read/understand, it is not clear imho. From what i understand, lemme explain the Shuffle in my own words and please correct me if wrong:

Shuffle. The machine generates a "random" sequence of balls. Random how, random in what way? Well, the total number of balls will remain the same for the drill. And no, "shuffle" does not mean permutation as in the mixing of a deck of cards. Even the "order sequence" will be the same, i.e. A is followed by B is followed by C is followed by D etc. For example, define a 4-ball drill (each ball with Reps=1): A, B, C, D. Then running the drill with "Shuffle balls = ON (not OFF)" might result in 1 of 35 possible outcomes, where each outcome has a different probability to erh come out:​
wmw7f4a6.png
In other words, it is very unlikely that you'll get a AAAA sequence but rather common that you'll get a DDDD sequence (see gpt link: LINK INSERTED WAIT FOR IT).​
So the Shuffle function is based on the k-Multiset (see attached pdf).​

If my above explanation of the implementation of Shuffle was correct, then i'd rather disagree with the implementation of the function. Imho Shuffle shouldn't be based on k-Multiset. In Stochastik/Kombinatorik (as important part of probability theory, or randomization theory), there are exactly 6 basic cases. Imho the n-Permutation would make more sense, as in shuffling a deck of n cards. Then each of the n! outcomes would have equal probability of 1/n!, which is fair/nice. The only practical problem with that approach is that, if the first ball (ball A) was a cerve. (((That's why robi1 has a sophisticated triple implementation of randomization called "Random" "Shuffle" "Scatter" which takes cerves into account ... but which i find even more confusing because of lack of explanation lol)))

In practice, n-Permutation might be boring/too predictable too (because once you get B,D,A, you'll know that the last ball will be C). To me, Random should mean that each ball is random at equal probability .. which points to the k-Tupel case. Anyway, this post shall serve as food for thought only. (((in the original app, they had misimplemented the Randomization function; in the robi1 app, they tried harder but the implementation turned into a mess which nobody can explain what the robi1 does there conceptually)))
Very interesting @plunder
For information as I have explained few posts before Random function is now fully "outsourced" to Nova.
Webclient sets a random bit in the header before sending it to the robot Link
If this function is skewed we could think about implementation in the script again. On the other hand maybe variants are more usable as mentioned by @pongbot68
 
Last edited:
  • Like
Reactions: plunder
This user has no status.
This user has no status.
Member
Nov 2025
68
97
179
Dear olanga,

why do you still offer "shuffle balls"?
I think, it is not necessary. You can do it also with one ball and its variants!

And:
what is the difference between the "Copy"-Button and the "+"-Button to add balls?
Do we need both?

I am a fan of optimizing!:)

best regards
Copy adds a ball with the same configuration just after the ball which was copied.
Plus adds a ball at the end of a drill with a configuration of last ball
 
This user has no status.
This user has no status.
Member
Nov 2025
45
20
68
Version 2.3a link
Added
tap to skip the countdown timer
Changed label: Shuffle balls to Random
also if the label changed to "Random":
I think, it is not necessary. You can do it also with one ball and its variants!
You define only "Ball 1" with some variants.
Isn`t it the same?

And thank you for adding "skip timer"!

br
 
says rejoicing in rbpon 🆚 robipon
says rejoicing in rbpon 🆚 robipon
Member
Sep 2024
355
210
1,193
Read 2 reviews
Random function is now fully "outsourced" to Nova.
Webclient sets a random bit in the header before sending it to the robot.
interesting. this sounds like the k-Tupel case, and at some point i'll do a test to find out for sure. if it's the case, then i'd be pleased :LOL:. then @pongbot68 the randomness would "multiply" with using variants in addition, very cool.

what is cool there?
multiplication of randomness
 
Last edited:
says rejoicing in rbpon 🆚 robipon
says rejoicing in rbpon 🆚 robipon
Member
Sep 2024
355
210
1,193
Read 2 reviews
with the v2.3 webapp, starting with Push(B), adding a cerve, adding variants, without changing the character that it is "a Push(B)-exercise". Almost 2 weeks of carnival season's coming up, so i should find the time to ...
2030 today i wanted to get in a 2.0h Push(B) robi2pon session but after 1h of handling the chromeclient in the cold cellar i gave up. here's my feedback from the limited practical exposure.

What i liked:
+ the UI is mature, and easy to understand, and ~fast to operate
+ i love the TEST-button and the TEST DRILL-button! (and would prefer 3 or 5 test balls instead of 1)
+ with Gboard installed, one can input minus sign (needed for Drop Point)
+ one can TEST decimals, e.g. for finetuning a SPEED value
+ one can TEST higher values than the suggested MAX, e.g. for finetuning a max SPIN value
+ the SCATTER DROP POINT function works lovely!

a numeric field consists of 2 lines, e.g.:
line1: BPM ... 30-90
line2: 36

For faster operation, i would suggest that the tapping (1 actual touch) of a numeric field clears/blanks (deletes) the line2, leaving an empty line2 with a blinking cursor, (and the Gboard keypad rolling up, if it hasn't been present by then). The original value from line2 would be gone (deleted), or even better, still displayed —in small font— in line1:

line1: BPM ...36... 30-90
line2: (blank; blinking cursor)

Using the Gboard tabulator (tab-button) could produce the same UI behavior. Reason: Blanking line2 lets the user input new values right away, without the need of re-positioning the cursor and using the Backspace (Delete) buttons of the Gboard. This got very fiddly in the cold cellar, and i lost valuable time/nerves in the process because my body was cooling off and i lost my flow. While i strongly suggest such an optimized UX, it's not urgent/not essential.

What made me give up on my robi2pon session:
- while i was able to produce and TEST "out of range" balls, the webapp didn't save my "out of range" input values. For example, it didn't save a backspin ball with SPEED=2 and SPIN=7, since "Max 6" was the suggested maximum value.
- same with decimals. TEST seemed to work with decimals, but after saving (SAVE button), my tested working decimal value was replaced by some integer. the webapp resets the values to "Max" and integers.

These 2 observations mean:
1) It is not possible to finetune the values, with the current webapp version. TEST is possible, but SAVE doesn't save such values, even though they work on my system: the balls would land.
2) Each Nova production unit is a unique system: production lot differences, aging, dirty wheels, different balls, different user calibration, humidity/temperature, modded wheels. A "Max 6" doesn't account for the differences between the Nova systems. I strongly suggest that decimals be allowed/saved AND that those "Max" and "ranges" non-firmware limitations be removed.

For my robi2pon sessions i'd really need the liberty to set any non-firmware limited value which still produces valid (=landing) balls with my system: if "SPEED=2 and SPIN=7" is a landing ball on my system, then i should be able to save such an "out of range"-setting. ((i could possibly comment more on the @olanga webapp but let's keep the number of topics mentioned in 1 post to a minimum)) 2145
 
Last edited:
  • Like
Reactions: Alex56 and olanga
This user has no status.
These 2 observations mean:
1) It is not possible to finetune the values, with the current webapp version. TEST is possible, but SAVE doesn't save such values, even though they work on my system: the balls would land.
2) Each Nova production unit is a unique system: production lot differences, aging, dirty wheels, different balls, different user calibration, humidity/temperature, modded wheels. A "Max 6" doesn't account for the differences between the Nova systems. I strongly suggest that decimals be allowed/saved AND that those "Max" and "ranges" non-firmware limitations be removed.

For my robi2pon sessions i'd really need the liberty to set any non-firmware limited value which still produces valid (=landing) balls with my system: if "SPEED=2 and SPIN=7" is a landing ball on my system, then i should be able to save such an "out of range"-setting. ((i could possibly comment more on the @olanga webapp but let's keep the number of topics mentioned in 1 post to a minimum)) 2145
What I just discovered: if you choose a speed value that doesn’t end in .0 or .5, you can enter any spin value you like. So try setting Speed 1.9 instead of 2.0 — then every spin value will work and can be saved. It works perfectly for me. Naturally, you should adjust the spin to roughly match the ball speed. Of course, if you set Spin 10 for every ball, the wheels will still produce a minimum speed that can’t be avoided.
 
Last edited:
  • Like
Reactions: plunder
This user has no status.
This user has no status.
New Member
Mar 2026
2
0
2
Hi guys first time I read this topic and first of all, congrats to all the contributors of the app, it's an impressive work! :) I was trying the default drills but I believe they're not that much realistic, ball sometimes is too high and not that fast\spinny. Is there somebody that created already some interesting custom drills and shared\wants to share them? Thanks!
 
This user has no status.
This user has no status.
Member
Feb 2026
6
9
17
finally. access. just got a nova s pro. i've been reading this entire thread and now have picture of what this bot can do. i bought hoping to teach my daughter the game which by the way means i also have to learn the game. I enjoyed it so much that a hopper full of balls is no longer enough. no my first questions is: do we have a repository of drills that i can copy or upload or something?
 
This user has no status.
This user has no status.
Member
Sep 2021
183
163
497
As I understand it, Nova S pro can only automatically adjust the distance, speed. But for Spin while it can adjust the amount, the type of spin is fixed for a drill as the spin direction is adjusted mechnically by twisting the machine head. Is this correct? This means that there is no way to do a drill where you recieved a side under spin short serve, followed by a underspin ball to loop followed by a topspin return to counter?

I particularly want to practice looping a underspin ball followed by countering or topspinning the return ball. I guess then this would not be the machine for me?
 
This user has no status.
This user has no status.
Member
Feb 2026
6
9
17
As I understand it, Nova S pro can only automatically adjust the distance, speed. But for Spin while it can adjust the amount, the type of spin is fixed for a drill as the spin direction is adjusted mechnically by twisting the machine head. Is this correct? This means that there is no way to do a drill where you recieved a side under spin short serve, followed by a underspin ball to loop followed by a topspin return to counter?

I particularly want to practice looping a underspin ball followed by countering or topspinning the return ball. I guess then this would not be the machine for me?
Yes. Side spin is done by turning the head. Underspin and topspin are the only one possible in a drill. For side spin you adjust the head before starting a drill
 
This user has no status.
This user has no status.
Member
Sep 2021
183
163
497
Yes. Side spin is done by turning the head. Underspin and topspin are the only one possible in a drill. For side spin you adjust the head before starting a drill
Sorry but I am a little confused by this. You mean in a single drill you can alternate between underspin
And topspin?
 
This user has no status.
The NOVA S Pro comes with a 2 Motor setup. One at the Bottom, on at the Top of the Head. With this you can generate either Topspin or Underspin. This can be combined in a single drill, where you can choose the speed of each motor for every ball in the drill. To achieve side spin in this setup, you need to manually turn the head (there is no motor for this). But this adds side spin to every ball and can not be changed during the drill.
The larger PongBots have a 3 motor setup (120° setup) which can generate any spin on any ball, but this is much more expensive.
 
This user has no status.
This user has no status.
Member
Feb 2026
6
9
17
"This means that there is no way to do a drill where you recieved a side under spin short serve, followed by a underspin ball to loop followed by a topspin return to counter? "
The Nova S Pro is more of a repetition /consistency machine, not really a full match simulator. It’s great for praticing strokes, timing, footwork... but not really meant to perfectly recreate a serve-push-loop-counter rally with all the spin tricks of a real player.

That said.. you can get pretty close with a combined drill like this:

Ball 1: short underspin (receive feel) - this can also be 2 drop ball. bot side then player side. like a real serve.
Ball 2: deeper underspin (loop opener)
Ball 3: controlled topspin (block / counter)
Ball 4: faster wider topspin (pressure shot)

here’s a sample CSV you can try:

Set;Ball;Name;Speed;Spin;Type;Height;Drop;BPM;Reps
A;1;ServeReceiveFlow;2.5;4;back;20;0;40;1
A;2;ServeReceiveFlow;4.5;6;back;40;-3;50;1
A;3;ServeReceiveFlow;5.5;5;top;50;2;60;1
A;4;ServeReceiveFlow;7.5;6;top;55;-6;65;1

not perfect realism yep.. no real side-under spin and the serve is kinda simulated... but it get the flow pretty well.

I also looked at the Pusun Dora Pro before buying... on paper it looks really good. but what sold me on the Nova was you can actually move it around the table, change angles physically, and that kinda makes a bigger difference than I expected.

and honestly... as a mere mortal in table tennis, I realized the drills this thing can do already feels like more than enough to keep me busy for the next couple of years (if it or me survives that long)

i also lost can you believe it 2+ f*****g kg because of that forehand drill with the 3 locations on the table. in 1 week.

now i am 80% complete on my ball recycler. already working i'm just adding a little esp32 logic on it.
 
Top