While a ROS node for GoPiGo3 exists, the “Gold Standard” for differential drive ROSbots is generally accepted to be the Turtlebot family - now existing as Turtlebot3 Burger and Turtlebot3 WafflePi.
I have been porting the ROS(1) GoPiGo3 node to ROS2, while attempting to learn how to invoke and observe ROS nodes and topics, as well as learn what goes into a ROS differential drive robot node.
The ROS GoPiGo3 node implements a fair number of functions, albeit in simplistic fashion, so it is interesting to see how the Turtlebot ROS node is implemented.
I suspect that this parameter is used to scale how fast the robot should accelerate, (dv/dt). As in parameter “X” controls the maximum velocity and “acceleration constant” controls the maximum rate of change.
Reminds me of the 90’s when Windows callback loops and basic glue-logic for window instantiation all had to be hand coded as there was no “boiler-plate” code or templates.
Both Carl and Dave need acceleration control to keep them vertical.
Neither the base GoPiGo3 or EasyGoPiGo3 class offer acceleration control, so Carl is a bit out of luck. Perhaps in 2022. (Carl is constrained to 150 DPS for accuracy and safety due to lack of “a” control.)
Dave on the other hand will have acceleration control when I learn how to use the ROS differential_drive_controller node that can translate generic /cmd_vel topics to well-behaved /gopigo3/cmd_vel instructions. (… or perhaps to allow for multiple ROS GoPiGo3 robots on the same network I should use a /gopigo3/dave namespace.)
Am I figuring correctly that an acceleration constant of 214 rev/min2 is 0.059 rev/s2 and applied to Carl, whose max wheel velocity is 360 DPS would spread the acceleration to max wheel velocity across 17 seconds?
A long time ago, I computed Carl’s actual acceleration to be around 1.1m/s or 5.25 rev/s2 which spreads the acceleration to 360DPS across 0.2 seconds! That kind of unbridled power makes it clear why I have to slow Carl down for accuracy and safety.