ros2起動ファイルを実行するPythonファイルがあります。
process = subprocess.Popen(["/opt/ros/humble/bin/ros2", "launch", "blaunch_pkg", "on_startup.launch.py"])
process = subprocess.Popen(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
print("STDOUT OF ROS:", stdout.decode())
print("STDERR OF ROS:", stderr.decode())
process.wait()
exit()
これは私のサービスです。
[Unit]
Description=My Python Script
After=network.target
[Service]
Environment=PYTHONPATH=(my python path)
Enviroment=AMENT_PREFIX_PATH=(my ament prefix path)
Enviroment=CMAKE_PREFIX_PATH=(my ament cmake prefix path)
ExecStart=/bin/python3.10 (my path to service_startup.py)
WorkingDirectory= (my working directory)
StandardOutput=append:/var/log/my_script.log
StandardError=inherit
Restart=always
User=tubo
[Install]
WantedBy=multi-user.target
私のエラーログは一貫性がありません。変更するたびに、他のエラーログが表示されます(たとえば、使用しているPythonパスを変更した場合など)。現在の構成では、サービスは有効になっていますが、時にはエラーなしで実行されますが、起動ファイルは実際には実行されず、時には次のエラーが表示されます。
OSError: Environment variable 'AMENT_PREFIX_PATH' is not set or empty
STDOUT OF ROS:
STDERR OF ROS:
STDOUT OF ROS:
STDERR OF ROS: