從turtlesim到貪吃蛇……(補充)
原文如下:
從turtlesim到貪吃蛇……
部分提示:
背下來但是不理解,忘得特別快!!!
綜合項目案例一:貪吃蛇實現
1. 這個項目實現,需要用到哪些已經學過的知識點?
總-分
2. 如何將這些知識點融合(綜合)完成此案例?
3. 每個知識點在此綜合項目中的組成部分或位置?
4. 設計方案(草案)完成項目構思?
5. 編程實現各部分的功能并測試?
6. 將各部分的功能進行有機組合實現此項目案例?
分-總
綜合拆解成單元,單元組成綜合。
復雜變簡單,簡單變復雜
1. 車隊現象!
領隊負責路徑規劃,其他參與者負責跟隨
第一種:領隊找隊友-貪吃蛇
第二種:隊友找領隊-集群
2. 圖形化使用turtlesim;擴展生成新的機器人(用cpp代碼實現而非API接口);領隊需要使用鍵盤遙控;
3. 集群和貪吃蛇聯系,如何改變和應用?
4. 如何利用上述知識點進行設計?
一個有問題的程序如下(請不要參考):
#include
#include
#include
#include
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 srv;
add_turtle.call(srv);
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle3 = node.serviceClient
turtlesim::Spawn srv3;
add_turtle.call(srv3);
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle4 = node.serviceClient
turtlesim::Spawn srv4;
add_turtle.call(srv4);
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle5 = node.serviceClient
turtlesim::Spawn srv5;
add_turtle.call(srv5);
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle6 = node.serviceClient
turtlesim::Spawn srv6;
add_turtle.call(srv6);
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle7 = node.serviceClient
turtlesim::Spawn srv7;
add_turtle.call(srv7);
ros::Publisher turtle_vel = node.advertise
ros::Publisher turtle_vel3 = node.advertise
ros::Publisher turtle_vel4 = node.advertise
ros::Publisher turtle_vel5 = node.advertise
ros::Publisher turtle_vel6 = node.advertise
ros::Publisher turtle_vel7 = node.advertise
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;
};
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。