Post #3
Experiences about learning ROS
In the beginner's tutorial, we learned the basics of ROS and it covered important components of the ROS system such as ROS Nodes, Topics, Messages and Services. To show that we have completed the tutorial, we are going to list the helpful commands we have encountered in the tutorials as well as some images we took along the process.
We can navigate through ROS with convenient commands it has:
rospack find [package_name]
roscd <package-or-stack>[/subdir]
rosls <package-or-stack>[/subdir]
edit files: rosed [package_name] [filename]
Whenever we created a new workspace, we need to build the packages and source the files.
create package: catkin create pkg <package_name> --catkin-deps [depend1] [depend2] [depend3]
build packages in workspace while in workspace dir: catkin build
add workspace to the ROS env: . ~/[workspace_dir]/devel/setup.bash
Whenever the workspace has been changed, source the files: source /opt/ros/noetic/setup.bash
Useful functionality:
create a graph of the system: rosrun rqt_graph rqt_graph
open node output logging interface: rosrun rqt_console rqt_console
change node verbosity level (FATAL, ERROR, WARN, INFO, DEBUG) as they run: rosrun rqt_logger_level rqt_logger_level
roslaunch [package] [filename.launch]
roscp [package_name] [file_to_copy_path] [copy_path]
ROS Nodes: an executable that uses ROS to communicate with other nodes.
Master: Name service for ROS (i.e. helps nodes find each other)
rosout: ROS equivalent of stdout/stderr
roscore: Master + rosout + parameter server
the first thing to run when using ROS: roscore
rosnode list
rosnode info [node_name]
rosrun [package_name] [node_name]
rosnode ping [node_name]
ROS Messages: ROS data type used when subscribing or publishing to a topic.
see details of message: rosmsg show [message_type]
rostopic type [topic]
create a msg: echo [element]> [dir]/[msg_name].msg
rosmsg show [message type]
ROS Topics: Nodes can publish messages to a topic as well as subscribe to a topic to receive messages.
print messages to screen: rostopic echo [topic]
print topic type: rostopic type [topic]
verbose version: rostopic list -v
rostopic pub [topic] [msg_type] [args]
rostopic hz [topic]
ROS Services: allow nodes to send a request and receive a response.
rosservice list
rosservice call [service] [args]
rosservice type [service]
rosservice find [service_type]
rossrv show <service type>
ROSParam: store and manipulate data on the ROS Parameter Server
rosparam list
rosparam set [param_name] [val]
rosparam get [param_name, use / to get all params]
save information retrieved from parameter server: rosparam dump [file_name] [namespace]
load parameter information from local file to parameter server: rosparam load [file_name] [namespace]
Debug
roswtf
Screenshots
Challenges
One of the most challenging aspects of learning ROS is its steep learning curve. After completing the beginner-level ROS tutorials. We realized that ROS is a complex system that involves many different components, including communication protocols, message types, and programming languages. It can be overwhelming to grasp all of them at the same time.
After completing the tutorial, we felt like there is still a lot for us to learn in terms of how to connect what we learned with Stretch, especially with those latter tutorials on creating listeners and publishers. But it will probably be covered in the later tutorials when we get more hands-on experience.