En este tutorial, aprenderás el proceso de portar un paquete de ROS 1, creado originalmente en SolidWorks, a un formato URDF compatible con ROS 2. Exploraremos los pasos esenciales para migrar tu diseño robótico al nuevo entorno, asegurando la compatibilidad y funcionalidad en la última versión de ROS. Sigue la guía detallada para una transición sin complicaciones y mantén tus proyectos robóticos al día con las últimas tecnologías.
Abriendo el rosject
Para poder seguir al pie de la letra este tutorial, necesitamos tener ROS 2 Humble instalado en nuestro sistema, e idealmente un workspace para crear los paquetes en él. Para facilitarnos el proceso, ya hemos preparado un rosject para esto: https://app.theconstructsim.com/l/5e643001/
Solo copiando el rosject (Abriendo el enlace anterior), tendremos un entorno previamente configurado.
Después de que el rosject se haya copiado correctamente en tu entorno, debemos presionar el botón Ejecuta para ejecutar e inicializar el entorno del rosject.
[Inserta imagen del Rosject]
Crear un paquete de ROS 2 con ament_python
Para poder crear nuestro paquete de ROS 2, necesitamos situarnos en el workspace, y para eso, necesitamos la terminal.
Abramos una terminal oprimiendo el botón de abrir una nueva terminal:
[Inserte imagen de la terminal]
Una vez dentro de la terminal vamos a movernos al ros2_ws/src y creamos nuestro paquete: cd ~/ros2_ws/src
ros2 pkg create lidar3d --build-type ament_python --dependencies rclpy
Una vez creado nuestro paquete ingresamos a él y copiamos el contenido de nuestro paquete generado por Solidworks: cd lidar3d
cp -r ../lidar3d/* .
Ahora vamos a abrir el editor de código para modificar nuestros archivos. Para abrir el editor de código oprimimos el botón de editor de código:
[Inserte imagen de vscode]
Nos situamos en ros2_ws/src/lidar3d/urdf y abrimos el archivo de urdf:
[Inserte imagen del URDF]
Primero vamos a añadir un nuevo objeto vacío de base_link con un joint al base_link generado por Solidworks ya que rviz 2 no soporta base_link con inercia y le cambiamos el nombre al base_link de Solidworks:
[Inserte imagen de vscode con urdf modificado]
Ahora debido a que modificamos el nombre del paquete, vamos a usar la función de sustituir palabra integrada con Vscode:
[inserte imagen de sustitución]
El siguiente paso es ir a ros2_ws/src/lidar3d/launch para crear un launch de Python compatible con ROS 2, para eso damos click derecho y Nuevo archivo y le ponemos de nombre display.launch.py
[inserte imagen del launch file]
Por ultimo antes de compilar, debemos decirle a nuestro paquete donde se encuentran los solidos URDF los meshes y los launch files, para eso nos vamos a ros2_ws/src/lidar3d y añadimos las respectivas instrucciones install para que encuentre nuestras carpetas:
[Inserte imagen del package modificado]
Ya que tenemos nuestro paquete configurado podemos compilar y ejecutar nuestro launch file para poder generar las configuraciones por defecto de rviz2
Para poder activar las configuraciones requeridas de rviz 2 vamos a modificar nuesto Fixed Frame y cambiamos map por base_link, ahora le damos a añadir y para poder depurar mejor nuestro objeto añadimos el arbol de TF con la opcion TF, y por último vamos a añadir el modelo de nuestro robot añadiendo RobotModel:
[Inserte imagen de rviz]
Como podemos observar, aun no se ve nuestro robot, para eso debemos en la sub-opción de Description Topic seleccionar el topico de robot_description
Turtlebot 3 es uno de los robots compatibles con ros mas usados hoy en día en universidades y por personas del común para aprender el funcionamiento de ROS y el stack de Navegación. En este post, vamos a aprender como crear un nodo de ROS1, el cual nos va a permitir crear un teleop casero para entender como crear un suscriptor y publicador en el mismo código.
Abriendo el rosject
Para poder seguir al pie de la letra este tutorial, necesitamos tener ROS 1 Noetic instalado en nuestro sistema, e idealmente un workspace para crear los paquetes en él. Para facilitarnos el proceso, ya hemos preparado un rosject para esto: https://app.theconstructsim.com/l/5e643001/
Solo copiando el rosject (Abriendo el enlace anterior), tendremos un entorno previamente configurado.
Después de que el rosject se haya copiado correctamente en tu entorno, debemos presionar el botón Ejecuta para ejecutar e inicializar el entorno del rosject.
Crear un paquete de ROS 1 con geometry_msgs
Para poder crear nuestro paquete de ROS 1, necesitamos situarnos en el workspace, y para eso, necesitamos la terminal.
Abramos una terminal oprimiendo el botón de abrir una nueva terminal:
Una vez dentro de la terminal vamos a movernos al catkin/src y creamos nuestro paquete: cd ~/catkin_ws/src
catkin_create_pkg turtlebot_publisher_subscriber geometry_msgs
Una vez creado nuestro paquete ingresamos a él y por convención creamos la carpeta scripts: cd turtlebot_publisher_suscriber
mkdir scripts
Ahora vamos a abrir el editor de código para crear nuestro nodo. Para abrir el editor de código oprimimos el botón de editor de código:
Nos situamos en catkin_es/src/turtlebot_publisher_susbriber/scripts y oprimimos clic derecho New File y le damos el nombre de turtlebot.py para crear nuestro código
Primero vamos a importar las librerías, inicializar nuestro nodo, y crear el listener con su respectivo callback:
Para entenderlo mejor vamos a desglosar el código:
El primer rectángulo nos permite observar que estamos usando el entorno de Python 3, e importamos la librería de rospy para crear los nodos y geometry_msgs.msg Twist que es el tipo de dato Twist ya que este es el que usa /cmd_vel para comunicarse.
En el segundo rectángulo estamos creando un mensaje de tipo Twist, creamos la función listener la cual se suscribe de manera anónima a al tópico cmd_vel que usa como tipo de dato Twist, y por último cuando recibe un mensaje hace un llamado al callback que usando un loginfo imprime en pantalla el contenido del mensaje, este mensaje es la velocidad angular y lineal del turtlebot 3.
Por último en el tercer rectángulo inicializamos el nodo llamado publisher_suscriber e informamos por terminal que el nodo se inicializó correctamente.
Ahora vamos a crear el nodo publicador:
Como podemos observar creamos la función talker que recibe un mensaje como parámetro, ahora nos suscribimos al tópico /cmd_vel y publicamos el mensaje
Ahora vamos a crear una función que use el teclado para mover al turtlebot:
Lo que hace la función keyInput, esta nos pide ingresar una tecla, si se oprime w cambiamos el valor lineal de x para mover el robot hacia adelante, si se oprime s cambia el valor lineal a negativo para moverse hacia atrás, si se oprime a cambia el valor angular de z para girar hacia la izquierda y d gira hacia la derecha.
Por último, vamos a hacer llamados continuos a estas funciones añadiendo un ciclo while al código inicial:
Acá lo que hacemos es crear un ciclo while para que esté constantemente solicitando una tecla, imprimiendo la velocidad del turtlebot 3, y cambiando la velocidad del turtlebot.
Para probar el código vamos a movernos a nuestro workspace, y compilamos el entorno: cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
Y si no tuvimos ningún error podemos correr el código y revisar si funciona
Sa maikling ROSject na ito, ating tatalakayin ang isa sa mga pinakamahalagang aspeto na kailangan nating matutunan at maging bihasa bilang mga nagnanais na maging robotics developer na siyang gagamit ng ROS (Robot Operating System) para sa ating mga proyekto — at yan ay ang paggawa ang pag-aayos ng ating mga workspaces!
Ang pangunahing paksa sa kursong ito ay ang paggawa ng mga workspace at maging mga diskurso sa mga best practices sa pag-oorganisa ng mga direktori upang siguraduhin na madali at mabilis nating mahanap, magagamit, at mabubuksan ang ating mga kinakailangang programa o dokumento para sa ating mga susunod na proyektong pang-robotics!
Mayroong dalawang bahagi ang kursong ito — ang una ay siyang tatalakay sa paggawa ng workspace gamit ang ROS1 Noetic Ninjemys at ang ikalawa naman ay siyang gumagamit ng ROS2 Humble Hawksbill.
Para sa kursong ito, inaasahang may payak na kaalaman na ang user sa paggamit ng mga sistemang tumatakbo sa Ubuntu at maging ang pagkumpuni gamit ang Linux Terminal. Kung nais niyong matutunan pa lalo ang mga paksang patungkol sa pangunahing kaalmaan hinggil sa pag-proprogram gamit ang ROS, mangyaring pumunta sa website ng The Construct ukol sa kanilang kursong Code Foundation for ROS Learning Path! Ang mga maiikling kursong ito’y siguradong maghahanda sa inyo para inyong mahasa ang inyong kaalaman hinggil sa mga kinakailangang programming languages na ginagamit sa ROS.
Mga Modules na Nilalaman ng Code Foundation for ROS Learning Path:
Linux for Robotics
Python 3 for Robotics
Examination
Para sa mga nagnanais na gamitin ang kanilang sariling mga kompyueter, para sa parehong kurso ay susundan natin ang OS-to_Distribution compatiblities na galing mula sa opsiyal na dokumentasyon ng ros.org para sa parehong ROS1 Noetic Ninjemys at ROS2 Humble Hawksbill
ROS1 Noetic: PC o Virtual Machine na tumatakbo sa Ubuntu 20.04 LTS
ROS2 Noetic: PC o Virtual Machine na tumatakbo sa 22.04 LTS
1.2 ROS Workspaces
Sa bawat ROS project, lahat ng ito ay nagsisimula sa tinatwag na Workspace. Ang folder na ito ang siyang maglalaman ng halos lahat na kakailanganin ng iyong robot para ito ay tumakbo — maging mga packages, scripts, at sa pagdalob sa mga partikular ng ROS, ng iyong mga nodes at topics na siyang gagamitin sa kabuuan ng operasyon at pagdisenyo ng robot. Sa ganitong palagay ay tila napakahalagang matutunan natin ang tamang pamamaraan ng paggawa at pag-organisa ng mga nilalaman ng mga ito sapagkat dahil sa natural na pagiging komplikado ng mga ganitong sistema, maaring sa pagtagal ay tila mahirapan tayo dahil sa dami ng mga kumpuni na ating nagawa para sa naturang robot. At sa kursong ito ay siyang mismo ang ating tatalakayin – ang pagsigurado ng kaayusan at kalinisan ng ating mga folder at directory sa kabuuan ng ating development!
Halina’t simulan na natin!
1.3 1.3 Paglikha ng Iyong Unang Workspace sa ROS1
Masasabing hindi komplikado ang paggawa ng workspace sa ROS2. Sa industriya, sinusunod natin ang format ng pagpapangalan sa ating mga folder na naaayon sa syntax na ‘projectname_ws’. Para tayo ay magsimula, una muna tayong pupunta sa root directory at gagawa ng halimbawang workspace na ating papangalanang ‘robot1_ws’
Kung inyong mapapapansin, opo, ang isang workspace ay siyang kumakatawan sa isang buong robot. Sa kabuuan ng iyong development, ang folder na ito ang maglalaman ng lahat ng parte and kumpuni ng iyong proyekto.
# Patakbuhin sa Terminal 1 # Pagpunta sa Root Directory cd ~ # Paglikha ng Workspace mkdir robot1_ws
Matapos patakbuhin ang mga code na ito, iyong makikita ang iyong panibagong folder na nakalagay na sa iyong root folder:
Mula sa kaninang diskurso, kakailanganin nating pagdaluban ng diwa ang isang mahalagng tanong: Ano kaya ang magiging kalabasan ng ating directory matapos ang 100 mga workspace?
Tunay ngang maari itong magmukhang magulo lalo na at sa root folder natin silang lahat nilalagay. Upang mas mainam ang ating pag-oorganisa sa mga ito ay mangyaring gumawa tayo ng Master Folder na siyang maglalaman ng lahat ng ating mga workspace upang mas mabilis natin silang mahanap at mabuksan.
Papangalanan natin itong “Workspaces” at matapos natin itong magawa, ililipat naman natin ang kaninang “robot1_ws” na folder sa loob nito.
# Patakbuhin sa Terminal 1 # Likhain ang Master Folder mkdir Workspaces # Ilipat ang robot1_ws sa Workspaces mv robot1_ws ~/Workspaces/
Matapos nating gawin ang ating workspace folder, mangyaring gawan natin ito ng ‘src’ folder sa loob.
# Patakbuhin sa Terminal 1 cd ~/Workspaces/robot1_ws mkdir src
Ganito dapat ang kalalabasan ng iyong diretory:
Ngayon, ano ang halaga ng ‘src’ folder na ito?
Ito lang naman ang siyang naglalaman ng mga ROS Packages na ating gagamitin para sa pagdisenyo ng ating robot – nandito ang mga nodes, topics, messages, at maging mga python o c++ scripts na ating iproprogram para sa mga parte ng ating robot.
Kaya’t gumawa rin tayo ng halimbawang package at pangalanan nating camera1_pkg.
# Patakbuhin sa Terminal 1 # Pumunta sa loob ng src folder bilang paghahanda sa paggawa ng package cd src
Kung inyong papansinin, ang mag ros package ay siyang mga maituturing na mismong kumpuni ng inyong robot – maaaring ito yung para sa camera, para sa motion planning, at iba pa.
Ngayon, ang paggawa ng package sa ROS1 ay hindi nadadaan sa simpleng paglikha ng folder sa ‘src’ folder; bagkus, ay kakailanganin nating magpatakbo ng mga commands upang maisagawa ito nang maayos.
# Patakbuhin sa Terminal 1 # Siguraduhing nasa loob na ng ‘src’ folder ng iyong nagawang workspace catkin_create_pkg camera1_pkg roscpp rospy std_msgs
Matapos nito, iyong makikita ang ganitong compigurasyon ng iyong terminal
Iyo ring mapapansin ang mga panibagong laman nito tulad ng CMakeLists.txt at Package.xml na siyang naglalarawan ng mga katangian ng package na ating nalikha.
Ang bagong ‘src’ folder sa loob ng ating package naman ang siyang ating paglalagayan ng lahat ng ating c++ scripts para sa paglikha ng ating mga node. Kung nais nating mag-develop gamit ang python, mainam na lumikha tayo ng folder na pinangalanang ‘scripts’ upanag manatiling organisado at maayos ang ating mga dokumento para sa naturang proyekto.
Upang kumpletuhin ang proseso, ngayon naman ay atin nang bubuuin ang workspace gamit ang syntax na:
catkin_make
Ngunit bago natin ito gawin, siguraduhin nasa loob tayo ng folder ng ating workspace na siyang si ‘robot1_ws’
# Patakbuhin sa Terminal 1 # Bumalik sa robot1_ws folder cd ../ # Buuin ang Workspacce catkin_make
Ito ang halimbawa ng resultang lalabas sa inyong mga terminal:
Matapos nito, may mga lalabas ring panibagong mga folder at dokumento sa directory ng inyong workspace:
Pag kapareho nito ang lumabas sa inyong IDE, isang masigasig na pagbati! Matagumpay nating nagawa ang ating unang workspace gamit ang ROS1 Noetic.
Para sa ikalawang parte nitong tutorial na ito, atin namang titignan ang proseso ng paggawa ng workspace para sa ROS2 Humble. Mangyaring inyo na rin itong matignan gamit ang ROSject link na ito:
Para sa kursong ito, inaasahang may payak na kaalaman na ang user sa paggamit ng mga sistemang tumatakbo sa Ubuntu at maging ang pagkumpuni gamit ang Linux Terminal. Kung nais niyong matutunan pa lalo ang mga paksang patungkol sa pangunahing kaalmaan hinggil sa pag-proprogram gamit ang ROS, mangyaring pumunta sa website ng The Construct ukol sa kanilang kursong Code Foundation for ROS Learning Path! Ang mga maiikling kursong ito’y siguradong maghahanda sa inyo para inyong mahasa ang inyong kaalaman hinggil sa mga kinakailangang programming languages na ginagamit sa ROS.
Mga Modules na Nilalaman ng Code Foundation for ROS Learning Path:
Linux for Robotics
Python 3 for Robotics
Examination
Para sa mga nagnanais na gamitin ang kanilang sariling mga kompyueter, para sa parehong kurso ay susundan natin ang OS-to_Distribution compatiblities na galing mula sa opsiyal na dokumentasyon ng ros.org para sa parehong ROS1 Noetic Ninjemys at ROS2 Humble Hawksbill
ROS1 Noetic: PC o Virtual Machine na tumatakbo sa Ubuntu 20.04 LTS
ROS2 Noetic: PC o Virtual Machine na tumatakbo sa 22.04 LTS
1.2 ROS Workspaces
Sa bawat ROS project, lahat ng ito ay nagsisimula sa tinatwag na Workspace. Ang folder na ito ang siyang maglalaman ng halos lahat na kakailanganin ng iyong robot para ito ay tumakbo — maging mga packages, scripts, at sa pagdalob sa mga partikular ng ROS, ng iyong mga nodes at topics na siyang gagamitin sa kabuuan ng operasyon at pagdisenyo ng robot. Sa ganitong palagay ay tila napakahalagang matutunan natin ang tamang pamamaraan ng paggawa at pag-organisa ng mga nilalaman ng mga ito sapagkat dahil sa natural na pagiging komplikado ng mga ganitong sistema, maaring sa pagtagal ay tila mahirapan tayo dahil sa dami ng mga kumpuni na ating nagawa para sa naturang robot. At sa kursong ito ay siyang mismo ang ating tatalakayin – ang pagsigurado ng kaayusan at kalinisan ng ating mga folder at directory sa kabuuan ng ating development!
Halina’t simulan na natin!
1.3 Paglikha ng Iyong Unang Workspace sa ROS2
Masasabing hindi komplikado ang paggawa ng workspace sa ROS2. Sa industriya, sinusunod natin ang format ng pagpapangalan sa ating mga folder na naaayon sa syntax na ‘projectname_ws’. Para tayo ay magsimula, una muna tayong pupunta sa root directory at gagawa ng halimbawang workspace na ating papangalanang ‘robot1_ws’
Kung inyong mapapapansin, opo, ang isang workspace ay siyang kumakatawan sa isang buong robot. Sa kabuuan ng iyong development, ang folder na ito ang maglalaman ng lahat ng parte and kumpuni ng iyong proyekto.
# Patakbuhin in Terminal 1 # Pagpunta sa Root Directory cd ~ # Paggawa ng Workspace mkdir robot1_ws
Matapos patakbuhin ang mga code na ito, iyong makikita ang iyong panibagong folder na nakalagay na sa iyong root folder:
Mula sa kaninang diskurso, kakailanganin nating pagdaluban ng diwa ang isang mahalagng tanong: Ano kaya ang magiging kalabasan ng ating directory matapos ang 100 mga workspace?
Tunay ngang maari itong magmukhang magulo lalo na at sa root folder natin silang lahat nilalagay. Upang mas mainam ang ating pag-oorganisa sa mga ito ay mangyaring gumawa tayo ng Master Folder na siyang maglalaman ng lahat ng ating mga workspace upang mas mabilis natin silang mahanap at mabuksan.
Papangalanan natin itong “Workspaces” at matapos natin itong magawa, ililipat naman natin ang kaninang “robot1_ws” na folder sa loob nito.
# Patakbuhin sa in Terminal 1 # Likhain ang Master Folder mkdir Workspaces # Ilipat ang robot1_ws sa Workspaces mv robot1_ws ~/Workspaces/
Matapos nito, ganito na dapat ang lalabas sa ating directory:
Upang ating masubukan mamaya kung paano gumamit ng mahigit sa isang workspace sa ROS2, tayo’y gumawa pa ng isang folder na ating papangalanang robot2_ws sa loob ng Workspaces master folder. Matapos na ito’y gawin, ganito dapat ang kalalabasan:
# Patakbuhin sa Terminal 1 # Solusyon A: mkdir robot2_ws mv robot2_ws ~/Workspaces #Solusyon B: cd ~/Workspaces mkdir robot2_ws
Mahusay!
Ngayong nalikha na natin ang ating mga workspace folder, ang sunod na hakbang ay ang paggawa ng mga ‘src’ folder sa bawat workspace natin.
# Patakbuhin sa Terminal 1 cd ~/Workspaces/robot1_ws mkdir src cd ../ cd robot2_ws mkdir src
Ganito na dapat ang kalalabasan ng ating directory:
Matapos nito ay babalik tayo sa main folder ng ating workspace at tsaka patatakbuhin ang command na ‘colcon build’
# Patakbuhin sa Terminal 1 cd ~/Workspaces/robot1_ws colcon build cd ~/Workspaces/robot2_ws colcon build
Maglalabas ang terminal ng naturang output:
MAHALAGA: Kahit mapapansing gumana ang command na ito sa terminal, nararapat lamang na sa inyong mga lokal na kompyuter ay siguraduhing na-source nang maigi ang ating ROS Distro (Distribusyon) sa pamamagitan ng pagtakbo ng code na ito sa root folder:
# Hindi kailangang patakbuhin ngunit PALAGING TANDAAN!!! cd ~ source ~/opt/ros/[–distro–]/setup.bash # Note: the -distro- is to be replaced with the disitrbution that you have installed and are currently using. In this case, we will use humble source ~/opt/ros/humble/setup.bash
Matapos gawin ang mga ito, dapat na lumabas ang mga panibagong folder na ito sa inyong mga workspace:
Ngayon, ating talakayin ang iilan sa mga payak ngunit mahahalagang folder na kailangan nating pagtuunan ng pansin matapos ang paggawa ng ating workspace. Magsimula tayo sa ‘src’ folder, ang folder na ito ang maglalaman ng lahat ng packages na ating nalikha para sa ating robot. Bilang maikling pagtalakay, ang package ay masasabing isang esensyal na lipon ng mga script na siyang naglalarawan o naglilikha sa isang partikular na parte ng ating robot — maari itong maging camera, pang-motion-planning, at iba pa. May hiwalay na commands na kailangan upang makagawa ng package sa ROS2 na siyang tatalakayin sa iba pang maiksing kurso.
Pumunta naman tayo sa ‘install’ folder. Kung inyong mapapansin mula sa inyong mga IDE, napakaraming bagong dokumento sa loob nito at isa sa mga kailangan nating tignan ay ang ‘setup.bash’. Sa ROS2, pag nais nating gamitin ang mahigit sa isang workspace, nararapat nating ma-source nang maigi hindi lamang ang distro na gamit natin; bagkus, maging na rin ang workspace na ating patatakbuhin.
Sa ganitong palagay, kung nais nating gamitin ang laman ng ‘robot1_ws’ na workspace, kakailanganin nating i-source ito sa terminal gamit ang sumusunod na code:
# Patakbuhin sa in Terminal 1 cd ~/Workspaces source robot1_ws/install/setup.bash
Kung nais mo namang gamitin at ‘robot2_ws’ workspace, mangyaring patakbuhin ang sumusunod na command:
Ang karaniwang panuntunan na ating susundin ay ang pag-source ng setup.bash file ng workspace mula sa ‘install’ folder nito
source ~/folder1/sample_ws/install/setup.bash
# Patakbuhin sa Terminal 1 cd ~/Workspaces source robot2_ws/install/setup.bash
At ayan! Matagumpay nating nagawa ang ating workspace gamit ang ROS2 Humble Hawksbill.
Hello ROS developers! In this post, we’ll find out what happened to roscore in ROS2 and how similar functions of the ROS1 master were implemented in ROS2. Sit back and get ready to have some fun!
In order to approach this theory-like topic with as much practical as possible, this post has two main sections:
Some tinkering with a ROS2 installation. This is the real fun part: trying to find roscore in ROS2.
Some theory. As this might be a little boring, so we’ll keep it short and sweet!
Section 1: Trying to find roscore in a ROS2 installation
Since ROS2 arrived in town, there has been a rumour going round that “roscore is missing”! But don’t take anyone’s word for it; let’s find out for ourselves. Shall we?
We need a functional ROS2 installation for this. We will use one of the awesome Docker images of ROS2 provided by the Open Source Robotics Foundation (OSRF), to keep it easy for everyone and make sure we can tinker with ROS2 without committing too much time to installing it (yet). Choose any of the following options:
Spin a free ROS development environment at ROSDS. With this, you skip all installations; just a few clicks and you will have access a ROS-ready computer within your browser. This is the recommended option.
You have docker installed on your local development machine. Please note that a ROS2 installation is not necessary since we’re using a docker image, but if you have ROS2 installed already you may choose to use it instead of the docker image.
We are using option 1 for this post. It’s about time we skipped local installations and start developing within our browsers, but I digress.
Now is time for action: fire up a terminal on your machine and get ready to shoot some commands at it! Our first task is spinning up the ROS2 docker installation:
user:~$ docker run -it osrf/ros2:bouncy-ros-core
Unable to find image 'osrf/ros2:bouncy-ros-core' locally
...
root@d213f10c91f9:/#
You should get something like the above, ending with a prompt that grants access to the ROS2 docker machine. Now type the following commands and study the output.
root@d213f10c91f9:/# roscore
bash: roscore: command not found
root@d213f10c91f9:/# ros2core
bash: ros2core: command not found
root@d213f10c91f9:/# ros2 core
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2: error: argument Call `ros2 <command> -h` for more detailed usage.: invalid choice: 'core' (choose from 'daemon', 'extension_points', 'extensions', 'launch', 'lifecycle', 'msg', 'node', 'param', 'pkg', 'run', 'service', 'srv', 'topic')
root@d213f10c91f9:/# ros2 master
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2: error: argument Call `ros2 <command> -h` for more detailed usage.: invalid choice: 'master' (choose from 'daemon', 'extension_points', 'extensions', 'launch', 'lifecycle', 'msg', 'node', 'param', 'pkg', 'run', 'service', 'srv', 'topic')
You may want to try other commands to find roscore in ROS2, but I’m done here. ?
Conclusion:could not find roscore in ROS2. The rumour appears true after all.
But what happened to roscore – it was the “core” of ROS, so now what? Let’s find out in the next section.
Section 2: ROS2 – ending the ROS “slave trade”
“Hey, are you saying the people of ROS engaged in slave trade?!” Of course not! It’s just a fun way of describing how ROS1 worked. Relieved? ?
So let’s break the news here: roscore is dead in ROS2. It was killed, buried for good, and replaced by a better system. Here are some highlights:
In ROS1, roscore is the master node. Other nodes depend on it. But in ROS2, no more “master” (and “slaves”). Exit roscore. Enter DDS (Data Distribution Service).
In ROS1, roscore drives a client/server (or slave/master) architecture. For ROS2, DDS drives a distributed architecture.
Peer-to-peer communication (not master-slave :D). This sounds more democratic, doesn’t it?
No more single point of failure (fault tolerance). roscore can hold other nodes to ransom in ROS1, but no node can do that in ROS2.
Configurable Quality of Service (QoS). ROS1 provides a “best effort” service, but in ROS2 we can set the QoS required for a specific use case.
ROS2 also uses DDS for serialization and transport, in addition to “discovery”, which was the main function of roscore in ROS1.
In short, in ROS2, DDS is the new Sherrif in town; roscore has been fired!
Wrapping up
You still have your terminal open? Great, let’s see an example of how one of the core functions performed by roscore is ROS1 is now done in ROS2:
root@d213f10c91f9:/# ros2 node list -a
_ros2cli_node_daemon_0
The command above “finds existing nodes, including hidden ones”. In ROS1, roscore, which was a single node, used to rule this space. But no more in ROS2!
Video
Do you prefer to see this post in “audio and video” instead of “black and white”? If yes, the video below is for you. Enjoy!
We want to hear you!
Did you like this post? Whatever the case, please leave a comment in the comments section below, so we can interact and learn from each other.
If you want to learn about other ROS topics, then please let us know on the comments area and we will do a post or video about it.