在机器人的控制器中,通常定制/cmd_vel消息以执行上层的运动控制命令。发布/odom消息以给上层提供准确的机器人运动状态。
param 同getParam 但会提供一个默认值,当找不到对应的参数项时。
而getParam 根据key 获取对应的string value,然后作为出参返回。
对于Command只是提供了一个命令集,约定只是命令ID这样的内容,而这些也是串口数据的格式,底层单板依据此来判断命令。具体调用仍然在arduqbo_driver中实现。
nh.param("controllers/"+name+"/topic", topic, std::string("cmd_vel"));
nh.param("controllers/"+name+"/odom_topic", odom_topic, std::string("odom"));
nh.param("controllers/"+name+"/rate", rate_, 15.0);
nh.param("controllers/"+name+"/tf_odom_broadcast", is_odom_broadcast_enabled_, true);
twist_sub_ = nh.subscribe<geometry_msgs::Twist>(topic, 1, &CBaseController::twistCallback, this);
odom_pub_ = nh.advertise<nav_msgs::Odometry>(odom_topic, 1);
stall_unlock_service_ = nh.advertiseService("unlock_motors_stall", &CBaseController::unlockStall,this);
base_stop_service_ = nh.advertiseService("stop_base", &CBaseController::baseStopService,this);
then_=ros::Time::now();
timer_=nh.createTimer(ros::Duration(1/rate_),&CBaseController::timerCallback,this);
那么,里程数据是如何发布出去的呢?
在timerCallback中,首先从物理传感器驱动获取真实的几何信息,然后再发布出

本文介绍ROS机器人控制器如何从物理传感器获取里程数据,并通过定时器回调函数发布到nav_msgs::Odometry话题。在CBaseController类中,通过device_p_->getOdometry()方法从qboarduqbo_driver驱动获取实际位置信息,然后更新并发布odom消息。同时,如果参数设置允许,还会使用odom_broadcaster_广播tf变换。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



