ROS1 と比較した ROS2 のいくつかの変更点と利点 (ROS2 の新規インストールとコンパイル エラーの処理) "1"

1。概要

先ほど紹介したROSはすべてROS1のバージョンですが、最近犬ロボットのことを勉強していたらバージョンがROS2であることに気付き、普段使い慣れているコマンドもいくつか変わっていることに気付きました。変更点はかなり大きいです, しかし、慣れた後でも、ROS2 の書き方には非常に慣れています。
ROS2 は ROS1 をベースにしたアップデートではなく、再構築したものです。これにより、特にリアルタイム パフォーマンス、セキュリティなどの点で現代の作業のニーズを満たすことができない ROS1 の設計における多くの不規則性が回避され、いくつかの基礎的な機能が提供されます。また、ROS1 で不安定性が生じる可能性があるため、新しいアーキテクチャとみなされます。最下層はRCLライブラリ(ROSクライアントライブラリ、ROSのトピック、サービス、アクション、パラメータなどのインターフェースを提供するAPI)と呼ばれるC言語で書かれており、上位層のプログラムを書く際に呼び出されるrclcpprclpyは、 RCL ライブラリの利点は、C++ (デフォルトで ROS1 で使用される cpp98 標準よりも新しい cpp 11、cpp1A4、cpp17 標準) および Python (ここではPython2は放棄され、Python3 が直接使用されます) プログラムが使用できることです。呼び出し側の API はより統一され、類似しており、ROS2 の機能を更新する際には、RCL ライブラリが直接更新され、C++ と Python のサポートが追加されます。
起動ファイルは引き続きサポートされていますが、ROS2 では、より柔軟なPython ファイルを使用して起動ファイルを作成することをお勧めします。

2. 歴史的バージョン 

まず、ROS1 の過去のバージョンを見てみましょう。 

Ubuntu 电影    电影电影
Ubuntu 20.04 noetic
Ubuntu18.04 melodic
Ubuntu16.04 kinetic
Ubuntu14.04 indigo

これは Ubuntu のバージョンに相当します ROS2 に関しては基本的に毎年新しいバージョンがリリースされます ROS2 の歴史的なバージョンのリスト:

クリスタル: 2018年12月
ダッシング: 2019
年5月
雄弁: 2019年11月 フォクシー: 2020年6月
ギャラクティック: 2021年5月 

私の Ubuntu バージョン情報: lsb_release -a 

使用可能な LSB モジュールはありません。
ディストリビューター ID: Ubuntu
説明: Ubuntu 20.04.4 LTS
リリース: 20.04
コード名: folk 

その他のコマンドには、cat /etc/issueまたはcat /etc/os-releaseまたはcat /proc/version が含まれます。

たとえば、私の ROS2 バージョン: rosversion -d
foxy
または: rosversion --distro
foxy 

3. コマンドの変更 

コマンドも変更されました。基本的に、 ros1 のrosxxx はros2 xxxの形式に分割されます。たとえば、 rosrun はros2 runになります。もちろん、Tab キーをダブルクリックしてプロンプトを表示することもできます。これも何度もお勧めします. 以下に示すように、これを行う方法: 

このようなコマンドを見ると、個人的にはその方が合理的であり、各単語に実際の意味があり、より直観的であると感じます。 

ノードのデモを実行して、その効果、パブリッシュ ノードとサブスクライブ ノードを確認してみましょう。

ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener

 以下のスクリーンショット:

ここで上記の 2 つのノードを実行する前に、roscore を実行しませんでした。2つのノードが相互に通信できることがわかります。言い換えれば、ROS2 の分散設計により、より多くの産業用アプリケーションや製品のニーズに適応することができます。レベルのアプリケーションシナリオ。
ROS1 と ROS2 は同じコンピュータ上に共存でき、対応するsetup.bashをソースするだけで環境の選択が完了します。残りのいくつかの一般的なコマンドのバリエーションは次のとおりです。

コンパイル命令、  catkin_make からcolcon build に変更されました 
rosrun rqt_graph rqt_graph が rqt_graphに変更されました 
rosrun rqt_tf_tree rqt_tf_treeが ros2に変更されました run tf2_tools view_frames.py
rviz がrviz2に変更されました

4. 新規インストール

私のインストール環境: lsb_release -a 

使用可能な LSB モジュールはありません。
ディストリビューター ID: Ubuntu
説明: Ubuntu 18.04.6 LTS
リリース: 18.04
コード名: bionic 

ROS1 から ROS2 へのいくつかの変更への道が開かれました。次に、より早く慣れることができるように、新しい ROS2 をインストールします。

4.1. ROS2のインストール

まずソフトウェア リポジトリを更新します

sudo apt update
sudo apt upgrade

ROS2 をインストールします。フルバージョンをインストールすることをお勧めします

sudo apt install ros-foxy-desktop

フルバージョンをインストールしたくない場合は、コア ソフトウェア パッケージのみをインストールできます: sudo apt install ros-foxy-ros-base.
予想通り、何か問題が発生し、エラーは次のとおりです。

E: パッケージ ros-foxy-desktop が見つかりません

したがって、インストールするソフトウェアのインストール ソースを指定する必要があります。

sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

ここでは、書き込みを終了するか、変数値を取得できます。

dpkg --print-architecture、ネイティブ: amd64

 lsb_release -c は、このマシンの独自のバージョンを指定できます: コード名: bionic

書き込み後、ソースの内容を確認します: cat /etc/apt/sources.list.d/ros2-latest.list

deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu bionic main

次に、再度更新します: sudo apt update

こちらのUbuntu18版ではfoxyがインストールできないようです?オンラインで成功したインストールはたくさんありますか? この ROS2 は Ubuntu バージョンと対応していないはずだと私も考えているので、当分の間は疑わしいので、Dashingをインストールして体験してみましょう:

sudo apt install ros-dashing-desktop

インストール後、環境を構成して ~/.bashrcに追加すると、毎回ソースを作成する必要がなくなります。

echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc

以前に ROS1 をインストールしたことがあるので、ここに判断を書き込むことができます。次の内容を~/.bashrcファイルに追加します。

echo "ROS melodic (1) or ROS2 dashing (2)?"
read edition
if [ "$edition" -eq "1" ];then
  source /opt/ros/melodic/setup.bash
  echo using ros melodic
else
  source /opt/ros/dashing/setup.bash
  echo using ros2 dashing
fi

このようにして、ターミナルを開くときに、ROS1 または ROS2 を選択できます。ROS1 を開始するには 1 を入力し、ROS2 を開始するには 2 を入力します。ROS2 を開始すると
、次の警告が表示されます。

ROS_DISTRO は以前は「melodic」に設定されていました。異なるディストリビューションからのパスが混在しない環境であることを確認してください。

翻訳すると、ROS_DISTRO は以前は「メロディック」に設定されていました。異なるディストリビューションからのパスが混在しない環境であることを確認してください。.bashrc内の/opt/ros/melodic/setup.bash
をコメントアウトするだけです。 

Tab キーをダブルクリックしてもプロンプトが表示されない場合は、コマンド補完パッケージをインストールする必要があります: sudo apt install python3-argcomplete 

次に、次のように入力してテストします。 

ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener

ROS2 をインストールした後、以下に示すようにテストは OK でした。

 開発に必要ないくつかの一般的なパッケージは、必要に応じてインストールできます。 

sudo apt install ros-dashing-turtlesim
sudo apt install ros-dashing-xacro
sudo apt install python3-pip
sudo apt install python3-colcon-common-extensions
sudo apt install python3-vcstool
sudo apt-get install ros-dashing-joint-state-publisher-gui

#卸载ROS2
sudo apt remove ros-dashing-* && sudo apt autoremove

4.2. Gazebo のインストール

Gazebo は、一般的に使用される強力なシミュレーション プラットフォームであり、インストールは次のとおりです。 

sudo apt install ros-dashing-gazebo-ros-pkgs

ナビゲーション関連のパッケージ

sudo apt install ros-dashing-cartographer
sudo apt install ros-dashing-cartographer-ros
sudo apt install ros-dashing-navigation2
sudo apt install ros-dashing-nav2-bringup 
sudo apt install ros-dashing-gazebo-ros2-control
sudo apt install ros-dashing-ros2-control ros-dashing-ros2-controllers

 4.3. コンパイル

ROS1 と比較して、ROS2 ではコンパイルプロセスも大きく変更されていますが、ROS1 は将来徐々に廃止される予定ですが、引き続き ROS2 の使用方法をマスターして
ワークスペースを作成することに重点を置きます。

mkdir -p ~/myRobotDog_ws/src
cd ~/myRobotDog_ws/src

パッケージを作成します(ROS1とは異なります)

ros2 pkg create --build-type ament_cmake mypkg --node-name mynode

次のディレクトリとファイルもmypkgパッケージの下に生成されます

CMakeLists.txt  にはpackage.xml   srcが含まれています  

次に、src内の C++ ファイルであるノードmynodeを見てみましょう: gedit mynode.cpp

#include <cstdio>

int main(int argc, char ** argv)
{
  (void) argc;
  (void) argv;

  printf("hello world mypkg package\n");
  return 0;
}

次のステップはコンパイルです。コンパイルする前に、colconコンパイラがインストールされていることを確認してください。

​​​​​​​sudo apt install python3-colcon-common-extensions
cd ~/myRobotDog_ws
colcon build --symlink-install
echo 'source ~/myRobotDog_ws/install/setup.bash' >> ~/.bashrc

それからテストしてください

ros2 run mypkg mynode
#hello world mypkg package

ノードを追加したい場合は、CMakeLists.txtファイルを変更するだけです。

cd ~/myRobotDog_ws/src/mypkg
gedit CMakeLists.txt

次のように追加するだけです。

add_executable(mynode src/mynode.cpp)
target_include_directories(mynode PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>)

install(TARGETS mynode
  DESTINATION lib/${PROJECT_NAME})

Colconの一般的なパラメータのいくつかは次のとおり

--symlink-install : シンボリック リンクを使用します。たとえば、ダイナミック リンク ライブラリは、インストール ディレクトリ内のシンボリック リンクを使用して、ビルド ディレクトリに生成されたライブラリ ファイル (*.so など) を指します。このオプションがない場合、このライブラリ ファイルは両方のディレクトリにあります。
--packages-select : mypkg パッケージを個別にコンパイルするなど、指定されたパッケージのみをコンパイルします。colcon build --packages-select mypkg
--packages-ignore : 指定されたパッケージを無視します。使用法は上記と同じです
--Continue- on-error : コンパイル エラーが発生した場合は、他のモジュールのコンパイルを続行します
--cmake-args、--ament-cmake-args、--catkin-cmake-args : パラメータを対応するパッケージに渡します

最後に、ROS2 はファイルを変更した後、 colcon buildを再コンパイルする必要があることに注意してください。 

詳細については、https: //docs.ros.org/en/dashing/ Installation/Ubuntu-Install-Debians.html を参照してください。 

5.Pythonをコンパイルする 

Python のコンパイルでは、いくつかの設定ファイルの変更のほかに、注意する必要がある点がいくつかあります。

mkdir -p ~/mypy_ws/src
cd ~/mypy_ws/src
ros2 pkg create --build-type ament_python my_py
cd ~/mypy_ws/src/my_py/my_py
touch PYNode.py
gedit PYNode.py
#!/usr/bin/env python3

import rclpy
from rclpy.node import Node

def main(args=None):
    rclpy.init(args=args)
    node = Node("ChyiChin_Node")
    node.get_logger().info("Python TEST")
    rclpy.spin(node)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

実行可能権限を追加します: chmod +x PYNode.py

cd ~/mypy_ws
colcon build --packages-select my_py
source install/setup.bash

ChyiChin_Node ノードを実行して、ログ情報が正しく出力されるかどうかを確認します。

ros2 run my_py ChyiChin_Node
[INFO] [ChyiChin_Node]: Python TEST

OK、問題ありません。C++ と Python のコンパイルは問題なく完了しました。次に、コンパイルプロセス中に発生したいくつかのエラーとその対処方法を掲載します。

6. コンパイルエラー

6.1、setup.cfg

ダッシュで区切られた「script-dir」の使用は将来のバージョンではサポートされなくなります

将来のバージョンではダッシュはサポートされなくなるため、ダッシュをアンダースコアに変更する必要があります。

cd ~/mypy_ws/src/my_py
gedit setup.cfg

内部のscript-dirinstall-scripts をscript_dirinstall_scriptsに変更します。

6.2、セットアップツールのバージョン

SetuptoolsDeprecationWarning: setup.py インストールは非推奨になりました。build や pip などの標準ベースのツールを使用します。
  setuptools.Setuptools非推奨警告、

setuptoolsのバージョンを確認する

python3

import setuptools
print(setuptools.__version__)
59.6.0

バージョンが新しすぎるため、下位バージョンをインストールしてください。

pip3 install setuptools==58.2.0 -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com

6.3、実行可能ファイルが見つかりません

ros2 が Python ファイルを実行すると、「実行可能ファイルが見つかりません 」というエラーが報告されます。

以前の mypkg パッケージでは、すべての実行可能プログラムをクエリできます: ros2 pkg executables mypkg

mypkg mynode
mypkg mynode1 

次に、 Python のmy_pyパッケージでは、クエリは空です: ros2 pkg executables my_py 

解決策: コンパイルする前に、 setup.pyを変更して、Python ファイルへのパスであるエントリ ポイントの場所を通知する 必要があります。

cd ~/mypy_ws/src/my_py
gedit setup.py

entry_points={
        'console_scripts': ["ChyiChin_Node=my_py.PYNode:main"],
    },

このうち、ChyiChin_Nodeはノード名、my_py.PYNodeはPythonファイルパス(パッケージ名.ファイル名)に、メインエントリ関数を追加します

6.4、ランタイムエラー

RuntimeError: 'distutils.core.setup()' は呼び出されませんでした -- おそらく 'setup.py' は Distutils セットアップ スクリプトではありませんか? 

翻訳は次のとおりです: RuntimeError: 'Distutils .core.setup()' は決して呼び出されません - おそらく 'setup.py' は Distutils インストール スクリプトではありませんか?
これは実行時エラーであるため、rclpy依存関係が必要であるため、パッケージを作成するときにros2 pkg
create my_py --build-type ament_python --dependency rclpy
最後に、Python を実行して作成されたノードを見てみましょう。

ros2 run my_pkg ChyiChin_Node

以下のスクリーンショット:

7. まとめ

ROS2 の出現により、ROS は真の分散型オペレーティング システムになりました。これがその主な機能です。ROS1 では、MASTER 管理ノードであるroscore を最初に起動する必要があることがわかっているためです。このノードがクラッシュすると、ROS 全体がクラッシュします。システムが崩壊するでしょう。これは悪い設計です。さらに、データ配信サービス通信プロトコル (DDS) が
導入され、ゼロコピー方式を使用してメッセージを送信します。これにより、メモリと送信が占有するリソースが大幅に節約され、通信のリアルタイム性が向上します。 

おすすめ

転載: blog.csdn.net/weixin_41896770/article/details/134545199