前提・実現したいこと
この質問の編集前の皆さんのアドバイスのおかげで一応計算は出来ました。しかし今度はプログラミングにそれを書き出そうとすると一応ビルドは出来るのですが目標座標まで到達してくれません。恐らくsetMoveVector関数の中の書き方が違うのかなと思われまが、おおまかな原因がわかりません。改善点を教えて貰えますでしょうか?
C++
1コード 2#include "ros/ros.h" 3#include <geometry_msgs/Twist.h> 4#include <turtlesim/Pose.h> 5 6class turtleSim{ 7public: 8 turtleSim(); 9 ~turtleSim(); 10 void poseCallback(const turtlesim::PoseConstPtr& pose); 11 void setMoveVector(int count); 12 void timerCallback(const ros::TimerEvent&); 13 14private: 15 ros::Publisher twist_pub; 16 ros::Subscriber pose_sub; 17 ros::Timer timer; 18 ros::NodeHandle nh; 19}; 20 21turtleSim::turtleSim(){ 22 twist_pub = nh.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1000); 23 pose_sub = nh.subscribe<turtlesim::Pose>("turtle1/pose", 1, &turtleSim::poseCallback, this); 24 timer = nh.createTimer(ros::Duration(0.1), &turtleSim::timerCallback, this); 25 26 geometry_msgs::Twist twist; 27 twist.linear.x = 0.0; 28 twist.linear.y = 0.0; 29 twist.linear.z = 0.0; 30 twist.angular.x = 0.0; 31 twist.angular.y = 0.0; 32 twist.angular.z = 0.0; 33 twist_pub.publish(twist); 34} 35 36turtleSim::~turtleSim(){ 37 38} 39 40void turtleSim::poseCallback(const turtlesim::PoseConstPtr& pose){ 41 ROS_INFO("x:%f",pose->x); 42} 43 44void turtleSim::timerCallback(const ros::TimerEvent&){ 45 setMoveVector(10); 46 setMoveVector(10); 47} 48 49void turtleSim::setMoveVector(int count){ 50 int i ; 51 float x, y, theta, angular,pose_x,pose_y,pose_theta ; 52 geometry_msgs::Twist twist; 53 ros::Rate loop_rate(10); 54 55 x = 5.000000 - pose_x ; 56 y = 5.000000 - pose_y ; 57 theta = atan(y/x) ; 58 angular = 6.283185 - pose_theta ; 59 60 ROS_INFO("pose_x:%f",pose_x) ; 61 ROS_INFO("pose_y:%f",pose_y) ; 62 ROS_INFO("theta:%f",theta) ; 63 ROS_INFO("angular:%f",angular) ; 64 for(i=0;i < count; i++) { 65 if(x==0.000000) { 66 ROS_INFO("x:%f",x) ; 67 twist.angular.z = 1.570796 ; 68 twist.linear.x = y ; 69 twist_pub.publish(twist) ; 70 loop_rate.sleep() ; 71 } 72 else { 73 twist.angular.z = angular ; 74 twist.linear.x = x ; 75 twist.linear.y = y ; 76 twist_pub.publish(twist) ; 77 loop_rate.sleep() ; 78 } 79 } 80} 81 82int main(int argc, char **argv){ 83 ros::init(argc, argv, "move_turtlesim"); 84 85 turtleSim turtlesim; 86 87 ros::spin(); 88 return 0; 89} 90
https://teratail.com/questions/271234 と酷似した質問に見えますが、
利用規約 https://teratail.com/legal
第7条(禁止事項)
(11)複数のユーザーIDを1人で保有する行為
にはあたらないのですね?