Bad enough to upgrade the operating system, and the ROS version, and change his name (from Kilted-Dave to Lyrical-Dave), I changed the GoPiGo3 API install from my “Custom GoPiGo3 API Install” to the new official Modular Robotics GoPiGo3 API install “Option A” (in a virtual environment).
That last one has really taken some changes all around. ROS folks have traditionally ignored the Python folks’ standard of installing to virtual environments, so Dave really had to journey down some new paths ($PYTHONPATH).
Right now, my GoPiGo3 ROS 2 robot “Dave” has successfully started his latest re-incarnation as “Lyrical-Dave” and is playing quietly near his dock at 10.6 volts. When the battery drops below 10.1 volts Dave will hopefully decide to dock to recharge his battery.
I’m on the edge of my seat in joy and anticipation…
Lyrical-Dave’s first successful start of the new “life”:
(gopigo3) ubuntu@U26LDave:~/LyricalDave/ros2ws$ ./start_LyricalDave.sh
sourced /opt/ros/lyrical setup.bash
sourced /LyricalDave/ros2ws/install/setup.bash
*** Start ROS2 GoPiGo3 node
*** ros2 run ros2_gopigo3_node gopigo3_node &
[INFO] [1780426016.941067184] [gopigo3_node]: ros2_gopigo3_node: created main loop callback at 30 Hz
==================================
GoPiGo3 info:
Manufacturer : Dexter Industries
Board : GoPiGo3
Serial Number : 56ECD67E5152415447202020FF192614
Hardware version: 3.x.x
Firmware version: 1.0.0
GoPiGo3 Configuration:
(Using default values or ~/Dexter/gpg3_config.json if present)
WHEEL_DIAMETER: 66.500 mm
WHEEL_BASE_WIDTH: 117.000 mm
ENCODER_TICKS_PER_ROTATION: 16 (per one motor revolution)
MOTOR_GEAR_RATIO: 120 (motor revolutions per wheel revolution)
MOTOR_TICKS_PER_DEGREE: 5.33 (of wheel rotation)
Node Version: 0.7
Rate: 30 hz
Servo1 PulseWidths L: 2425 R: 575 us
Servo1 Total Sector Width: 3.141592653589793 radians
Servo2 PulseWidths L: 2425 R: 575 us
Servo2 Total Sector Width: 3.14 radians
Turbo Bias Correction: 0.010 m/s
Bias Threshold Speed: 0.200 m/s
==================================
*** Starting Robot_State and Joint_State Publishers
*** with URDF file: ros2_gopigo3_node/kilteddave2.urdf
[INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2026-06-02-14-46-59-713957-U26LDave-291732
[INFO] [launch]: Default logging verbosity is set to INFO
***** launch: urdf_file - /home/ubuntu/LyricalDave/ros2ws/install/ros2_gopigo3_node/share/ros2_gopigo3_node/kilteddave.urdf
[INFO] [robot_state_publisher-1]: process started with pid [291739]
[INFO] [joint_state_publisher-2]: process started with pid [291740]
[robot_state_publisher-1] [INFO] [1780426020.218761994] [robot_state_publisher]: Robot initialized
[joint_state_publisher-2] [INFO] [1780426022.028714544] [joint_state_publisher]: Got description, configuring robot
[joint_state_publisher-2] [INFO] [1780426022.056060812] [joint_state_publisher]: Got description, configuring robot
*** Start Docking Node
*** ros2 run dave docking_node &
*** Starting Odometer Node to log movements
*** ros2 run ros2_gopigo3_node odometer
*** Start SNES gamepad node
*** ros2 launch teleop_twist_joy teleop-launch.py joy_config:="snes_slow" &
*** SLEEPING 30 before starting battery node
[INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2026-06-02-14-47-19-813477-U26LDave-291879
[INFO] [launch]: Default logging verbosity is set to INFO
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /opt/ros/lyrical/share/teleop_twist_joy/config/snes_slow.config.yaml
[WARNING] [launch_ros.actions.node]: Parameter file path is not a file: /opt/ros/lyrical/share/teleop_twist_joy/config/snes_slow.config.yaml
[INFO] [joy_node-1]: process started with pid [291886]
[INFO] [teleop_node-2]: process started with pid [291887]
[teleop_node-2] [INFO] [1780426040.297781768] [TeleopTwistJoy]: Teleop enable button 5.
[teleop_node-2] [INFO] [1780426040.297988545] [TeleopTwistJoy]: Linear axis x on 5 at scale 0.500000.
[teleop_node-2] [INFO] [1780426040.298022156] [TeleopTwistJoy]: Angular axis yaw on 2 at scale 0.500000.
[joy_node-1] [INFO] [1780426040.994665246] [joy_node]: No haptic (rumble) available, skipping initialization
[joy_node-1] [INFO] [1780426040.994957745] [joy_node]: Opened joystick: Controller. deadzone: 0.300000
*** Starting Battery Node
*** ros2 run dave battery_node &
*** Start Dave Node
*** ros2 run dave dave_node &
2026-06-02 14:47:56 ---- LyricalDave node started - Undock:-100 mA Ready:10.3v Dock:10.1v
********** Humble Dave 2 ROS2 GoPiGo3 Status ***********
Tuesday 06/02/26
14:47:58 up 2 days, 1:48, 2 users, load average: 1.67, 1.24, 0.90
temp=53.5'C
frequency(48)=1300324224
throttled=0x0
GoPiGo3 Battery Voltage: 11.2 volts
total used free shared buff/cache available
Mem: 3.7Gi 1.4Gi 94Mi 10Mi 2.4Gi 2.3Gi
Swap: 2.0Gi 60Ki 2.0Gi
ROS 2 NODES
ubuntu 291682 291663 2 14:46 pts/1 00:00:01 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 run ros2_gopigo3_node gopigo3_node
ubuntu 291778 291663 2 14:47 pts/1 00:00:01 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 run dave docking_node
ubuntu 291829 291663 2 14:47 pts/1 00:00:01 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 run ros2_gopigo3_node odometer
ubuntu 291987 291663 13 14:47 pts/1 00:00:01 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 run dave battery_node
ubuntu 292019 291663 26 14:47 pts/1 00:00:01 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 run dave dave_node
ubuntu 291732 291663 3 14:46 pts/1 00:00:02 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 launch ros2_gopigo3_node ros2_dave_state_and_joint.launch.py
ubuntu 291879 291663 5 14:47 pts/1 00:00:02 /usr/bin/python3 /opt/ros/lyrical/bin/ros2 launch teleop_twist_joy teleop-launch.py joy_config:=snes_slow
ubuntu 291739 291732 1 14:46 pts/1 00:00:00 /opt/ros/lyrical/lib/robot_state_publisher/robot_state_publisher /home/ubuntu/LyricalDave/ros2ws/install/ros2_gopigo3_node/share/ros2_gopigo3_node/kilteddave.urdf --ros-args -r __node:=robot_state_publisher --params-file /tmp/launch_params_jq8mg25c
ubuntu 291740 291732 7 14:46 pts/1 00:00:04 /usr/bin/python3 /opt/ros/lyrical/lib/joint_state_publisher/joint_state_publisher /home/ubuntu/LyricalDave/ros2ws/install/ros2_gopigo3_node/share/ros2_gopigo3_node/kilteddave.urdf --ros-args -r __node:=joint_state_publisher
*** start_LyricalDave.sh COMPLETE
