ROS笔记:Python
@(ROS)[ROS|Python|rospy|环境变量]
记录并分析ROS的整个Python系统体系,争取搞清楚内部原理。同时深入学习Python编程。
1. rospy
Initialization and Shutdown
PYTHONPATH:
可使用 echo $PYTHONPATH 查看。
- 这个环境变量是bash下的python使用的,根据这个环境变量里的目录去搜索可被import的Python模块。
- 执行“$ source xxx/setup.bash”命令时自动将当前工作区的python包目录添加到这个环境变量中。
- 比如安装ros时执行过“$ source /opt/ros/indigo/setup.bash”,是在PYTHONPATH中添加了目录“/opt/ros/indigo/lib/python2.7/dist-packages”。
- 比如在自己工作区执行“$ source devel/setup.bash”,是在PYTHONPATH中添加了目录“{YOUR_CATKIN_WS}/devel/lib/python2.7/dist-packages”。
- ? 似乎setup.bash 和 setup.py 还有些关系 ?
init and shutdown
- rospy.init_node(name, anonymous=False, log_level=rospy.INFO, disable_signals=False)
- rospy.on_shutdown(h)这个函数为Ctrl+C这类shutdown事件创建一个退出之前的回调函数h,可以在程序退出之前做点什么。如果在h函数内Publish消息,不保证能成功发出消息!在rospy_tutorial示例中经过验证。
Messages
Message generation
- 自定义的msg和srv,在catkin_make时被自动生成为python模块源码,存储在“{YOUR_CATKIN_WS}/devel/lib/python2.7/dist-packages”目录下。
- msg文件和Python模块的对应关系是:package_name/msg/Foo.msg → package_name.msg.Foo
- srv文件和Python模块的对应关系是:package_name/srv/Bar.srv → package_name.srv.Bar
Message initialization
遵循Python的语法进行消息变量的实例化。有三种方式:无参数、顺序参数、关键字参数。No arguments
msg = std_msgs.msg.ColorRGBA( )
msg.b=255
msg.a=121In-order arguments (*args)
msg = std_msgs.msg.ColorRGBA(255.0, 255.0, 255.0, 128.0)
Keyword arguments (**kwds)
msg = std_msgs.msg.ColorRGBA(b=255)
三种方式各有利弊。官方推荐用keyword方式,能更好的适应message类型定义的变化。