# ROS学习:turtle控制

## turtle旋转
首先查看turtlesim里面的节点,使用rqt_graph查看节点流图

```c++
/*
* @Description: 这是一个让turtle旋转的ros publisher
* @Version:
* @Autor: copy
* @Date: 2022-03-12 17:28:55
* @LastEditors: copy
* @LastEditTime: 2022-03-12 17:42:00
*/
#include
#include "geometry_msgs/Twist.h"
#define PI 3.141592653
int main(int argc,char** argv)
{
ros::init(argc,argv,"turtle_twist");
ros::NodeHandle nh;
ros::Publisher Pub = nh.advervise("/turtle1/cmd_vel",10);
geometry_msgs::Twist twist;
twist.linear.x = 1;
twist.angular.z = PI;
ROS_INFO("\t现在的速度是%f,偏转速度是%f\t",twist.linear.x,twist.angular.z = PI);
ros::Rate rate(10);//10Hz
while(ros::OK)
{
Pub.publish(twist);
rate.sleep();
ros::spin(); //后面的代码不再执行ros::spinOnce();
}
return 0;
}
```
## 接收turtle位置
使用rostopic list 和rostopic info [topic]查看turtle的topic,
* 结果展示

## [跟踪turtle](https://github.com/Copy2000/turtle/tree/main/src/turtle_csdn)
使用rosservice list 和 rosservice info [service]查看turtle的service-----/Spawn。
* rospackage
* rospy
* roscpp
* std_msgs
* turtlesim
* tf
* turtle_tf_broadcaster.cpp

* turtle_tf_listener.cpp

* start_demo_with_listener.launch

* 结果展示
直接控制**无超调,但是反应慢,稳态误差大**
PID控制

**超调量大,但是反应迅速,稳态误差较小**
相关代码在我的github的[turtle库中](https://github.com/Copy2000/turtle)