After starting roscore on a Terminal, Open Another Terminal Window, and execute the following commands:

roscd rosrider/config
rosparam load rosrider.config
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=230400

It should generate some output like:

[INFO] [1612790844.703436]: ROS Serial Python Node
[INFO] [1612790844.717859]: Connecting to /dev/ttyACM0 at 230400 baud
[INFO] [1612790846.829189]: Requesting topics...
[INFO] [1612790846.833376]: Note: publish buffer size is 512 bytes
[INFO] [1612790846.836264]: Setup service server on rosrider/sysctl [rosrider/SysCtrlService]
[INFO] [1612790846.839602]: Setup service server on rosrider/led_emitter [rosrider/LedService]
[INFO] [1612790846.843117]: Setup publisher on left_wheel/state [std_msgs/Float64]
[INFO] [1612790846.846694]: Setup publisher on right_wheel/state [std_msgs/Float64]
[INFO] [1612790846.849855]: Setup publisher on left_wheel/position [std_msgs/Int32]
[INFO] [1612790846.852699]: Setup publisher on right_wheel/position [std_msgs/Int32]
[INFO] [1612790846.855704]: Setup publisher on /rosrider/diagnostics [rosrider/Diagnostics]
[INFO] [1612790846.857871]: Note: subscribe buffer size is 512 bytes
[INFO] [1612790846.862581]: Setup subscriber on left_wheel/control_effort [std_msgs/Float64]
[INFO] [1612790846.867138]: Setup subscriber on right_wheel/control_effort [std_msgs/Float64]
[INFO] [1612790846.869244]: default_status: 0
[INFO] [1612790847.162944]: update_rate: 10
[INFO] [1612790847.172187]: encoder_ppr: 12
[INFO] [1612790847.182271]: gear_ratio: 380
[INFO] [1612790847.192537]: wheel_dia: 0.060
[INFO] [1612790847.202517]: base_width: 0.100
[INFO] [1612790847.212537]: main_amp_limit: 3.60
[INFO] [1612790847.222696]: mt_amp_limit: 1.20
[INFO] [1612790847.233334]: bat_volts_high: 14.4
[INFO] [1612790847.243479]: bat_volts_low: 6.0
[INFO] [1612790847.253543]: max_rpm: 90.0
[INFO] [1612790847.263967]: left_swap: false
[INFO] [1612790847.274171]: right_swap: false
[INFO] [1612790847.284146]: left_reverse: false
[INFO] [1612790847.294196]: right_reverse: false
[INFO] [1612790847.304335]: left_enc_ab: true
[INFO] [1612790847.314304]: right_enc_ab: true
[INFO] [1612790847.325102]: left_deadzone: 64
[INFO] [1612790847.334513]: right_deadzone: 64
[INFO] [1612790847.344739]: max_idle_seconds: 1800
[INFO] [1612790847.355036]: config_flags: 48
[INFO] [1612790847.365300]: power_status: 0
[INFO] [1612790847.374551]: motor_status: 48
[INFO] [1612790847.384761]: system_status: 0

Make sure your robot / setup is in a jack, i.e. the wheels do not touch the ground.

Verification of motor direction

Open a Terminal Window, and execute the following command:

rostopic pub /left_wheel/control_effort ... -r 20

Publishing positive values to /left_wheel/control_effort, should result in forward motion of the wheel. Publishing negative values to /left_wheel/control_effort, should result in reverse motion of the wheel.

If not, change left_reverse to true, in parameter file, re-load rosparam file by typing rosparam load rosrider.yaml in the rosrider/config directory.

Repeat the same procedure for the right wheel.

Verification of encoder direction

Open a Terminal Window, and execute the following command:

rostopic echo /left_wheel/state

Should show an output such as:

0.0
0.0
0.0
0.0

On Another Window, execute the following command:

rostopic pub /left_wheel/control_effort ... -r 20

Publishing positive values to /left_wheel/control_effort, should result in positive values displayed on the console. Publishing negative values to /left_wheel/control_effort, should result in negative values displayed on the console.

If not, change left_swap to true, in parameter file, re-load rosparam file by typing rosparam load rosrider.yaml in the rosrider/config directory.

Repeat the same procedure for the right wheel.

Verification of Gear Ratio and Encoder PPR

First setup the wheel with an external optical RPM meter.

Then publish positive values to /left_wheel/control_effort while plotting rpm values on /left_wheel/state with rqt_plot.

rostopic pub /left_wheel/control_effort ... -r 20

From another command window:

rqt_plot /left_wheel/state

The values read from /left_wheel/state should match the output of optical RPM meter.

If not change gear_ratio and encoder_ppr in parameter file, re-load rosparam file by typing rosparam load rosrider.yaml in the rosrider/config directory.

Repeat the procedure until you get it right. Sometimes the documentation for an encoder motor ordered from the internet might not be exact. First determine the encoder_ppr and then determine gear_ratio

Wheel Diameter Verification

To continue further, close the rosserial_python and the roscore by pressing CTRL-C on the console.

Open A Terminal Window, and execute the following commands:

roscd rosrider/launch
roslaunch robot.launch

It will launch the serial node, pid, differential drive controller, odometry node, and teleoperation.
It should generate some output like:

Capture output and put as a file

If given a goal that is (wheel_dia * N) away from 0, wheel should turn N time, and robot should move wheel_dia * N meters.

First Set RVIZ

Base Width Verification

Given an angular twist command, turn speed of the robots in Radians / Second should match.

RVIZ Test of goal controller

Robot must go to goal point 1 meter or 2 meter away

Motor Current Limit Determination

Put it on rqt view and show some examples

Main Current Limit Determination

Put it on rqt view, and test stalls.

PID Calibration

[TODO: with dynamic reconfigure, rqt_plot key variables]
[TODO: explain how pid works in the system, and not in the board]