建立package
cd ~ /ros2_ws/src
mkdir karl_demo_py
cd karl_demo_py
|
建立subscriber 程式
import rclpy
import matplotlib.pyplot as plt
from karl_demo.msg import Custom
g_node = None
def callback(msg):
plt.clf()
plt.plot(msg.data)
plt.draw()
plt.pause( 0.001 )
def main(args = None )
global g_node
rclpy.init(args = args)
g_node = rclpy.create_node( 'listener' )
sub = g_node.create_subscription(Custom, 'test' , callback)
sub
while rclpy.ok():
rclpy.spin_once(g_node)
g_node.destroy_node()
rclpy.shutdown()
if __name__ = = '__main__' :
plt.ion()
plt.show()
main()
|
編輯package.xml 、setup.py 及setup.cfg
沒有這些檔案的話,python 檔案無法link 到ROS 2
setup.cfg 則是幫助把檔案放到worspace/lib/karl_demo_py 內,這樣ROS 2 指令才會找到這個檔案才能執行
cd ~ /ros2_ws/src/karl_demo_py
vim package.xml
vim setup.py
vim setup.cfg
|
<? xml version = "1.0" ?>
< package format = "2" >
< name >examples_rclpy_minimal_subscriber</ name >
< version >0.4.0</ version >
< description >Examples of minimal subscribers using rclpy.</ description >
< maintainer email = "mikael@osrfoundation.org" >Mikael Arguedas</ maintainer >
< license >Apache License 2.0</ license >
< exec_depend >rclpy</ exec_depend >
< exec_depend >karl_demo</ exec_depend >
< export >
< build_type >ament_python</ build_type >
</ export >
</ package >
|
以下註解的地方,是可以省略的部分
from setuptools import setup
package_name = 'karl_demo_py'
setup(
name = package_name,
packages = [],
py_modules = [ 'listener' ,],
install_requires = [ 'setuptools' ],
entry_points = {
'console_scripts' : [
'subscriber_old_school = subscriber_old_school:main' ,
'subscriber_lambda = subscriber_lambda:main' ,
'subscriber_member_function = subscriber_member_function:main' ,
],
},
)
|
[develop]
script- dir =$base /lib/karl_demo_py
[ install ]
script- dir =$base /lib/karl_demo_py
|
最後執行前,記得安裝python 套件
在ROS ,matplotlib 有裝在ROS 的目錄內,所以可以直接用
但在ROS 2 沒有
sudo apt-get install python3-matplotlib
cd ~ /ros2_ws
source install /setup . bash
ros2 run karl_demo_py listener.py
|
沒有留言:
張貼留言