从turtlesim到贪吃蛇……(补充)

举报
zhangrelay 发表于 2022/04/16 23:43:34 2022/04/16
【摘要】 原文如下: 从turtlesim到贪吃蛇…… 部分提示: 背下来但是不理解,忘得特别快!!! 综合项目案例一:贪吃蛇实现 1. 这个项目实现,需要用到哪些已经学过的知识点? 总-分 2. 如何将这些知识点融合(综合)完成此案例? 3. 每个知识点在此综合项目中的组成部分或位置? 4. 设计方案(草案)完成项目构思? 5. 编程...

原文如下:

从turtlesim到贪吃蛇……


部分提示:

背下来但是不理解,忘得特别快!!!

综合项目案例一:贪吃蛇实现
1. 这个项目实现,需要用到哪些已经学过的知识点?
总-分
2. 如何将这些知识点融合(综合)完成此案例?
3. 每个知识点在此综合项目中的组成部分或位置?
4. 设计方案(草案)完成项目构思?
5. 编程实现各部分的功能并测试?
6. 将各部分的功能进行有机组合实现此项目案例?
分-总
综合拆解成单元,单元组成综合。
复杂变简单,简单变复杂

1. 车队现象!
领队负责路径规划,其他参与者负责跟随
第一种:领队找队友-贪吃蛇
第二种:队友找领队-集群

2. 图形化使用turtlesim;扩展生成新的机器人(用cpp代码实现而非API接口);领队需要使用键盘遥控;

3. 集群和贪吃蛇联系,如何改变和应用?

4. 如何利用上述知识点进行设计?


一个有问题的程序如下(请不要参考): 


  
  1. #include <ros/ros.h>
  2. #include <tf/transform_listener.h>
  3. #include <geometry_msgs/Twist.h>
  4. #include <turtlesim/Spawn.h>
  5. int main(int argc, char** argv)
  6. {
  7. ros::init(argc, argv, "my_tf_listener");
  8. ros::NodeHandle node;
  9. ros::service::waitForService("/spawn");
  10. ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");
  11. turtlesim::Spawn srv;
  12. add_turtle.call(srv);
  13. ros::service::waitForService("/spawn");
  14. ros::ServiceClient add_turtle3 = node.serviceClient<turtlesim::Spawn>("/spawn");
  15. turtlesim::Spawn srv3;
  16. add_turtle.call(srv3);
  17. ros::service::waitForService("/spawn");
  18. ros::ServiceClient add_turtle4 = node.serviceClient<turtlesim::Spawn>("/spawn");
  19. turtlesim::Spawn srv4;
  20. add_turtle.call(srv4);
  21. ros::service::waitForService("/spawn");
  22. ros::ServiceClient add_turtle5 = node.serviceClient<turtlesim::Spawn>("/spawn");
  23. turtlesim::Spawn srv5;
  24. add_turtle.call(srv5);
  25. ros::service::waitForService("/spawn");
  26. ros::ServiceClient add_turtle6 = node.serviceClient<turtlesim::Spawn>("/spawn");
  27. turtlesim::Spawn srv6;
  28. add_turtle.call(srv6);
  29. ros::service::waitForService("/spawn");
  30. ros::ServiceClient add_turtle7 = node.serviceClient<turtlesim::Spawn>("/spawn");
  31. turtlesim::Spawn srv7;
  32. add_turtle.call(srv7);
  33. ros::Publisher turtle_vel = node.advertise<geometry_msgs::Twist>("/turtle2/cmd_vel", 10);
  34. ros::Publisher turtle_vel3 = node.advertise<geometry_msgs::Twist>("/turtle3/cmd_vel", 10);
  35. ros::Publisher turtle_vel4 = node.advertise<geometry_msgs::Twist>("/turtle4/cmd_vel", 10);
  36. ros::Publisher turtle_vel5 = node.advertise<geometry_msgs::Twist>("/turtle5/cmd_vel", 10);
  37. ros::Publisher turtle_vel6 = node.advertise<geometry_msgs::Twist>("/turtle6/cmd_vel", 10);
  38. ros::Publisher turtle_vel7 = node.advertise<geometry_msgs::Twist>("/turtle7/cmd_vel", 10);
  39. tf::TransformListener listener;
  40. tf::TransformListener listener3;
  41. ros::Rate rate(10.0);
  42. while (node.ok())
  43. {
  44. //
  45. tf::StampedTransform transform;
  46. try
  47. {
  48. listener.waitForTransform("/turtle2", "/turtle1", ros::Time(0), ros::Duration(3.0));
  49. listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
  50. }
  51. catch (tf::TransformException &ex)
  52. {
  53. ROS_ERROR("%s",ex.what());
  54. ros::Duration(1.0).sleep();
  55. continue;
  56. }
  57. //
  58. geometry_msgs::Twist vel_msg;
  59. vel_msg.angular.z = 4.0 * atan2(transform.getOrigin().y(),
  60. transform.getOrigin().x());
  61. vel_msg.linear.x = 2.0 * sqrt(pow(transform.getOrigin().x(), 2) +
  62. pow(transform.getOrigin().y(), 2));
  63. turtle_vel.publish(vel_msg);
  64. if(vel_msg.linear.x<0.01){
  65. //
  66. tf::StampedTransform transform3;
  67. try
  68. {
  69. listener3.waitForTransform("/turtle3", "/turtle2", ros::Time(0), ros::Duration(3.0));
  70. listener3.lookupTransform("/turtle3", "/turtle2", ros::Time(0), transform);
  71. }
  72. catch (tf::TransformException &ex)
  73. {
  74. ROS_ERROR("%s",ex.what());
  75. ros::Duration(1.0).sleep();
  76. continue;
  77. }
  78. //
  79. geometry_msgs::Twist vel_msg3;
  80. vel_msg3.angular.z = 4.0 * atan2(transform3.getOrigin().y(),
  81. transform3.getOrigin().x());
  82. vel_msg3.linear.x = 2.0 * sqrt(pow(transform3.getOrigin().x(), 2) +
  83. pow(transform3.getOrigin().y(), 2));
  84. turtle_vel3.publish(vel_msg3);
  85. }
  86. rate.sleep();
  87. }
  88. return 0;
  89. };

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/124205271

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。