#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;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。