ROS進二階學習筆記(8)-- 關於rospy 和 parameters
阿新 • • 發佈:2019-01-25
ref:
ros進階學習筆記(24)-- 關於rospy 和 parameters
進行rospy程式設計時,需要用到parameter,但如何靈活用好它,還需進一步學習總結。
- 節點程式如何宣告parameter,是global, relative or private?
- 宣告完了如何通過外部為rosparam賦值?rosrun命令列怎麼賦?launch檔案怎麼賦?yaml怎麼賦?
引數Parameters - 概念
一個簡單的 python 程式碼 - 使用params
rosparam工具
arguments 賦值 mynode.py
http://answers.ros.org/question/64552/how-to-pass-arguments-to-python-node/
#!/usr/bin/env python import sys class MyNodeClass(): #Setup the node: def __init__(self): ... rospy.set_param('~n_naviLoop', sys.argv[1]) rospy.set_param('~layoverSecs', sys.argv[2]) print rospy.get_param("~n_naviLoop") print rospy.get_param("~layoverSecs") if __name__ == '__main__': if len(sys.argv)<3 : print "Usage: mynode.py arg1 arg2" else: try: MyNodeClass() rospy.spin() except rospy.ROSInterruptException: rospy.loginfo("my_node finished.")
命令列賦值上面程式碼中的 n_naviLoop:
$ rosrun mypkg my_node.py 3 5 //n_naviLoop = 3; layoverSecs = 5;
另一例:
Launch File + Arguments + CommandLine 賦值方式:
命令列賦值 neato_laser_publisher
原始碼片:
std::string port; int baud_rate; std::string frame_id; int firmware_number; std_msgs::UInt16 rpms; priv_nh.param("port", port, std::string("/dev/ttyUSB0")); priv_nh.param("baud_rate", baud_rate, 115200); priv_nh.param("frame_id", frame_id, std::string("neato_laser")); priv_nh.param("firmware_version", firmware_number, 1);
賦值命令:
rosrun xv_11_laser_driver neato_laser_publisher _port:=/dev/ttyUSB0 _firmware_version:=2
rosrun mypkg mynode.py _savepath:=/home/usrname/catkin_ws/src/mypkg/save_mm_dir
名稱空間與params
綜合賦值問題例項 - Usage
>> global_name params : python節點程式碼、yaml賦值param、launchFile賦值param、命令列賦值param、rosparam工具賦值param
>> relative_name params : python節點程式碼、yaml賦值param、launchFile賦值param、命令列賦值param、rosparam工具賦值param
>> private_name params : python節點程式碼、yaml賦值param、launchFile賦值param、命令列賦值param、rosparam工具賦值param
------
Private_name params + PythonCode + LaunchFile_Envalue: