Desde tortugas hasta serpientes... (suplemento)

El texto original es el siguiente:

Desde tortugas hasta serpientes...


Algunos consejos:

Memorízalo pero no lo entiendas, ¡olvídalo muy rápido! ! !

Caso de proyecto integral 1: implementación de Snake
1. ¿Qué puntos de conocimiento se deben utilizar para realizar este proyecto?
Total - puntos
2. ¿Cómo integrar (sintetizar) estos puntos de conocimiento para completar este caso?
3. ¿Cuál es el componente o ubicación de cada punto de conocimiento en este proyecto integral?
4. Esquema de diseño (borrador) para completar la concepción del proyecto?
5. ¿Programar la función de cada parte y probarla?
6. ¿Combinar orgánicamente las funciones de cada parte para realizar este caso de proyecto?
Subtotal La
síntesis se descompone en unidades y las unidades forman una síntesis.
Lo complejo se vuelve simple, lo simple se vuelve complejo

1. ¡Fenómeno del convoy! El
líder es responsable de la planificación del camino, y los demás participantes son responsables de seguir

2. Use Turtlesim gráficamente, expanda para generar nuevos robots (implementado con código cpp en lugar de una interfaz API), el líder del equipo necesita usar el control remoto del teclado;

3. ¿Cómo cambiar y aplicar la conexión entre clúster y Snake?

4. ¿Cómo usar los puntos de conocimiento anteriores para diseñar?


Un programa problemático es el siguiente (no hacer referencia): 



#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <geometry_msgs/Twist.h>
#include <turtlesim/Spawn.h>

int main(int argc, char** argv)
{

	ros::init(argc, argv, "my_tf_listener");


	ros::NodeHandle node;


	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv;
	add_turtle.call(srv);

	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle3 = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv3;
	add_turtle.call(srv3);

	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle4 = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv4;
	add_turtle.call(srv4);

	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle5 = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv5;
	add_turtle.call(srv5);

	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle6 = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv6;
	add_turtle.call(srv6);

	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle7 = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv7;
	add_turtle.call(srv7);







	ros::Publisher turtle_vel = node.advertise<geometry_msgs::Twist>("/turtle2/cmd_vel", 10);

	ros::Publisher turtle_vel3 = node.advertise<geometry_msgs::Twist>("/turtle3/cmd_vel", 10);

	ros::Publisher turtle_vel4 = node.advertise<geometry_msgs::Twist>("/turtle4/cmd_vel", 10);

	ros::Publisher turtle_vel5 = node.advertise<geometry_msgs::Twist>("/turtle5/cmd_vel", 10);

	ros::Publisher turtle_vel6 = node.advertise<geometry_msgs::Twist>("/turtle6/cmd_vel", 10);

	ros::Publisher turtle_vel7 = node.advertise<geometry_msgs::Twist>("/turtle7/cmd_vel", 10);


	tf::TransformListener listener;

	tf::TransformListener listener3;


	ros::Rate rate(10.0);
	while (node.ok())
	{
		// 
		tf::StampedTransform transform;
		try
		{
			listener.waitForTransform("/turtle2", "/turtle1", ros::Time(0), ros::Duration(3.0));
			listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
		}
		catch (tf::TransformException &ex) 
		{
			ROS_ERROR("%s",ex.what());
			ros::Duration(1.0).sleep();
			continue;
		}

		// 
		geometry_msgs::Twist vel_msg;
		vel_msg.angular.z = 4.0 * atan2(transform.getOrigin().y(),
				                        transform.getOrigin().x());
		vel_msg.linear.x = 2.0 * sqrt(pow(transform.getOrigin().x(), 2) +
				                      pow(transform.getOrigin().y(), 2));
		turtle_vel.publish(vel_msg);


		if(vel_msg.linear.x<0.01){
			// 
			tf::StampedTransform transform3;
			try
			{
				listener3.waitForTransform("/turtle3", "/turtle2", ros::Time(0), ros::Duration(3.0));
				listener3.lookupTransform("/turtle3", "/turtle2", ros::Time(0), transform);
			}
			catch (tf::TransformException &ex) 
			{
				ROS_ERROR("%s",ex.what());
				ros::Duration(1.0).sleep();
				continue;
			}

			// 
			geometry_msgs::Twist vel_msg3;
			vel_msg3.angular.z = 4.0 * atan2(transform3.getOrigin().y(),
						                transform3.getOrigin().x());
			vel_msg3.linear.x = 2.0 * sqrt(pow(transform3.getOrigin().x(), 2) +
						              pow(transform3.getOrigin().y(), 2));
			turtle_vel3.publish(vel_msg3);
		}

		rate.sleep();
	}
	return 0;
};

Supongo que te gusta

Origin blog.csdn.net/ZhangRelay/article/details/124205271
Recomendado
Clasificación