#はじめに
ROS2がwindowsでも動くと聞いて、手持ちのwindowsPC(surface pro3)にインストールしようとしたらハマったところがあったので共有化します。
#インストール手順
公式が非常に分かりやすい。
この記事も参考になります。
#詰まったところ
サンプルプログラムで
ros2 run demo_nodes_cpp talker
を実行したところ、
"failed to create process"
と言われてしまった。
いろいろ調べた結果、ROS2のフォルダの
ros2_dashing/Scripts
の中にあるpythonスクリプトの一行目のShebangが
#!C:\Python37\python.exe
となっていて、実際のpython実行ファイルがある場所ではなかった。
なので、全部で19個あるpyファイルを実際にpython.exeがある場所(*1)のパスに書き換えて実行したところ、うまく動いた。
ところが、今度は次のサンプルプログラムで、
ros2 run demo_nodes_py listener
と実行したところ、また
"failed to create process"
と言われてしまった。
小一時間調査した結果、上記同様にスクリプトの一行目を書き換えるとうまく動いた。書き換えたのはros2_dashing/Libフォルダ内の下記フォルダのpyスクリプト。
- demo_nodes_py
- examples_rclpy_executors
- examples_rclpy_minimal_action_client
- examples_rclpy_minimal_action_server
- examples_rclpy_minimal_client
- examples_rclpy_minimal_publisher
- examples_rclpy_minimal_service
- examples_rclpy_minimal_subscriber
- quality_of_service_demo_py
#作業に使用したコード
下記コードはfor_replaceフォルダに一度pyスクリプトをコピーしてから書き換えることを想定したコードです。
<<>>の中はご自身のpython.exeのパスを記入ください。
# -*- coding: utf-8 -*-
import glob
file_name_list = glob.glob("for_replace/*.py")
first_line_list = []
for file_name in file_name_list:
with open(file_name) as f:
line_list = f.readlines()
line = line_list[0]
first_line_list.append(line)
print(first_line_list)#'#!c:\\python37\\python.exe\n' が並んだリスト
replace_shebang = "#!<<python.exeのあるパス>>\n"
first_line_list2=[]
for file_name in file_name_list:
with open(file_name) as f:
l = f.readlines()
#insert new_name in first line
l.insert(0,replace_shebang)
#delete seconde line
del l[1]
##ファイル書き込み
with open(file_name, mode='w') as f:
f.writelines(l)
#書き込んだファイルの中身確認
with open(file_name) as f:
temp = f.readlines()
line = temp[0]
first_line_list2.append(line)
print(first_line_list2)
*1 スタートメニュからpythonを探して、右クリックで「ファイルの場所を開く」としてから、もう一度右クリックで「ファイルの場所を開く」とすると、大元のexeファイルの場所がわかる