ros中怎么用c++让turtlesim海龟画一个爱心

#include "ros/ros.h"
#include<geometry_msgs/Twist.h> 
 
int main(int argc, char *argv[])
{
    int PI = 3.141592653589793653589793;
    ros::init(argc, argv, "heart_shape");  
    ros::NodeHandle n;         
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
    geometry_msgs::Twist vel_cmd; 
    ros::Rate loopRate(2);
     int count = 0;  
     int i = 0;
    while(ros::ok())
    {
        vel_cmd.linear.x = 1.0;
        vel_cmd.linear.y = 0.0;  
        vel_cmd.linear.z = 0.0;
 
        vel_cmd.angular.x = 0;
        vel_cmd.angular.y = 0;
        vel_cmd.angular.z = 1; 
        count++;

        while (count==9&&i==0)
        {
                count = 0;
                i=1;
                vel_cmd.linear.x = 0.0;
                vel_cmd.angular.z = 2*PI;
        }

        while (count==7&&i==1)
        {

                vel_cmd.linear.x = 1.0;
                vel_cmd.angular.z = 2;
        }
        vel_pub.publish(vel_cmd); 
        ros::spinOnce();
        loopRate.sleep();
    }
    return 0;
}

我的想法是先画两个半圆,再画一个大的半圆,但代码怎么改写都没办法实现,下面是基本思路,没有写完但调试出现问题
     

#include "ros/ros.h"
#include <geometry_msgs/Twist.h>

int main(int argc, char *argv[])
{
double PI = 3.141592653589793653589793;
ros::init(argc, argv, "heart_shape");
ros::NodeHandle n;
ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
geometry_msgs::Twist vel_cmd;
ros::Rate loopRate(2);
int count = 0;
int i = 0;
while (ros::ok())
{
geometry_msgs::Twist msg;
msg.linear.x = 1;
msg.angular.z = 1;
i++;

    if (i ==9 )
    {


        msg.linear.x = 0;
        msg.angular.z = 2*PI;
    }
    
    if (i == 16)
    {
        ;
        msg.linear.x = 1.0;
        msg.angular.z = 2;
    }

    if (i >= 17)
    {
        ;
        msg.linear.x = 1;
        msg.angular.z = 0;
        i++;
        if (i >= 27)
        {    
            msg.linear.x = 0.15;
            msg.linear.y = 1;
            i++;
            if (i >= 43)
            {
                msg.linear.x = 0;
                msg.linear.y = 0;
        }
    }
        
        
    }

    vel_pub.publish(msg);

    //发布消息
    ROS_INFO_STREAM("Sending random velocity command: "
                    << "linear = " << msg.linear.x
                    << " angular = " << msg.angular.z);
    //按照循环频率延时
    //ros::spinOnce();
    loopRate.sleep();
}

    return 0;

}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。