目录
2.4 运行节点命令
一、提要
在ROS工程,不仅需要熟悉C++;而且需要python,python存在比C++还要好的优势,就是可以和人工智能,图像处理相结合。因此,本文专门举了一个python开发项目,以强调其重要流程。
二、用python实现ros节点
2.1 编写python文件的流程
在python脚本的第一行,第一列,必须是:
#! /usr/bin/env python
程序结构如下:
#! /usr/bin/env python
#0.设定pyhton解释器
import rospy
#1.导包
if __name__ == "__main__":
#2.编写函数入口
rospy.init_node("node_name")
#3.初始化节点
rospy.loginfo("hello hahaha")
#4.输出日志
2.2 编写CMakeLists.txt
在包生成指令:
catkin_create_pkg package_name roscpp rospy std-msgs ... ...
自动生成CMakeLists.txt;注意,在C++中,CMakeLists.txt生成依赖路径,需要追加Add,targate...;而python包不需要配置。
现象:当路径配置不对,CMakeLists.txt时用rosrun执行python会报错
2.3 产生错误类型
- /usr/bin/env python没有那个目录
原因:当前noetic版本使用的是python3,配置文件的作用是定位到python3的解释器
解决方法:
1.直接声明解释器为python3(不建议,有可能调用别人的代码不能直接修改)
2.通过软连接将python连接到python3
sudo ls /usr/bin/python3 /usr/bin/python
- 错误:import-im6.q16: not authorized `rospy’ @ error/constitute.c/WriteImage/1037.
解决方案:
在py文件前面添加#!/usr/bin/env python(编写后没#!/usr/bin/env python语句)#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。 当系统看到这一行的时候,首先会到env设置(环境变量)里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
2.4 运行节点命令
rosrun package-name node_name.py
三、小乌龟发布者开发案例
3.1 启动节点

3.2 对应的python代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from geometry_msgs.msg import Twist
def velocity_publisher():
rospy.init_node('velocity_publisher', anonymous=True)
turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
vel_msg = Twist()
vel_msg.linear.x = 0.5
vel_msg.angular.z = 0.2
turtle_vel_pub.publish(vel_msg)
rospy.loginfo("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]",
vel_msg.linear.x, vel_msg.angular.z)
rate.sleep()
if __name__ == '__main__':
try:
velocity_publisher()
except rospy.ROSInterruptException:
pass