@!/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
写下这段代码就能解决你的问题
我试着写了一个订阅者和发布者节点;但是当我尝试使用 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
写下这段代码就能解决你的问题