Python 实现驱动AI机器人
1.如果尚未启动wsl-ros环境,请运行windows
“开始”菜单中的wsl-ros快捷方式。这将打开一个终端应用程序和一个ubuntu终端实例。我们将这个终端实例称为终端1。
在终端中输入以下命令,在一个空世界中启动turtlebot3华夫饼的模拟:
[terminal 1] $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
一个露台模拟窗口应该打开,在里面你会看到一个turtlebot3华夫饼干
2.在新终端实例中,输入以下命令:
[terminal 2] $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
总结:
到目前为止,您已经使用roslaunch命令启动了两个单独的ros应用程序。roslaunch
是启动ros项目的一种方式。正如您应该从上述示例中观察到的,我们以以下方式使用此命令:
roslaunch{package name}{launch file}
该命令将两个参数作为输入:{package name}是包含我们想要执行的功能的ros包的名称,{launch file}是该包中的一个文件,它确切地告诉ros我们想要启动的包中的功能。
3.roscd是一个ros命令,它允许我们导航到系统上安装的任何ros包的目录,而无需我们事先知道该包的路径。
打开一个新的终端实例(terminal 3),并使用roscd命令导航到linux文件系统上的turtlebot3_teleop包目录:
4.in terminal 3 enter $ cd ~ to go back to your home directory
[terminal 3] $ roscd turtlebot3_teleop [terminal 3] $ pwd [terminal 3] $ ls [terminal 3] $ ls -f [terminal 3] $ cat turtlebot3_teleop_key.launch
包的启动文件通常位于包目录中的启动文件夹中。您应该注意到上面ls命令的输出中有一个启动文件夹。
cd是一个linux命令,允许我们更改终端当前所在的目录。用这个导航到turtlebot3_teleop package launch文件夹,然后再次使用ls查看其中的内容。在这个文件夹中,你会看到turtlebot3_teleop_
钥匙。
cat是一个linux命令,我们可以使用它在终端中显示文件的内容。
pkg:包含我们想要启动的功能的ros包的名称。
type:我们希望在该包中执行的脚本(即ros节点)的全名(包括文件扩展名,如果有)。
名称:我们想给ros节点一个描述性名称,用于在ros网络上注册。
输出:节点的任何输出将被打印的位置(输出将被打印到终端窗口的屏幕,或输出将被打印到日志文件的日志)。
ros节点是执行特定机器人任务和操作的可执行程序,如我们在上述示例中看到的远程(或“远程操作”)控制。
5.使用以下命令查看哪些节点当前处于活动状态:
[terminal 3] $ rosnode list
我们可以通过使用rqt_图形包中的rqt_图形节点来可视化活动节点之间的连接。我们可以使用rosrun直接启动此节点(您可能会收到一些错误消息,但不要担心):
[terminal 3] $ rosrun rqt_graph rqt_graph
6.探索ros主题和信息
通过使用rostopic ros命令,我们可以了解关于/cmd_-vel主题的更多信息。
在新的终端实例(终端4)中,键入以下内容:
[terminal 4] $ rostopic info /cmd_vel
内容的输出:
type: geometry_msgs/twist publishers: * /turtlebot3_teleop_keyboard (http://localhost:#####/) subscribers: * /gazebo (http://localhost:#####/)
[terminal 4] $ rosmsg info geometry_msgs/twist
要完成此操作,请在仍在运行的任何进程(终端1、2和3)中输入ctrl+c,关闭所有活动的终端进程。因此,相关的gazebo和rqt_图形窗口也应关闭。
一两分钟后,您将用python创建一些简单的发布者和订阅者节点,并在它们之间发送消息。正如我们之前了解到的,ros应用程序应该包含在包中,因此我们需要创建一个包,以便开始创建我们自己的ros节点。
ros提供了一个工具来创建一个新的ros包,并确保所有基本元素都存在:catkin_create_pkg
。
当我们创建和使用自己的ros包时,在特定的文件系统位置工作非常重要,这样ros就可以适当地访问和构建所有内容。这些空间被称为“catkin工作空间”,其中一个已经在wsl-ros环境中创建:称为catkin_ws
。
#!/usr/bin/env python3 # a simple ros publisher node in python import rospy from std_msgs.msg import string class publisher(): def __init__(self): self.node_name = "simple_publisher" topic_name = "chatter" self.pub = rospy.publisher(topic_name, string, queue_size=10) rospy.init_node(self.node_name, anonymous=true) self.rate = rospy.rate(10) # hz self.ctrl_c = false rospy.on_shutdown(self.shutdownhook) rospy.loginfo(f"the '{self.node_name}' node is active...") def shutdownhook(self): print(f"stopping the '{self.node_name}' node at: {rospy.get_time()}") self.ctrl_c = true def main_loop(self): while not self.ctrl_c: publisher_message = f"rospy time is: {rospy.get_time()}" self.pub.publish(publisher_message) self.rate.sleep() if __name__ == '__main__': publisher_instance = publisher() try: publisher_instance.main_loop() except rospy.rosinterruptexception: pass
到此这篇关于python 实现驱动ai机器人的文章就介绍到这了,更多相关python 驱动ai机器人内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: javascript中的内存机制
下一篇: Python的索引与切片原来该这样理解