起動時にros2起動ファイルを実行する方法は?

起動時にros2起動ファイルを実行する方法は?

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: 

ベストアンサー1

おすすめ記事