建立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
|
沒有留言:
張貼留言