Bagaimana cara menjalankan skrip python dalam paket ros?

Referensi. Memasang skrip dan modul Python

Struktur paket

├── my_pkg │   ├── setup.py │   ├── scripts │ │ └── executable_script └── src └── my_pkg ├── __init__.py └── my_module.py
  • Harus ada setup.py
  • Skrip yang dapat dieksekusi harus berada di bawah my_pkg/scripts atau my_pkg/nodes
  • Modul yang dapat diimpor harus ditempatkan di bawah src/my_pkg
  • Harus ada __init__.py di bawah src/my_pkg

mempersiapkan. py

## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup # fetch values from package.xml setup_args = generate_distutils_setup( packages=['my_pkg'], package_dir={'': 'src'}, requires=['std_msgs', 'rospy', 'rosbag', 'tf'] ) setup(**setup_args)_

Jangan pernah menjalankan ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup # fetch values from package.xml setup_args = generate_distutils_setup( packages=['my_pkg'], package_dir={'': 'src'}, requires=['std_msgs', 'rospy', 'rosbag', 'tf'] ) setup(**setup_args)_0. Hanya gunakan catkin untuk memasang modul

Menyusun

Lari

catkin_make

Kemudian

source catkin_ws/devel/setup.bash _

Sekarang Anda harus dapat mengimpor kode di ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup # fetch values from package.xml setup_args = generate_distutils_setup( packages=['my_pkg'], package_dir={'': 'src'}, requires=['std_msgs', 'rospy', 'rosbag', 'tf'] ) setup(**setup_args)1 dari lokasi lain di komputer Anda

Untuk penggunaan ROSPY yang lebih lanjut, disarankan untuk memiliki pengaturan yang tepat dalam Paket Catkin Anda untuk membangun dan mengkompilasi kode python Anda dengan pustaka, pesan, layanan, dan sumber daya apa pun yang mungkin Anda miliki dalam paket Anda

Prasyarat

Bagian ini mengharuskan catkin_ws diinisialisasi dan paket turtlebot_dabit dibuat
Silakan klik di sini untuk mempelajari cara menginisialisasi ruang kerja catkin

Untuk tutorial ini, kita akan menggunakan paket catkin turtlebot_dabit yang kita buat. Untuk mengaktifkan pembuatan file ROSPY dalam paket kami, kami perlu mengedit file CMakeLists. txt dan paket. xml untuk membangun dengan dependensi kami

# clone repo $ git clone //reinka@bitbucket.org/reinka/blog.git # change to the directory containing the setup script $ cd blog/start_ros_with_py # execute setup script $ . setup.sh_

$ cd /notebooks/workspace $ catkin_make $ . devel/setup.bash

/opt/ros/kinetic/bin/rosrun tutorial talker.py_

import os import signal from subprocess import Popen import time def run(cmd, stdout, stderr): """Run a given `cmd` in a subprocess, write logs to stdout / stderr. Parameters ---------- cmd : list of str Command to run. stdout : str or subprocess.PIPE object Destination of stdout output. stderr : str or subprocess.PIPE object Destination of stderr output. Returns ------- A subprocess.Popen instance. """ return Popen(cmd, stdout=stdout, stderr=stderr, shell=False, preexec_fn=os.setsid) def get_stdout_stderr(typ, datetime, dir): """Create stdout / stderr file paths.""" out = '%s_%s_stdout.log' % (datetime, typ) err = '%s_%s_stderr.log' % (datetime, typ) return os.path.join(dir, out), os.path.join(dir, err) def check_files_exist(files): """Check if given list of files exists. Parameters ---------- files : list of str Files to check for existence. Returns ------- None if all files exist. Else raises a ValueError. """ errors = [] for f in files: if not os.path.exists(f): errors.append(f) if errors: raise ValueError('File does not exist: %s' % errors) def start_process(cmd, typ, start_time, dpath_logs): """Start a subprocess with the given command `cmd`. Parameters ---------- cmd : list of str Command to run. typ : str Type of subprocess. This will be included in the logs' file names. start_time : str Datetime string, will be included in the logs' file names as well as the resulting bag's name. dpath_logs : Path to log direcotry. Returns ------- A subprocess.Popen instance. """ print('Starting', typ.upper()) stdout, stderr = get_stdout_stderr(typ, start_time, dpath_logs) with open(stdout, 'wb') as out, open(stderr, 'wb') as err: return run(cmd, stdout=out, stderr=err) def main(args): dpath_logs = args.dpath_logs script_node = args.script_node check_files_exist([script_node, dpath_logs]) start_time = time.strftime('%Y%m%d_%H%M%S') p_ros_core = start_process(['/opt/ros/kinetic/bin/roscore'], 'ros', start_time, dpath_logs) session_talker_node = start_process(['/bin/bash', script_node], 'talker_node', start_time, dpath_logs) # print pids in case something goes wrong print('PGID ROS: ', os.getpgid(p_ros_core.pid)) print('PGID TALKER NODE: ', os.getpgid(session_talker_node.pid)) time.sleep(5) print('Killing ROS and talker node.') os.killpg(os.getpgid(p_ros_core.pid), signal.SIGTERM) os.killpg(os.getpgid(session_talker_node.pid), signal.SIGTERM) if __name__ == '__main__': """Start ROS and the talker node each as a subprocess. Examples -------- python start_ros.py --script_node /notebooks/workspace/talker.sh \ -l /notebooks/workspace/src/scripts """ import argparse parser = argparse.ArgumentParser() parser.add_argument('--script_node', type=str, default='/notebooks/workspace/talker.sh') parser.add_argument('--dpath_logs', '-l', type=str, default='/notebooks/workspace/src/scripts') args = parser.parse_args() main(args)_

root@d70ea6b805fb:/notebooks/workspace $ python start_ros.py Starting ROS Starting CM PGID ROS: 674 PGID CM: 675 Killing ROS and talker node.

root@d70ea6b805fb:/notebooks/workspace $ ll src/scripts/ total 24 drwxrwxr-x 2 1001 1002 4096 Apr 6 21:48 ./ drwxr-xr-x 4 root root 4096 Apr 6 20:32 ../ -rw-r--r-- 1 root root 0 Apr 6 21:48 20190406_214805_ros_stderr.log -rw-r--r-- 1 root root 877 Apr 6 21:48 20190406_214805_ros_stdout.log -rw-r--r-- 1 root root 1348 Apr 6 21:48 20190406_214805_talker_node_stderr.log -rw-r--r-- 1 root root 1793 Apr 6 21:48 20190406_214805_talker_node_stdout.log -rwxrwxr-x 1 1001 1002 652 Apr 6 20:18 talker.py* root@d70ea6b805fb:/notebooks/workspace# tail -n 3 src/scripts/20190406_214805_talker_node_stdout.log [INFO] [1554587290.251599]: hello world [-2.2965705] [INFO] [1554587290.351432]: hello world [1.0656843] [INFO] [1554587290.451944]: hello world [-0.06105766]

Bagaimana cara menjalankan kode Python di ROS?

TL;DR
Sumber pengaturan ROS. pesta
(Opsional) tambahkan penyiapan ROS. pesta ke. bashrc
Buat direktori catkin_ws
Gunakan catkin_make untuk menginisialisasi
Sumber pengaturan. pesta ruang kerja catkin
(Opsional) tambahkan pengaturan ruang kerja catkin. pesta ke. bashrc
Periksa kembali apa yang ada di ROS_PACKAGE_PATH

Bagaimana cara mengimpor file Python ke ROS?

[ROS] Cara Mengimpor Modul Python Dari Paket Lain .
Buat paket yang berisi modul Python
Instal modul Python ini di lingkungan ROS Anda
Di paket lain, impor modul yang dibuat sebelumnya dan gunakan

Bagaimana cara menginstal modul Python di ROS?

Praktik ROS standar adalah menempatkan modul Python di bawah subdirektori src/your_package, menjadikan nama modul tingkat atas sama dengan paket Anda. Python mengharuskan direktori itu memiliki __init__. file py juga. Dengan rosbuild, dimungkinkan untuk menempatkan modul Python langsung di dalam src/

Bagaimana cara menjalankan a. kode py?

Cara paling dasar dan mudah untuk menjalankan skrip Python adalah dengan menggunakan perintah python. Anda perlu membuka baris perintah dan mengetik kata python diikuti dengan jalur ke file skrip Anda seperti ini. skrip_pertama python. py Halo Dunia. Kemudian Anda menekan tombol ENTER dari keyboard, dan hanya itu.

Postingan terbaru

LIHAT SEMUA