備忘録としてROS2humbleのconda環境での構築をします。
直接ビルドするより動きます。だいぶ楽です。
こちらを使ってGazebo ClassicとNavigation2とslam_toolboxが入れられます。
環境
- MacBook air m1 (2020) RAM 8GB
- MacOS 14.2 Sonoma
twitterでTaigaさんが宣伝されているros2_m1_nativeがありますが、そちらではなく、conda仮想環境で構築できるros2環境がありましたので共有します。
興味がある方はぜひこちらのビルドチャレンジもしてみてください!
Condaを使用してのROS2humbleの元ソースはこちらです。
こちらの記事の流れは
- brew導入
- Miniconda導入
- conda環境のセットアップ
- 必要パッケージの導入
- 注意点
となっております。
brew導入
こちらの指示に従ってください。
基本的にこちらに従ったらできます。
Versionによってコマンドが違う場合があるのでホームページをみて確認するようにしてください。
MiniConda導入
こちらのQuickStart部分のコマンドをターミナルに打ち込んで導入してください。
コマンドを載せておきます。
mkdir -p ~/miniconda3
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
Ros2 導入
Robostackさんのものを利用して導入することできます。
こちらのGetting Startedの指示に従って導入してください。
今現在
- ROS1 Noetic
- ROS2 Foxy
- ROS2 Galactic
- ROS2 Humble
が導入可能になっています。ここではHumbleについて解説します。他のバージョンは上記のサイトから説明をみてください。コマンドはこの通りです。
conda install mamba -c conda-forge
mamba init zsh
ここでターミナルを再起動
# Create a ros-humble desktop environment
# manba → conda
mamba create -n ros_env
mamba activate ros_env
# this adds the conda-forge channel to the new created environment configuration
conda config --env --add channels conda-forge
# and the robostack channel
conda config --env --add channels robostack-staging
# remove the defaults channel just in case, this might return an error if it is not in the list which is ok
conda config --env --remove channels defaults
# Install ros-noetic into the environment (ROS1)
mamba install ros-noetic-desktop
# Install ros-humble into the environment (ROS2)
mamba install ros-humble-desktop
Webページ上ではmanbaとなっていますが、そちらはcondaに変えて動かすようにしてください。manbaの場合デフォルトで導入されるPythonのバージョンが3.8となっていてこちらのパッケージの要件であるPython3.10の要件に満たないためエラーが発生してしまいます。
インストールが完了したらcondaを再起動してください。
condaのBase部分にros環境は入れないようにしてください。Pythonのversionやらライブラリやらの問題でおかしくなってしまうようです。
インストールが終わったらcondaの再起動をします。
conda deactivate
conda activate ros_env
ビルドツールやらなんやらを入れます。
conda install compilers cmake pkg-config make ninja colcon-common-extensions catkin_tools
これでRos2環境の導入は終わりです!
テスト
この環境ではsourceコマンドは絶対に使用しないでください。
pythonのバージョンやら依存関係が仮想環境外のものを引っ張ってきてしまいます。
rviz2とrqt_graphの起動確認をします。以下のコマンドで起動できます。
conda activate ros_env
rviz2
rqt_graph
Gazebo11&Navigation2&SlamToolbox
以下のコマンドで導入できます。
Robostackさんのパッケージから持ってきます。
turtlebot3のシュミレーションも持ってきます
brewでgazeboは導入しないでください!
ライブラリの参照エラーで動きません
conda install ros-humble-gazebo
conda install ros-humble-navigation2
conda install ros-humble-nav2-bringup
conda install ros-humble-slam-toolbox
conda install ros-humble-turtlebot3-gazebo
conda install ros-humble-turtlebot3-bringup
基本的にこちらで大丈夫なはずです。
パッケージが欠けていたらこちらからパッケージリストを確認してダウンロードしてください。
ここで起動確認をします。
Pythonの環境変数(PYTHONPATH)を直接指定しないと仮想環境外のPYTHONを指定してしまうので直接コマンドで宣言しましょう
PYTHONPATH /Users/kaya/miniconda/envs/ros_env/bin/python
ここはminicondaがダウンロードされているディレクトリからenvsフォルダーの入っている仮想環境のPYTHONのPATHを指定してください。
動作確認
こちらを別々のターミナルから導入してください。
export TURTLEBOT3_MODEL=waffle pi
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
現在正しくturtlebot3がシュミレーション上でスポーンされないため手動でスポーンさせています。
二箇所のファイルのpathを書き換えてください(ユーザー名は自分のユーザー名にしてください)
/Users/kaya/miniconda3/envs/ros2_humble/lib/gazebo_ros/spawn_entity.py -entity waffle_pi -file /Users/kaya/miniconda3/envs/ros_env/share/turtlebot3_gazebo/models/turtlebot3_waffle_pi/model.sdf -x -2.0 -y -0.5 -z 0.01 --ros-args
export TURTLEBOT3_MODEL=waffle pi
ros2 launch turtlebot3_bringup turtlebot3_state_publisher.launch.py
ros2 launch nav2_bringup navigation_launch.py
ros2 lanch slam_toolbox online_async_launch.py
tips
conda環境外のpythonを指定してしまう際は
find_package(Python3 3.10 EXACT REQUIRED COMPONENTS Interpreter Development)
をCmakeList.txtに追加するとconda環境のpythonを使用してくれます
※brewで導入しているpythonとcondaで導入しているpythonが異なっている場合は使うことができます。
追記 2023 2/11
macのクリーンインストールをする機会があったのでconda環境を再構築しました。その際にcmakeやrosdepをconda環境で導入するとconda環境で特にエラーなく使用することができました。エラーを出さないにはros2に関係する全てのパッケージをconda内のパッケージを使用するのが一番です。
追記 2024-09-06
ros2 jazzyとgazebo harmoricの導入はこのshellスクリプトで簡単にできるようになりました。こちらで、nativeビルド可能です。こちらは、brewパッケージを利用しているそうです。
最近でたGUIソフトのturtle_nestも問題なく動きました。
使用文献
それでは良いROS2ライフを!