Introduction à la compilation du système d'exploitation du robot ROS Catkin et à l'utilisation des commandes courantes

Il existe de nombreuses commandes dans ROS. Trions quelques commandes courantes fréquemment utilisées. Ces commandes sont couramment utilisées dans le fonctionnement quotidien des robots, et elles sont également nécessaires pour savoir comment faire fonctionner les robots normalement dans ROS.

Surtout lors de la compilation de packages, ce sera très simple pour les amis qui connaissent CMake . À l'heure actuelle, Catkin est essentiellement utilisé dans ROS . Il encapsule CMake et Make, ce qui le rend plus efficace et concis, et plus portable. -compilation et distribution plus raisonnable des packages de fonctionnalités. Bien sûr, dans le système ROS, il est également compatible avec la compilation de l'ancienne version de rosbuild . Cependant, il est recommandé d'utiliser Catkin. Fondamentalement, les packages logiciels de base de ROS ont tous été convertis en Catkin.

1. Commandes communes

Commande effet
roslaunch exécuter le fichier de démarrage
catkin_create_pkg Créer un pack de fonctionnalités
rospack Obtenir le pack de fonctionnalités
faire des chatons Compiler le package de fonctionnalités dans l'espace de travail
Rosdep  Installer automatiquement les autres packages dont dépend le package de fonctionnalités
roscd Saut dans le répertoire du pack de fonctions
roscp Copiez les fichiers dans le pack de fonctionnalités
rose Modifier les fichiers dans les packs de fonctionnalités
rosrun Exécuter des exécutables dans des packs de fonctionnalités

Pour certaines des commandes courantes mentionnées ci-dessus, leurs explications détaillées sont données ci-dessous, à partir du document d'aide officiel, j'ai fait des annotations chinoises pour elles, ce qui est pratique pour une recherche et une application ultérieures.

1.1、roslaunch

roslaunch : l'exécution du fichier de démarrage est une commande très importante. Pour un système complexe avec de nombreux nœuds dans ROS, vous devez utiliser cette commande pour démarrer plusieurs nœuds à la fois.

roslaunch -h

Utilisation : roslaunch [options] [package] <nom_fichier> [nom_arg :=valeur...]
       roslaunch [options] <nom_fichier> [<nom_fichier>...] [nom_arg :=valeur...]

Si <filename> est un tiret simple ('-'), le XML de lancement est lu à partir de l'entrée standard.

Options :
  -h, --help         affiche ce message d'aide et quitte
  --files               Affiche la liste des fichiers chargés par le fichier de lancement, y compris le fichier de lancement lui-même Affiche la liste des fichiers chargés par le fichier de lancement, y compris le fichier de lancement lui-même  
  -- args=NODE_NAME      Affiche la ligne de commande arguments pour le nœud Affiche les arguments de ligne de commande pour le nœud
  --nodes               Affiche la liste des noms de nœuds dans le fichier de lancement Affiche la liste des noms de nœuds dans le fichier de lancement
  --find-node=NODE_NAME  Trouve le fichier de lancement dans lequel le nœud est défini Trouve le fichier de démarrage où nœud est défini
  -c NOM, --child=NOM     Exécuter en tant que service enfant 'NOM' Requis avec -u Exécuter en tant que service enfant 'NOM'. Nécessité d'apporter -u
  --local               Ne pas lancer les nœuds distants Ne pas démarrer les nœuds distants
  --screen              Forcer la sortie de tous les nœuds locaux à l'écran Forcer tous les nœuds locaux à sortir à l'écran
  --required            Forcer tous les nœuds à être requis Forcer tous les nœuds à être requis
  --log                 Forcer la sortie de tous les nœuds locaux à se connecter Forcer tous les nœuds locaux à générer des journaux
  -u URI , --server_uri=URI     URI du serveur. Obligatoire avec -c URI du serveur. À utiliser avec -c
  --run_id=RUN_ID       run_id de la session. Requis avec -c Run_id de la session. Utiliser avec -c
  --wait                attendre que le maître démarre avant de lancer attendre que le programme principal démarre avant de lancer
  -p PORT, --port=PORT  port maître Uniquement valide si maître est lancé le port maître. Valide uniquement lorsque le serveur principal démarre
  --core                Lancer les services principaux uniquement ne lance que les services principaux
  --pid=PID_FN         écrire le pid de roslaunch dans le nom de fichier Écrire le pid de roslaunch dans le fichier
  -v                    verbose printing Impression détaillée
  --no-summary          hide summary printing Ne pas imprimer summary-
  -dump -params         Vider les paramètres de tous les fichiers roslaunch vers stdout Vider vers la sortie standard
  -- skip-log-check      ignore la taille du dossier de journal
  --ros-args            Affiche les arguments de ligne de commande pour ce fichier de lancement Affiche les arguments de ligne de commande pour ce fichier de lancement
  -- disable-title       Désactive le réglage du titre du terminal Désactive le réglage du titre du terminal
  -w NUM_WORKERS, --numworkers=NUM_WORKERS
                        remplace le nombre de threads de travail. Valide uniquement pour les services principaux. Remplace le nombre de threads de travail. Valable uniquement pour les services de base.
  -t TIMEOUT, --timeout=TIMEOUT
                        remplace le délai d'expiration de la connexion au socket (en secondes). Valable uniquement pour les services principaux.
                        Remplace le délai d'expiration de la connexion au socket (en secondes). Valable uniquement pour les services de base.
  --master-logger-level=MASTER_LOGGER_LEVEL
                        définir le niveau de l'enregistreur rosmaster.master ('debug', 'info', 'warn', 'error', 'fatal') définir le niveau de journalisation

Il existe de nombreux paramètres, et le paramètre qui est souvent suivi est l'écran

--screen : force tous les nœuds locaux à sortir à l'écran, ce qui est pratique pour l'observation et le débogage. Bien sûr, si vous souhaitez l'enregistrer dans un fichier journal pour une visualisation facile ultérieurement, spécifiez-le simplement comme --log . Généralement, une fois le débogage terminé, le paramètre screen doit être supprimé pour que la sortie du terminal reste propre. Lorsque la
commande roslaunch est en cours d'exécution, elle vérifie d'abord si le rosmaster du système est en cours d'exécution. S'il a été démarré, le rosmaster existant sera utilisé ; s'il n'est pas démarré, le rosmaster sera démarré en premier, puisles paramètres dans le fichier de lancement Il convient de noter que le fichier de lancement n'a pas besoin d'être compilé et peut être exécuté directement de la manière ci-dessus après la configuration.
arg:=value : S'ily a des variables à assigner dans le fichier de lancement , elles peuvent être assignées de cette façon.

1.2、catkin_create_pkg

Informations pour la création de packs de fonctionnalités

catkin_create_pkg -h

utilisation : catkin_create_pkg [-h] [--meta] [-s [SYS_DEPS [SYS_DEPS ...]]] [
                         -b [BOOST_COMPS [BOOST_COMPS ...]]] [-V PKG_VERSION]
                         [-D DESCRIPTION] [- l LICENCE] [-a AUTEUR]
                         [-m MAINTAINER] [--rosdistro ROSDISTRO]
                         nom [dépendances [dépendances ...]]

Crée un nouveau package catkin

arguments positionnels :
  name                  Le nom des
  dépendances du package          Catkin package Dependencies

Arguments facultatifs :
  -h, --help affiche ce message d'aide et quitte
  --meta                Crée des fichiers de méta-paquet
  -s [SYS_DEPS [SYS_DEPS ...]], --sys-deps [SYS_DEPS [SYS_DEPS .. .]]
                        Système Dépendances Dépendances système
  -b [BOOST_COMPS [BOOST_COMPS ...]], --boost-comps [BOOST_COMPS [ BOOST_COMPS ...]]
                        Composants Boost Composants Boost
  -V PKG_VERSION, --pkg_version PKG_VERSION  Version initiale du package Version initiale du package
  -D DESCRIPTION , --description DESCRIPTION  Description Description
  -l LICENCE, --license LICENCE  Nom de la licence, (par exemple BSD, MIT, GPLv3...) Contrat de licence
  -a AUTEUR, --author AUTEUR  Un seul auteur, peut être utilisé plusieurs fois 作者
  -m MAINTAINER, --maintainer MAINTAINER  Un
  seul  mainteneur, peut être utilisé plusieurs fois

1.3、rospack

Obtenir des informations sur les packs de fonctionnalités

rospack -h

UTILISATION : rospack <commande> [options] [package]
  Commandes autorisées :
    help
    cflags-only-I [--deps-only] [package]
    cflags-only-other [--deps-only] [package]
    depend [package] (alias : deps)
    depend-indent [paquet] (alias : deps-indent)
    depend-manifests [paquet] (alias : deps-manifests)
    depend-msgsrv [paquet] (alias : deps-msgsrv)
    depend-on [paquet]
    depend-on1 [paquet]
    depend-why --target=<cible> [paquet] (alias : deps-why)
    depend1 [paquet] (alias : deps1)
    export [--deps-only] --lang=<lang> --attrib=<attrib> [package]
    trouver [package]
    langues
    libs-only-L [--deps-only] [package]
    libs-only-l [--deps-only] [package]
    libs-only-other [--deps-only] [package]
    liste liste-     liste
    des doublons
-names
    plugins --attrib=<attrib> [--top=<toppkg>] [package]
    profil [--length=<longueur>] [--zombie-only]
    rosdep [package] (alias : rosdeps)
    rosdep0 [ package] (alias : rosdeps0)
    vcs [package]
    vcs0 [package]
  Options supplémentaires :
    -q Arrête les rapports d'erreur.

 Si [package] est omis, le répertoire de travail courant
 est utilisé (s'il contient un package.xml ou manifest.xml).

Si aucun nom de package n'est spécifié, cela signifie le répertoire de travail actuel.

1.4、catkin_make

Compilez le package de fonctions dans l'espace de travail, qui a été présenté au début de cet article. C'est spécifiquement pour la compilation de packages dans ROS, et c'est un package pour CMake et Make.

catkin_make -h

utilisation : catkin_make [-h] [-C DIRECTORY] [--source SOURCE] [--build BUILD]
                   [--use-ninja] [--use-nmake] [--use-gmake] [--force- cmake]
                   [--no-color] [--pkg PKG [PKG ...]]
                   [--only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]]
                   [--cmake-args [CMAKE_ARGS [CMAKE_ARGS . ..]]]
                   [--make-args [MAKE_ARGS [MAKE_ARGS ...]]]
                   [--override-build-tool-check]

Arguments optionnels :
  -h, --help affiche ce message d'aide et quitte
  -C DIRECTORY, --directory DIRECTORY   Le chemin de base de l'espace de travail (par défaut '.') Le chemin de base de l'espace de travail (par défaut '.')')
  --source SOURCE       Le chemin vers l'espace source (par défaut 'workspace_base/src')
  --build BUILD         Le chemin vers l'espace de construction (par défaut 'workspace_base/build' ) Le chemin vers l'espace de construction (par défaut 'workspace_base/build' )
  --use-ninja           Utiliser 'ninja' au lieu de 'make' Utiliser ninja au lieu de make
  --use-nmake           Utiliser 'nmake' au lieu de 'make' Utiliser nmake au lieu de make
  --use-gmake           Utiliser 'gmake' au lieu de 'make' Utiliser gmake au lieu de make
  --force-cmake            Invoquer ' cmake' même s'il         a été exécuté avant
  .   Invoquez 'make' sur des packages spécifiques uniquement 只对特定的包调用make --only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]                         Mettez en liste blanche uniquement les packages spécifiés et leurs                         dépendances en définissant la variable CATKIN_WHITELIST_PACKAGES                         . Cette variable est stockée dans CMakeCache.txt                         et persistera entre les appels CMake à moins qu'elle ne soit explicitement                         effacée ; par exemple catkin_make
 
 





                        -DCATKIN_WHITELIST_PACKAGES="".
    Mettez en liste blanche le package spécifié et ses packages dépendants en définissant la variable CATKIN_WHITELIST_PACKAGES, qui est stockée dans CMakeCache.txt et persistera entre les appels CMake à moins qu'elle ne soit explicitement effacée.
  --cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]]
                        Arguments arbitraires passés à CMake. Il doit être passé après les autres arguments car il collecte toutes les options suivantes.
Arguments arbitraires passés à CMake.
  --make-args [MAKE_ARGS [MAKE_ARGS ...]]
                        Arguments arbitraires qui sont des passages à make. Il doit être passé après les autres arguments car il collecte toutes les options suivantes .
Ceci n'est requis que lorsqu'il est utilisé en conjonction avec --cmake-args, sinon tous les arguments inconnus sont passés pour que
  --override-build-tool-check
                        soit utilisé pour ignorer l'échec dû à l'utilisation de différents outils de construction sur le même espace de travail. causés par l'utilisation d'outils de construction différents sur le même espace de travail.

1.5、Rosdep

Installer automatiquement les packages dépendants des packages de fonctionnalités

rosdep -h

 

Utilisation : rosdep [options] <commande> <args>

Commandes :

rosdep check <stacks-and-packages>...
  vérifie si les dépendances du ou des packages ont été respectées.

rosdep install <stacks-and-packages>...
  télécharge et installe les dépendances d'un ou plusieurs packages donnés.

rosdep db
  génère la base de données de dépendances et l'imprime sur la console.

rosdep init
  initialiser les sources rosdep dans /etc/ros/rosdep. Peut nécessiter sudo. Initialiser les sources de dépendance dans /etc/ross/rosdep. Peut nécessiter des privilèges sudo

rosdep keys <stacks-and-packages>...
  répertorie les clés rosdep dont dépendent les packages. Répertorie les clés rosdep dont dépendent les packages.

rosdep résoudre <rosdeps>
  résoudre <rosdeps> aux dépendances système résoudre <rosdeps> aux dépendances système

mise à jour rosdep
  mettre à jour la base de données rosdep locale en fonction des sources rosdep mettre à jour la base de données rosdep locale en fonction de la source rosdep

rosdep what-needs <rosdeps>...
  imprimer une liste des packages qui déclarent un rosdep sur (au moins un des) <rosdeps> Imprimer une liste des packages qui déclarent un rosdep sur (au moins un des) <rosdeps>

rosdep where-defined <rosdeps>...
  affiche une liste des fichiers yaml qui déclarent un rosdep sur (au moins un des) <rosdeps> affiche une liste des fichiers yaml qui déclarent un rosdep sur (au moins un des) <rosdeps>

 1.5.1. Commandes d'autorisation

rosdep fix-permissions
  Modifier de manière récursive les autorisations du répertoire de base ros de l'utilisateur Modifier de manière récursive les autorisations du répertoire de base ros de l'utilisateur.
  Peut nécessiter sudo. Peut être utile pour corriger les autorisations après avoir appelé accidentellement "rosdep update" avec sudo.

Lorsque les autorisations sont refusées, vous pouvez utiliser les commandes suivantes :
sudo rosdep fix-permissions
rosdep update (parfois sudo peut être requis )

1.5.2、Options

Options :
  -h, --help afficher ce message d'aide et quitter
  --os=OS_NAME:OS_VERSION
                        Remplacer le nom et la version du système d'exploitation (séparés par deux points), par exemple ubuntu:lucid remplacer le nom et la version du système d'exploitation (séparés par deux points)
  -c SOURCES_CACHE_DIR, --sources-cache-dir=SOURCES_CACHE_DIR
                        Override /home/jetson/.ros/rosdep/sources.cache
  -v, --verbose         verbose display Affichage détaillé
  --version             imprime uniquement la version rosdep, puis quitte Imprime uniquement la version rosdep, puis quittez
  --all-versions        affichez la version rosdep et la version des programmes d'installation, puis quittez
  --reinstall           (ré)installez toutes les dépendances, même si elles sont déjà installées
  -y , --default-yes     Dites au gestionnaire de paquets d'utiliser par défaut y ou d'échouer lors de l'installation
  -s, --simulate        Simuler l'installation Simuler l'installation
  -r                    Continuer l'installation malgré les erreurs Continuer l'installation malgré les erreurs.
  -q                    Silencieux. Supprime la sortie sauf en cas d'erreur. Installation silencieuse. Supprimer la sortie sauf les erreurs.
  -a, --all             sélectionne tous les packages
  -n                    Ne prend pas en compte les dépendances implicites/récursives. Valide uniquement avec les commandes 'keys', 'check' et 'install'.
    Ne prend pas en compte les dépendances implicites/récursives. Valable uniquement pour les commandes 'keys', 'check' et 'install'.
  -i, --ignore-packages-from-source, --ignore-src
                        Affecte les verbes 'check', 'install' et 'keys'. Si spécifié, rosdep ignorera les clés trouvées comme étant des packages catkin ou ament n'importe où dans ROS_PACKAGE_PATH, AMENT_PREFIX_PATH ou dans l'un des répertoires donnés par l'option --from-paths . 如果指定这个参数rosdeep将忽略在catkin
  --skip-keys=SKIP_KEYS
                        Affecte les verbes 'check' et 'install'. Les clés rosdep spécifiées seront ignorées, c'est-à-dire non résolues et non installées. L'option peut être fournie plusieurs fois.
                        Une liste de clés rosdep séparées par des espaces peut également être transmise sous forme de chaîne. Une solution plus permanente pour ignorer localement une clé rosdep consiste à créer une règle rosdep locale avec une liste vide de packages (incluez-la dans /etc/ros/rosdep/sources. list.d/ avant les valeurs par défaut). Une solution plus permanente pour ignorer localement les clés rosdep consiste à créer une règle rosdep locale (contenue dans /etc/ross/rosdep/sources.list.d) avec une liste de packages vide, dans la valeur par défaut Avant la valeur
  --filter-for-installers=FILTER_FOR_INSTALLERS
                        Affecte le verbe 'db'. Si fourni, la sortie de la commande 'db' est filtrée pour ne répertorier que les packages dont le programme d'installation figure dans la liste fournie. L'option peut être fournie plusieurs times . Une liste de programmes d'installation séparés par des espaces peut également être transmise sous forme de chaîne. Exemple :
                        `--filter-for-installers "apt pip"` N'installer que les packages filtrés
  --from-paths          Affecte les verbes 'check', 'keys' et 'install'. S'ils sont spécifiés, les arguments de ces verbes seront considérés comme des chemins à rechercher, agissant sur tous les packages catkin qui s'y trouvent.
  --rosdistro=ROS_DISTRO
                        Définit explicitement la distribution ROS à utiliser, remplaçant la méthode normale de détection de la distribution ROS à l'aide de l'environnement ROS_DISTRO variable. Lorsqu'il est utilisé avec le verbe 'update', seule la distribution spécifiée sera mise à jour. 显示指定ros的发行版本
  --as-root=INSTALLER_KEY:<bool>
                        Remplacer si sudo est utilisé pour un programme d'installation spécifique, par exemple '--as-root pip:false' ou '--as-root "pip:no homebrew :Oui"'. Peut être spécifié plusieurs fois.
  --include-eol-distros
                        Affecte le verbe "mettre à jour". Si des distributions de fin de vie spécifiées sont également récupérées.
  -t DEPENDENCY_TYPES, --dependency-types=DEPENDENCY_TYPES
                        Les types de dépendances à installer peuvent être donnés plusieurs fois. Choisissez parmi set(['exec' , 'doc', 'build_export','buildtool', 'test', 'build', 'buildtool_export']).Par défaut : tous sauf doc. 

1.6、rosrun

Exécutez le fichier exécutable rosrun -h dans le package de fonctionnalités

Utilisation : rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS]
  rosrun localisera PACKAGE et essaiera de trouver un exécutable nommé EXECUTABLE dans l'arborescence PACKAGE. S'il le trouve, il l'exécutera avec ARGS.

rosrun localisera le package, puis essaiera de trouver l'exécutable dans l'arborescence des packages, et s'il le trouve, il l'exécutera en fonction des arguments.

Le gestionnaire de nœuds ( maître ) doit être démarré en premier. Le maître est utilisé pour gérer de nombreux processus dans le système. Lorsque chaque nœud démarre, il doit s'enregistrer auprès du maître pour gérer la communication entre les nœuds . Après le démarrage du maître , enregistrez chaque nœud via le maître . Entrez la commande dans le terminal Ubuntu : roscore , ce roscore est nécessaire pour chaque ROS, et sert à fournir des informations de connexion entre les nœuds, c'est-à-dire que lorsqu'un nœud démarre, il va se connecter à roscore et enregistrer le nœud à publier et abonnez-vous Lorsqu'un nouveau nœud apparaît, roscore lui fournira les informations nécessaires pour que les autres nœuds qui publient et s'abonnent au même sujet de message afin d'établir une connexion point à point. S'il n'y a pas de roscore , les nœuds ne peuvent pas se trouver et ne peuvent pas communiquer entre eux. La méthode rosrun ne peut exécuter qu'un seul nœud à la fois. La prochaine étape est un combat réel de l'ordre.

2. Exemple de démonstration

2.1. Simulateur de tortue unique

Démarrez d'abord le gestionnaire de nœuds, entrez la commande : roscore
Voici les informations pertinentes pour le démarrage, vérifiez la taille du fichier journal, affichez l'adresse et le port de service, le numéro de version, le résumé, etc. Appuyez sur Ctrl+C pour terminer tous les nœuds ROS :

... se connectant à /home/jetson/.ros/log/fd65134c-d010-11ec-95c6-0013eff86fe1/roslaunch-jetson-desktop-10638.log
Vérification du répertoire des journaux pour l'utilisation du disque. Cela peut prendre un peu de temps.
Appuyez sur Ctrl-C pour interrompre
Terminé la vérification de l'utilisation du disque du fichier journal. L'utilisation est <1 Go.

serveur roslaunch démarré http://jetson-desktop:33239/
ros_comm version 1.14.11


RESUME
========

PARAMÈTRES
 * /rosdistro : mélodique
 * /rosversion : 1.14.11

NŒUDS

démarrage automatique du nouveau
processus maître [maître] : démarré avec le pid [10695]
ROS_MASTER_URI=http://jetson-desktop:11311/

définition de /run_id sur fd65134c-d010-11ec-95c6-0013eff86fe1
processus[rosout-1] : démarré avec le pid [10727]
démarrage du service principal [/rosout]

Ouvrez un autre terminal et démarrez le nœud du simulateur de tortue

rosrun tortuesim turtlesim_node

[ INFO] [1652153768.669399182] : démarrage de turtlesim avec le nom de nœud /turtlesim
[ INFO] [1652153768.694629755] : frai de la tortue [turtle1] à x=[5.544445], y=[5.544445], theta=[0.000000] QXcbConnection : XCB erreur :
148 (Inconnu), séquence : 173, identifiant de ressource : 0, code majeur : 140 (Inconnu), code mineur : 20

Enfin, ouvrez à nouveau un terminal et démarrez le nœud de contrôleur de clavier de tortue
rosrun turtlesim turtle_teleop_key
Sous la commande de ce nœud de contrôleur de clavier, vous pouvez contrôler le mouvement de la tortue en utilisant les touches fléchées haut, bas, gauche et droite. Comme indiqué ci-dessous: 

C'est-à-dire que dans cette opération de déplacement de la tortue, nous avons ouvert trois terminaux, démarré la gestion des nœuds, puis démarré les nœuds requis respectivement. Nous pouvons vérifier quels sujets sont lancés, entrez la commande : rostopic list

/rosout
/rosout_agg
/turtle1/cmd_vel /turtle1
/color_sensor /
turtle1/pose

Vous pouvez également saisir la commande rqt_graph pour afficher le graphique ROS : 

2.2. Deux tortues 

Voyons un exemple de tortue se déplaçant avec une tortue actionnée par clavier
Installez le package de fonctionnalités : sudo apt install ros-melodic-turtle-tf

Les erreurs suivantes peuvent se produire :

Impossible de résoudre 'packages.ros.org'
E : Impossible de récupérer http://packages.ros.org/ros/ubuntu/pool/main/r/ros-melodic-turtle-tf/ros-melodic-turtle-tf_0 .2.2-0bionic.20210922.040438_arm64.deb Impossible de résoudre 'packages.ros.org'
E : Impossible de récupérer certaines archives, peut-être exécuter apt-get update ou essayer avec --fix-missing ?

Nous vérifions directement la page de liste suivante : http://packages.ros.org/ros/ubuntu/pool/main/r/ros-melodic-turtle-tf/ peut constater qu'il n'y a pas de fichier deb
mentionné ci-dessus , nous pouvons choisir autres téléchargements manuels Tout ira bien. Bien sûr, s'il y a une situation dans cette version, c'est à cause du délai d'attente du réseau et d'autres problèmes, qui peuvent être traités scientifiquement en surfant sur Internet ou en téléchargeant manuellement. Il peut également être remplacé par une source miroir domestique :

cd /etc/apt
vim sources.list

Par exemple, le site miroir open source d'Alibaba Cloud :

deb http://mirrors.aliyun.com/ubuntu/ focal principal univers restreint multivers
deb-src http://mirrors.aliyun.com/ubuntu/ focal principal univers restreint multivers
deb http://mirrors.aliyun.com/ubuntu / focal-security principal univers restreint multivers
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security principal univers restreint multivers
deb http://mirrors.aliyun.com/ubuntu/ focal-updates principal univers restreint multivers
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates principal univers restreint multivers
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed principal univers restreint multivers
deb-src http://mirrors .aliyun.com/ubuntu/ multivers de l'univers restreint principal proposé par focal
deb http://mirrors.aliyun.com/ubuntu/ focal-backports univers restreint principal multivers
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports univers restreint principal multivers

J'utilise l'image Tsinghua ici:

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic principal multivers univers restreint
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security principal multivers univers restreint
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates multivers principal univers restreint
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports multivers principal univers restreint
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic principal multivers univers restreint
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic -security univers restreint multivers principal
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates univers restreint multivers principal
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports principal multivers univers restreint

Exécutez enfin ce qui suit :

Actualisez la liste des logiciels locaux : sudo apt-get update
Mise à jour logicielle : sudo apt-get upgrade

Exécutez le fichier .launch via la commande roslaunch pour démarrer la tortue, et la même chose affichera des informations pertinentes

roslaunch tortue_tf tortue_tf_demo.launch

Par exemple, le résumé :

RESUME
========

PARAMÈTRES
 * /rosdistro : mélodique
 * /rosversion : 1.14.11
 * /scale_angular : 2.0
 * /scale_linear : 2.0
 * /turtle1_tf_broadcaster/turtle : turtle1
 * /turtle2_tf_broadcaster/turtle : turtle2

NŒUDS
  /
    sim (turtlesim/turtlesim_node)
    teleop (turtlesim/turtle_teleop_key)
    turtle1_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    turtle2_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    turtle_pointer (turtle_tf/turtle_tf_listener.py)

ROS_MASTER_URI=http://localhost:11311

process[sim-1] : démarré avec le pid [30907]
process[teleop-2] : démarré avec le pid [30908]
process[turtle1_tf_broadcaster-3] : démarré avec le pid [30909]
process[turtle2_tf_broadcaster-4] : démarré avec le pid [ 30917]
processus[turtle_pointer-5] : démarré avec le pid [30920]

Vous pouvez voir que les multiples nœuds démarrés et l'ID de thread démarré par chaque programme sont affichés.

Utilisez rosrun pour démarrer le nœud et utilisez le clavier pour contrôler la tortue
rosrun turtlesim turtle_teleop_key

Comme le montre la figure ci-dessous, il y a une tortue contrôlée par le clavier, et une autre tortue suit la tortue contrôlée :

Trois, lancez le fichier 

Apprenons-en plus sur le fichier de lancement. Utilisons le fichier de lancement ci-dessus pour démarrer la tortue. Trouvons-le d'abord :
sudo find / -name turtle_tf_demo.launch
Après l'avoir trouvé, vérifions ce qu'il contient
cat /opt/ros/melodic/ partager/turtle_tf/launch/turtle_tf_demo.launch

<launch>

  <!-- Turtlesim Node-->
  <node pkg="turtlesim" type="turtlesim_node" name="sim"/>

  <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
  <!-- Axes -->
  <param name="scale_linear" value="2" type="double"/>
  <param name="scale_angular" value="2" type="double"/>

  <node name="turtle1_tf_broadcaster" pkg="turtle_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
    <param name="turtle" type="string" value="turtle1" />
  </node>
  <node name="turtle2_tf_broadcaster" pkg="turtle_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
    <param name="turtle" type="string" value="turtle2" />
  </node>
  <node name="turtle_pointer" pkg="turtle_tf" type="turtle_tf_listener.py" respawn="false" output="screen" >
  </node>

</launch>

Vous pouvez voir que le fichier de lancement est au format XML , d'après les exemples de la tortue 1 et de la tortue 2, on peut savoir que le nom du package à lancer et le nom du programme exécutable correspondent au noeud node .
Le premier exemple de tortue : pkg="turtlesim" type="turtlesim_node" , donc le code de démarrage est : rosrun turtlesim turtlesim_node
Le deuxième exemple de tortue : pkg="turtle_tf" type="turtle_tf_broadcaster.py" , donc le code de démarrage est : roslaunch
Le fonctionnement du clavier de turtle_tf turtle_tf_demo.launch est le même : rosrun turtlesim turtle_teleop_key
Alors pourquoi avez-vous besoin d'un fichier de lancement ? Parce qu'un robot complet contient généralement beaucoup de programmes de nœuds et doit fonctionner et coopérer en même temps, il serait plus gênant de démarrer les nœuds un par un, donc grâce à ce fichier de configuration, nous pouvons tous les démarrer en même temps, oui Pas beaucoup plus facile.
Examinons ensuite quelques descriptions de paramètres de ce fichier :

<launch>                  <!--根标签开始-->
<node>                    <!--需要启动的node及其参数-->
<remap>                  <!--设定topic映射-->
<include>                <!--包含其他launch-->

<arg>                       <!--定义变量-->
<param>                 <!--定义全局变量-->
<rosparam>            <!--加载yaml文件中的参数到参数服务器-->

<group>                 <!--设定分组-->
<machine>              <!--指定运行的机器-->
<env-loader>          <!--设置环境变量-->
</launch>               <!--根标签结束-->

3.1、<nœud>

 La balise de nœud est la partie centrale du fichier de lancement , définie comme suit :

<launch>
    <node pkg="包名1" type="可执行文件1" name="节点名1"/>
    <node pkg="包名2" type="可执行文件2" name="节点名2"></node>
    ...
</launch>

Parmi eux, si le type est écrit en Python , c'est le fichier .py, et s'il est écrit en C++ , c'est le nom du fichier exécutable compilé. Il convient de noter que ce fichier de lancement ne démarre pas pour que les nœuds qu'il contient démarrent. En plus de ces trois paramètres obligatoires, il existe des paramètres facultatifs :

<launch>
    <node pkg="" type="" name="" respawn="true" required="true" launch-prefix="xterm -e" output="screen" ns="namespace" />
</launch>

respawn : si le nœud est arrêté, redémarrage automatique
requis : si le nœud est arrêté, arrêt de tous les autres nœuds
launch-prefix : ouverture d'une nouvelle fenêtre pour exécuter
la sortie : la valeur par défaut est stockée dans le journal fichier, vous pouvez le configurer pour qu'il s'affiche à l'écran
ns : classer les nœuds dans différents espaces de noms , c'est-à-direajouterle préfixe spécifié par ns devant le nom du nœud . Afin de réaliser ce type d'opération,de la définition du nom du nœud et du nom du sujet dans le fichier source du nœud , c'est-à-dire sans le symbole /.

3.1.1. Source du graphique de calcul

Dans ROS, la source du graphique de calcul fait référence au nom collectif des rubriques, nœuds, services et paramètres. Chaque source de graphe de calcul est identifiée par une courte chaîne appelée nom de source de graphe de calcul. Le nom de la source du graphe de calcul est le suivant :
Nom de base : par exemple, nom global du sujet : le nom de la source du graphe de calcul commençant par "/". Par exemple, /A/topic nom relatif : nom de la source du graphe de calcul sans "/" au début du nom. Par exemple, A/topic private name : nom de la source du graphe de calcul commençant par le symbole tilde "~". Par exemple, ~topic nom anonyme : source de graphe informatique sans nom. Code comme celui-ci lors de la publication et de l'abonnement :




ros::init(argc, argv, "publish_node");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<std_msgs::string>("topic",1000);

3.2、<remap>

Transmettez le paramètre de remappage de nom au nœud ROS sans définir la propriété de paramètre du nœud.
Les rubriques sont divisées en publication et abonnement
. Rubriques de publication :

<node pkg="pub_node" type="pub_node" name="pub_node">
    <remap from="/pub_topic" to="/new_topic" />
</node>

Voici le sujet /pub_topic publié par le nœud pub_node est mappé sur /new_topic

Abonnez-vous aux sujets :

<node pkg="sub_node" type="sub_node" name="sub_node">
    <remap from="/sub_topic" to="/turtle" />
</node>

Voici le nom de sub_topic qui s'abonne aux sujets d'autres personnes /turtle est mappé au sub_node node , c'est-à-dire que les sujets publiés par d'autres sont mappés aux sujets auxquels vous êtes abonné.

3.3、<inclure>

Inclure un autre fichier de lancement , qui équivaut à l'imbrication des fichiers de lancement , et le paramètre de fichier peut être spécifié comme chemin complet

<include file="path-to-launch-file" />

Bien sûr, pour une meilleure portabilité, vous pouvez utiliser la commande find à la place :

<include file="$(find package-name)/launch-file-name" />

L'avantage est que même si le contrôleur principal est remplacé, tant que le même package est installé, le chemin correspondant peut être trouvé. Parfois, les nœuds introduits par un autre lancement peuvent avoir besoin d'être nommés de manière uniforme, ou les noms de nœuds avec des caractéristiques similaires, tels que /my/gps, /my/lidar, /my/imu  ont un préfixe unifié, qui est facile à trouver. pouvez définir l'attribut namespace ns à atteindre, la commande est la suivante :

<include file="$(find package-name)/launch-file-name " ns="my" /> 

3.4、<arg>

Les paramètres peuvent être réutilisés, trois façons courantes d'écrire

<arg name="foo">                          <!--只定义,不赋值-->
<arg name="foo" default="1">              <!--默认值-->
<arg name="foo" value="1">                <!--固定值-->

Autres méthodes d'affectation courantes :
affectation de la ligne de commande
roslaunch nom_du_paquet xxx.launch arg1:=v1 arg2:=v2

substitution de variables

1. $(find pkg) : par exemple, $(find rospy)/manifest.xml Si possible, ce paramètre de chemin basé sur le package est fortement recommandé
2. $(arg arg_name) : définissez d'abord la valeur par défaut, et s'il existe aucune affectation supplémentaire, utilisez simplement cette valeur par défaut,
telle que

<arg name="gui" default="true" />
<!-- 如果没有额外的赋值,就用这个默认值 -->
<param name="use_gui" value="$(arg gui)"/>

Vous pouvez également utiliser l'affectation de la ligne de commande

<node pkg="包名" type="可执行文件" name="节点名" args="$(arg a) $(arg b)" />

De cette manière, des arguments peuvent être assignés lors du démarrage du fichier de lancement : roslaunch nom du package nom_du_fichier.launch a:=1 b:=2

3.5、<param>

Contrairement à arg , le paramètre ici est partagé et sa définition est similaire

<param name="publish_frequency" type="double" value="10.0" />

Les valeurs ici, en plus de ce qui précède, peuvent également provenir de fichiers.

<param name="参数名" textfile="$(find pkg)/path/file"/>
<param name="参数名" command="$(find pkg)/exe '$(find pkg)/arg.txt'"/>
<param name="参数名" type="yaml" command="cat '$(find pkg)/*.yaml'"/>

En plus d'être défini dans la portée globale, il peut également être défini dans le nœud nœud :

<node name="node1" pkg="pkg1" type="exe1">
    <param name="param1" value="False"/>
 </node>

Vous pouvez afficher tous les paramètres par la commande : rosparam list
Ensuite, ce qui précède apparaîtra comme suit :

/publish_frequency
/node1/param1 # Le préfixe de l'espace de noms sera automatiquement ajouté ici. Il convient de noter que bien que l'espace de noms soit ajouté avant le nom, il est toujours dans la portée globale.

3.6、<rosparam>

Le paramètre précédent est obtenu via value, textfile et command , et le contenu d' un seul paramètre est renvoyé. Rosparam peut être utilisé par lots et inclut également certaines commandes pour définir des paramètres, tels que dump , delete , etc.
sa
charge d'utilisation : à partir de YAML Charger un lot de paramètres dans le fichier :

<rosparam command="load" file="$(find rosparam)/example.yaml" />

delete : supprimer un paramètre

<rosparam command="delete" param="my_param" />

opération d'affectation

<rosparam param="my_param">[1,2,3,4]</rosparam>

c'est bon

<rosparam>
a: 1
b: 2
</rosparam>

De même, ce rosparam peut également être placé dans le nœud.

3.7、<groupe>

Si vous souhaitez effectuer les mêmes réglages sur plusieurs nœuds, tels que tous dans le même espace de noms spécifique, remapper le même sujet, etc., vous pouvez utiliser ce regroupement de groupes .

<group ns="rosbot">
    <remap from="chatter" to="talker"/>       # 对该组中后面的节点都有效
    <node ... />
    <node ... >
        <remap from="chatter" to="talker1"/>  # 还可以对单个节点重新设置
    </node>
</group>

Du point de vue de ces nœuds de démarrage, la conception de ROS est très faiblement couplée, ce qui est une très bonne conception pour une collaboration conjointe, et le crash d'un seul nœud n'affectera pas les autres nœuds, ce qui est très important pour le débogage et la maintenance. .

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41896770/article/details/132207097
conseillé
Classement