好的,下面是将 talker_listener_demo
从C++版本转换为Python版本的详细步骤和代码示例:
步骤 1:创建ROS包
在终端中执行以下命令:
catkin_create_pkg talker_listener_demo rospy std_msgs
这将在你的Catkin工作空间中创建一个名为 talker_listener_demo
的ROS包,并将 rospy
和 std_msgs
添加为依赖项。
步骤 2:创建Python脚本
在 src
文件夹下创建两个Python脚本:talker.py
和 listener.py
。
cd ~/catkin_ws/src/talker_listener_demo/src
touch talker.py
touch listener.py
步骤 3:编写Python节点代码
编辑 talker.py
和 listener.py
文件,编写发布者节点和订阅者节点的Python代码。
talker.py:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
rospy.init_node('talker', anonymous=True)
pub = rospy.Publisher('chatter', String, queue_size=10)
rate = rospy.Rate(1) # 1 Hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
listener.py:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo("I heard %s", data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
步骤 4:添加依赖项到package.xml(正常应该不需要修改)
在 talker_listener_demo
包的 package.xml
文件中添加以下内容:
<depend>rospy</depend>
<depend>std_msgs</depend>
步骤 5:更新CMakeLists.txt
在 talker_listener_demo
包的 CMakeLists.txt
文件中确保 rospy
和 std_msgs
被正确声明为依赖项。
find_package(catkin REQUIRED COMPONENTS
rospy
std_msgs
)
catkin_package(
CATKIN_DEPENDS rospy std_msgs
)
编译和运行
在Catkin工作空间中执行以下命令来编译ROS包:
cd ~/catkin_ws
catkin_make
也可以编译指定的
catkin_make --only-pkg-with-deps talker_listener_demo
然后,在两个不同的终端中分别运行发布者节点和订阅者节点:
执行前需要source一下
source ~/catkin_ws/devel/setup.bash
同时给python脚本添加执行权限
chmod +x talker.py
chmod +x listener.py
可以用下面命令查看包是否存在
rospack list|grep talker_listener_demo
有时python命令不行,需要将python命令指向python3做符号链接
sudo ln -s /usr/bin/python3 /usr/bin/python
# 首先需要启动Master
roscore
# Terminal 1: Run the talker node
rosrun talker_listener_demo talker.py
# Terminal 2: Run the listener node
rosrun talker_listener_demo listener.py
现在,你应该能够在终端中看到发布者节点发布的消息被订阅者节点成功接收并打印出来了。
提示:更多内容可以访问Clang’s Blog:https://www.clang.asia