@!/usr/bin/env: 当我尝试使用 ros 节点时没有这样的文件或目录

@!/usr/bin/env: No such file or directory when i try to use ros nodes

我试着写了一个订阅者和发布者节点;但是当我尝试使用 rosrun 运行 发布者时,它给了我一个错误:@!/usr/bin/env: No such file or directory

这里是 error 和相应的代码(我做了 chmod +x):

发布者节点:

@!/usr/bin/env python

import rospy
from std_msgs.msg import String

def publish_it():
    pub = rospy.Publisher("first_msgs",String , queue_size = 10)
    rospy.init_node("publisher_node",anonymous = True)
    x = 1
    z = 10
    rate = rospy.Rate(z) #1/z sec delay

    while not rospy.is_shutdown():
        x += 1
        if x == 100:
            x = 0

        msg = "Hi this is our first message . times:" + str(x)
        rospy.loginfo(msg)
        pub.publish(msg)
        rate.sleep()

if __name__ == "__main__":
    try:
        publish_it()
    except rospy.ROSInterruptException:
        pass

订阅者节点:

@!/usr/bin/env python

import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(data.data)

def iSeeIt():
    rospy.init_node("subscriber_node",anonymous = True)
    rospy.Subscriber("first_msgs",String,callback)
    rospy.spin()

if __name__ == "__main__":
    iSeeIt()

您误用了 shebang 结构。而不是使用 @! 你必须写 #!,然后是应该应用于你的代码的解释器。此外,该行(即 #!/usr/bin/env python)需要位于脚本的第一行。因此,您的订阅者节点的头部应如下所示:

#!/usr/bin/env python
# subscriber node

import rospy
from std_msgs.msg import String
...

rospy init 必须放在 publisher 之前,你的代码 shebang 应该如下:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def publish_it():
    rospy.init_node("publisher_node", anonymous=True)
    pub = rospy.Publisher("first_msgs", String, queue_size=10)
    x = 1
    z = 10
    rate = rospy.Rate(z)
    ....

[注意]:

  • 确保 Python 脚本可执行 (chmod +x mypythonscript.py)
  • 如果您在 ROS 中使用 Python3,请改用此 shebang(#!/usr/bin/python3#!/usr/bin/env python3)。

我通过更改解决了

@!/usr/bin/env python

#!/usr/bin/python2.7

我正在使用 python3,我不太了解它是如何工作的,但它确实有效。

sudo apt-get install python-is-python3

写下这段代码就能解决你的问题