三只乌龟的故事

某日,龟爸、龟妈、龟儿子三只乌龟,决议去郊游。 带了一个山东大饼,和两罐海底鸡出发到阳明山去。 苦爬十年,终於到了。席地而坐,卸下装备,准备进 食。  ****~~~该死!!没带开罐器! 龟爸说:『龟儿子.....回去拿!!』 龟妈说:『乖儿子...快!爸妈等你回来一起开饭..快去快回』 龟儿子说:『一定要等我回来!不可食言喔!..』 龟儿子踏上归途...  光阴似箭,20年已到,龟儿子尚未出现... 龟妈受不了了:『老伴...要先开饭不??我超饿说... 龟爸说:『不行...承诺岂可儿戏?答应儿子的...再等他五年,再不来就不管他了!』 龟爸说转眼又五年....未见龟儿子踪迹 不管了!!二老决定开动!拿出大饼,鹣鲽情深 龟爸说:『老伴...你先吃吧!』 龟妈说:『儿子..对不起!妈实在饿的受不了!』  大口一张,大饼受创!说时迟哪时快... 龟儿子从树後跳出来: 『干!!我就知道你们会偷吃!! 骗我回去拿开罐器??!! 我等了二十五年,终於被我等到了吧!! 我最恨人家骗我!!』 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的ROS程序,用于实现三只乌龟跟随: 1. 首先,在终端中启动ROS核心: ``` roscore ``` 2. 然后,打开三个终端并分别输入以下命令,以启动三只乌龟: ``` rosrun turtlesim turtlesim_node ``` ``` rosrun turtlesim turtlesim_node __name:=turtle2 ``` ``` rosrun turtlesim turtlesim_node __name:=turtle3 ``` 3. 接下来,在一个新的终端中,输入以下命令,以启动一个ROS节点,该节点将订阅第一只乌龟的位置信息,并向其他两只乌龟发布速度控制信息: ``` rosrun my_turtle_follow turtle_follow_node ``` 4. 最后,在另一个新的终端中,输入以下命令,以手动控制第一个乌龟的运动: ``` rosrun turtlesim turtle_teleop_key ``` 5. 现在,当您使用键盘控制第一个乌龟移动时,其他两只乌龟将跟随它的运动。 实现代码: turtle_follow_node.cpp ```cpp #include <ros/ros.h> #include <geometry_msgs/Twist.h> #include <turtlesim/Pose.h> class TurtleFollow { public: TurtleFollow(); private: void poseCallback(const turtlesim::Pose::ConstPtr& pose); void follow(); ros::NodeHandle nh_; ros::Publisher vel_pub_; ros::Subscriber pose_sub_; turtlesim::Pose current_pose_; turtlesim::Pose target_pose_; double linear_vel_; double angular_vel_; }; TurtleFollow::TurtleFollow() { vel_pub_ = nh_.advertise<geometry_msgs::Twist>("turtle2/cmd_vel", 1); pose_sub_ = nh_.subscribe("turtle1/pose", 1, &TurtleFollow::poseCallback, this); linear_vel_ = 1.0; angular_vel_ = 2.0; } void TurtleFollow::poseCallback(const turtlesim::Pose::ConstPtr& pose) { current_pose_ = *pose; follow(); } void TurtleFollow::follow() { double dx = current_pose_.x - target_pose_.x; double dy = current_pose_.y - target_pose_.y; double distance = sqrt(dx * dx + dy * dy); double angle = atan2(dy, dx); geometry_msgs::Twist vel_msg; if (distance > 0.1) { vel_msg.linear.x = linear_vel_ * distance; vel_msg.angular.z = angular_vel_ * angle; } vel_pub_.publish(vel_msg); } int main(int argc, char** argv) { ros::init(argc, argv, "turtle_follow"); TurtleFollow turtle_follow; ros::spin(); return 0; } ``` 请注意,此代码将第一只乌龟的位置信息订阅为turtlesim/Pose类型。然后,它将计算当前乌龟和目标乌龟之间的距离和角度,并为第二只乌龟发布一个速度控制消息,以使其跟随第一只乌龟的运动。 在运行此代码之前,请确保已编译并安装了my_turtle_follow软件包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值