|
@@ -1,35 +1,82 @@
|
|
|
#include <ros/ros.h>
|
|
|
#include <geometry_msgs/Twist.h>
|
|
|
+#include <dynamic_reconfigure/server.h>
|
|
|
+#include <ros_test_pkg/dynamicConfig.h>
|
|
|
+
|
|
|
using namespace std;
|
|
|
|
|
|
+string cmd_topic = "/turtle1/cmd_vel";
|
|
|
+int loop_rate = 1;
|
|
|
+double linear_x = 1.0;
|
|
|
+double linear_y = 1.0;
|
|
|
+double angular_z = 1.0;
|
|
|
+bool move_flag = true;
|
|
|
+int log_level = 0;
|
|
|
+
|
|
|
+void dynamic_callback(ros_test_pkg::dynamicConfig &config)
|
|
|
+{
|
|
|
+ ROS_INFO("Reconfigure Request:%s %d %f %f %s %d",
|
|
|
+ config.cmd_topic.c_str(),
|
|
|
+ config.cmd_pub_rate,
|
|
|
+ config.linear_x,
|
|
|
+ config.angular_z,
|
|
|
+ config.move_flag?"True":"False",
|
|
|
+ config.log_level);
|
|
|
+
|
|
|
+ cmd_topic = config.cmd_topic;
|
|
|
+ loop_rate = config.cmd_pub_rate;
|
|
|
+ linear_x = config.linear_x;
|
|
|
+ angular_z = config.angular_z;
|
|
|
+ move_flag = config.move_flag;
|
|
|
+ log_level = config.log_level;
|
|
|
+}
|
|
|
+
|
|
|
int main(int argc, char **argv)
|
|
|
{
|
|
|
ros::init(argc, argv, "turtlesim_control_move");
|
|
|
ros::NodeHandle handle;
|
|
|
|
|
|
- string cmd_topic = "/turtle1/cmd_vel";
|
|
|
- double linear_x = 1.0;
|
|
|
- double linear_y = 1.0;
|
|
|
- double angular_z = 1.0;
|
|
|
- int loop_rate = 1;
|
|
|
-
|
|
|
ros::param::get("~cmd_topic", cmd_topic);
|
|
|
ros::param::get("~linear_x", linear_x);
|
|
|
ros::param::get("~linear_y", linear_y);
|
|
|
ros::param::get("~angular_z", angular_z);
|
|
|
ros::param::get("~loop_rate", loop_rate);
|
|
|
|
|
|
- ros::Publisher cmdVelPub = handle.advertise<geometry_msgs::Twist>(cmd_topic, 1);
|
|
|
+ dynamic_reconfigure::Server<ros_test_pkg::dynamicConfig> server;
|
|
|
+ dynamic_reconfigure::Server<ros_test_pkg::dynamicConfig>::CallbackType callback;
|
|
|
+
|
|
|
+ callback = boost::bind(&dynamic_callback, _1);
|
|
|
+ server.setCallback(callback);
|
|
|
+
|
|
|
+ ros::Publisher cmdVelPub;
|
|
|
geometry_msgs::Twist speed;
|
|
|
|
|
|
- ros::Rate rate(loop_rate);
|
|
|
while(ros::ok())
|
|
|
{
|
|
|
- speed.linear.x = linear_x;
|
|
|
- speed.linear.y = linear_y;
|
|
|
- speed.angular.z = angular_z;
|
|
|
- cmdVelPub.publish(speed);
|
|
|
+ cmdVelPub = handle.advertise<geometry_msgs::Twist>(cmd_topic, 1);
|
|
|
+ ros::Rate rate(loop_rate);
|
|
|
+ if(move_flag)
|
|
|
+ {
|
|
|
+ speed.linear.x = linear_x;
|
|
|
+ speed.linear.y = linear_y;
|
|
|
+ speed.angular.z = angular_z;
|
|
|
+ cmdVelPub.publish(speed);
|
|
|
|
|
|
+ switch(log_level)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ ROS_INFO("Log level:INFO, cmd_pub_rate:%d", loop_rate);
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ ROS_WARN("Log level:WARN, cmd_pub_rate:%d", loop_rate);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ ROS_ERROR("Log level:ERROR, cmd_pub_rate:%d", loop_rate);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
ros::spinOnce();
|
|
|
rate.sleep();
|
|
|
}
|