Differences between rosrun and roslaunch

There are a few differences, but the major ones are:

  • rosrun can only launch one node at a time, from a single package WHILE roslaunch can launch two or more nodes at the same time, from multiple packages
  • roslaunch will automatically start roscore (if not running already) WHILE rosrun does not.
  • roslaunch uses launch files, which can automatically start other programs by including other launch files, set some parameters, etc WHILE rosrun does not use launch files - it launches the nodes directly.

Hello

Thanks for clarifying, I would like to understand something when launching 2 nodes from the same launch file

my executable is

#! /usr/bin/env python
import rospy
rospy.init_node('test')
rate = rospy.Rate(2)               # We create a Rate object of 2Hz

c = 0
while not rospy.is_shutdown():     # Endless loop until Ctrl + C
   c+=1
   print (c, " Help me Obi-Wan Kenobi, you're my only hope")
   rate.sleep()

and my launch file is

<launch>
  <!-- comment on my launch file -->
  <node name="ObiWan"  pkg="my_package" type="simple.py"  output="screen"></node>
   <node name="ObiWan2"  pkg="my_package" type="simple.py"  output="screen"></node>
</launch>

it runs perfectly, but how come in my executable I specify a different node name but it still runs eg on rospy.init_node('test') I initiated the node with the name test, but my launch file I launch 2 nodes with names ObiWan and ObiWan2 does the launch file automatically override the name ?

Yes, the launch file automatically overrides the node name specified in the script.