Part I: The ROS 2 stack · §14 of 43
# Controllers & hardware
ros2 param get /left_joint_trajectory_controller interpolation_method # must be 'splines' on zeus (§4)
ros2 control list_controllers
ros2 control list_hardware_components
ros2 control list_hardware_interfaces
ros2 control set_controller_state left_joint_trajectory_controller inactive|active
ros2 control view_controller_chains
# Interfaces
ros2 action list -t
ros2 topic list -t
ros2 action info -t /left_joint_trajectory_controller/follow_joint_trajectory
# State
ros2 topic echo /joint_states --field position
ros2 topic hz /joint_states
ros2 topic echo /left_joint_trajectory_controller/controller_state
ros2 topic echo /controller_manager/statistics/full
# Model
ros2 param get /robot_state_publisher robot_description > /tmp/openarm.urdf
check_urdf /tmp/openarm.urdf # from liburdfdom-tools
ros2 run tf2_tools view_frames # frames.pdf
# Spawner by hand (with timeouts so it doesn't hang)
ros2 run controller_manager spawner joint_state_broadcaster -c /controller_manager --controller-manager-timeout 30
# CAN (host or container with --network host)
ip -details -statistics link show can0
candump -td can0
openarm-can-cli -i can0 monitor
openarm-can-cli -i can0 diagnose
# Logs
ls ~/.ros/log/ # per-launch logs (every node's messages, also after a crash)
ros2 launch … 2>&1 | tee -i ~/launch.log # -i: tee ignores Ctrl+C, so the shutdown stays visible
# zeus scripts (in the container; = Prandium/robot_scripts on the laptop)
bash /root/scripts/openarm_launch.sh real|sim
python3 /root/scripts/openarm_jmove.py left 7 0.1 # identification wiggle after every real launch
python3 /root/scripts/openarm_jsweep.py left|right|both
python3 /root/scripts/openarm_demo.py 1.5
bash /root/scripts/openarm_stop.sh # real robot: instead of Ctrl+C
git -C /root/ros2_ws/src/openarm_ros2 diff --stat # the 3 local changes (splines + 2 patches)