Learning ROS notes from theconstructsim.com
Ros tutorial
https://app.theconstructsim.com/#/Desktop
Topics:
communication to compnents of
services and actions
tutorial 1
# basic demoroslaunch publisher_example move.launch
roslaunch publisher_example stop.launch
# services
roslaunch service_demo service_launch.launch
rosservice call /service_demo "{}"
the subscribers run last message that it recieved
services
Defintion:
basic demoroslaunch publisher_example move.launch
roslaunch publisher_example stop.launch
services
requices the node to finish its process
actions
live feedback retuine
roslaunch service_demo service_launch.launch
rosservice call /service_demo "{}"
roslaunch action_demo action_launch.launch
roslaunch action_demo_client client_launch.launch
rosrun rviz rviz
cd ~/catkin_ws/src
catkin_create_pkg my_examples_pkg rospy std_msgs
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rospack profile
roscd my_examples_pkg
mkdir scripts
roscd my_examples_pkg/scripts
touch NAME_OF_EXAMPLE_SCRIPT.py
chmod +x NAME_OF_EXAMPLE_SCRIPT.py
roscd my_examples_pkg/scripts
python NAME_OF_EXAMPLE_SCRIPT.py
# OR
rosrun my_examples_pkg NAME_OF_EXAMPLE_SCRIPT.py
roscd my_examples_pkg/scripts
touch simple_topic_publisher.py
chmod +x simple_topic_publisher.py
file simple_topic_publisher.py
#! /usr/bin/env python
import rospy
from std_msgs.msg import Int32
rospy.init_node('topic_publisher')
pub = rospy.Publisher('/counter', Int32, queue_size=1)
rate = rospy.Rate(2)
count = Int32()
count.data = 0
while not rospy.is_shutdown():
pub.publish(count)
count.data += 1
rate.sleep()
run shell 1
rosrun my_examples_pkg simple_topic_publisher.py
run shell 2
rostopic list | grep '/counter'
how to see data publishing on ros
rostopic info /counter
result
user:~$ rostopic info /counter
Type: std_msgs/Int32
Publishers:
* /topic_publisher (http://5_xterm:42533/)
Subscribers: None
how view the data
rostopic echo /counter
data: 546
---
data: 547
---
data: 548
---
what's a topic?
A topic is a channel that acts as a pipe, where other ROS nodes can either publish or read information
list ros topics
rostopic list
rostopic echo <topic_name>
rostopic echo <topic_name> -n1
rostopic echo /counter
rostopic echo /counter -n1
rostopic info /counter
rostopic -h
20210219
Messages
rosmsg show <message>
rosmsg show std_msgs/Int32
resulst
user:~/catkin_ws/src/my_examples_pkg$ rosmsg show std_msgs/Int32
int32 data
'data' is a variable defined in simple_topic_publisher.py
count = Int32()
count.data = 0
looking at Int32.msg
roscd std_msgs/msg/
rostopic info /cmd_vel
rosmsg show
solving the challenge
cd ~/catkin_ws/src/
catkin_create_pkg exercise_31 rospy std_msgs geometry_msgs
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rospack profile
roscd exercise_31
mkdir scripts
touch ./scripts/move_robot.py
#! /usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
rospy.init_node('move_robot_node')
pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
rate = rospy.Rate(2)
move = Twist()
move.linear.x = 0.5 #Move the robot with a linear velocity in the x axis
move.angular.z = 0.5 #Move the with an angular velocity in the z axis
while not rospy.is_shutdown():
pub.publish(move)
rate.sleep()
link how ros launch files work roslaunch - ROS Wiki
roscd exersize_31
# created a file called /catkin_ws/src/exersize_31/launch/move_robot.launch
touch ./launch/move_robot.launch
chmod +x ./launch/move_robot.launch
add text
<launch>
<node pkg="exercise_31" type="move_robot.py" name="move_robot_node" output="screen" />
</launch>
chmod +x ./scripts/move_robot.py
roslaunch exercise_31 move_robot.py
roslaunch exercise_31 move_robot.launch
Subscribers
reads data from a publisher (similar to a client)
cd ~/catkin_ws/src
catkin_create_pkg my_examples_pkg rospy std_msgs
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rospack profile
roscd my_examples_pkg
mkdir scripts
roscd my_examples_pkg/scripts
touch NAME_OF_EXAMPLE_SCRIPT.py
chmod +x NAME_OF_EXAMPLE_SCRIPT.py
roscd my_examples_pkg/scripts
python NAME_OF_EXAMPLE_SCRIPT.py
# OR
rosrun my_examples_pkg NAME_OF_EXAMPLE_SCRIPT.py
roscd my_examples_pkg/scripts
touch simple_topic_subscriber.py
chmod +x simple_topic_subscriber.py
simple_topic_subscriber.py
#! /usr/bin/env python
import rospy
from std_msgs.msg import Int32
def callback(msg):
print (msg.data)
rospy.init_node('topic_subscriber')
sub = rospy.Subscriber('/counter', Int32, callback)
rospy.spin()
rosrun my_examples_pkg simple_topic_subscriber.py
rostopic echo /counter
OUTPUT:
----------
user ~ $ rostopic echo /counter
WARNING: no messages received and simulated time is active.
Is /clock being published?
---------
how to publish test data to topic
rostopic pub <topic_name> <message_type> <value>
rostopic pub /counter std_msgs/Int32 5
OUTPUT
----
user ~ $ rostopic echo /counter
WARNING: no messages received and simulated time is active.
Is /clock being published?
data:
5
---
----
#! /usr/bin/env python
import rospy
from std_msgs.msg import Int32
def callback(msg): # Define a function called 'callback' that receives a parameter
# named 'msg'
print (msg.data) # Print the value 'data' inside the 'msg' parameter
rospy.init_node('topic_subscriber') # Initiate a Node called 'topic_subscriber'
# Create a Subscriber object that will listen to the /counter
# topic and will cal the 'callback' function each time it reads
sub = rospy.Subscriber('/counter', Int32, callback)
# something from the topic
rospy.spin()
Challenge 2
rostopic info /odom
OUTPUT:
--------------------------
Type: nav_msgs/Odometry
Publishers:
* /gazebo (http://15_simulation:35255/)
Subscribers: None
--------------------------
find more about nav_msgs/Odometry
roscd nav_msgs
Debugging tools
Questions:
- what does "{}" mean
- what does it mean to 'call' a sevice
- what does http://5_xterm:37773/ mean
- what is a ros master?
- how is it used?
- what are paramaters?
- what is queue_size=1
- how does the datatypes work in ros
- what does rospy.spin() do?





Sucess!

Results!
#! /usr/bin/env python
import rospy
from std_msgs.msg import Int32
from nav_msgs.msg import Odometry
def callback(msg):
print (msg.header)
print (msg.child_frame_id)
print (msg.pose)
print (msg.twist)
rospy.init_node('topic_subscriber')
sub = rospy.Subscriber('/odom', Odometry, callback)
rospy.spin()
roscd <package_name>
mkdir msg
The "Age.msg" file must contain this:
float32 years
float32 months
float32 days
how to install ros serial to communicate with arduino
rosserial_arduino/Tutorials/Arduino IDE Setup - ROS Wiki
sudo apt-get install ros-noetic-rosserial-arduino
sudo apt-get install ros-noetic-rosserial


cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/rosserial.git
cd ~/catkin_ws
catkin_make
catkin_make install
Errors with install

Trying catkin_make_isolated
that didnt work...
this issue was someone's elses package was installed that was broaken
Fix: move the problem package out and run 'catkin_make`
Sucess!

install arduino ide
Program an Arduino UNO with your Raspberry Pi — The MagPi magazine
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install arduino

cd ~/sketchbook/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .
Windows note:
If you are building the Arduino on Windows, you need to create the ros_lib folder in some convenient directory.
cd <some_empty_directory>
rosrun rosserial_arduino make_libraries.py .
Issue i ran into

links
fatal error: serial/serial.h: no such file or directory in ros - ROS Answers: Open Source Q&A Forum
robotarmhackathon/launch at main · agillies8/robotarmhackathon
agillies8/robotarmhackathon: Code for the robot arm hackathon
3AxisArm/Single_BUTTON_TEST.ino at master · agillies8/3AxisArm
exaplse simple
3AxisArm/buttonPlex.py at master · agillies8/3AxisArm
3AxisArm/TWO_BUTTON_TEST.ino at master · agillies8/3AxisArm
simple keyboard input