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 DependenciesArguments 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 sudorosdep 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èmemise à 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 rosdeprosdep 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.11NŒ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 : turtle2NŒ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. .