测试的是从参数文件获取参数
先看python 文件,test.py文件 从 test.yaml 参数文件获取参数,
测试的变量为 base_frame 和 base_frame1,分别获取的同一个参数。代码如下:
#test.py
import rospy
from geometry_msgs.msg import Twist
class ArduinoROS():
def __init__(self):
# 唯一的节点名 日志级别为DEBUG 等级排序为 DEBUG INFO WARN ERROR FATAL
rospy.init_node('Arduino', log_level=rospy.DEBUG)
# self. 变量, 从 .yaml 获取参数
self.base_frame = rospy.get_param("~base_frame", 'base_link')
self.base_frame1 = rospy.get_param("base_frame", 'base_link')
rospy.on_shutdown(self.shutdown)
while not rospy.is_shutdown():
print "param : " + self.base_frame + " " + self.base_frame1
rospy.sleep(1)
def shutdown():
print "shut down node..."
if __name__ == '__main__':
myArduino = ArduinoROS()
# test.yaml
base_frame: base_footprint
测试结果在最后,
然后再看C++文件,test1.cpp 文件从 test1.yaml 参数文件获取参数。
测试变量是 port 和 cfg_baud_rate_ ,获取不同的参数,代码如下:
// test1.cpp
using namespace std;
int main(int argc, char **argv)
{
ros::init(argc, argv, "test1");
ros::NodeHandle nh;
serial::Serial ser;
std::string port;
int cfg_baud_rate_ = 48500;
std::string imu_frame_id;
nh.param<std::string>("/test1/port", port, "/dev/tty123");
nh.param<int>("/test1/imu_baudrate", cfg_baud_rate_, 9600);
nh.param<std::string>("/test1/imu_frame_id", imu_frame_id, "imu_base");
ros::Rate r(1);
while (ros::ok())
{
std::cout << "port : " << port << " ,rate : " << cfg_baud_rate_
<< " ,frame : " << imu_frame_id << std::endl;
r.sleep();
}
return 0;
}
# test1.yaml
port: /dev/ttyIMU
imu_baudrate: 115200
imu_freq: 100
angle_offset: 0.99
测试结果如下截图:
结论:
python 文件中,
rospy.get_param("~base_frame", "base_link") 会先获取 test.yaml参数文件里面的参数
rospy.get_param("base_frame", "base_link") 则会获取当前代码中的参数
C++文件中
nh.param<std::string>("/test1/port", port, "/dev/tty123"); 先获取test1.yaml文件里面的参数
nh.param<int>("/test1/imu_baudrate", cfg_baud_rate_, 9600); 先定义了参数,也会获取test1.yaml文件里面的参数。
后续有更多测试,再持续更新,先这样。。。