前提・実現したいこと
今rosを勉強中でその中でturtlesimを使っての実習を行っているのですが、その中でtirtlesimノードの亀に正方形上の起動を描くということをさせたいです。以下にプログラミングを書いておきますので何が足りないかご指摘いただきますでしょうか。
該当のソースコード
ソースコード #include "ros/ros.h" #include <geometry_msgs/Twist.h> #include <turtlesim/Pose.h> class turtleSim{ public: turtleSim(); ~turtleSim(); void poseCallback(const turtlesim::PoseConstPtr& pose); void setMoveVector(float linear_x, int cnt); void timerCallback(const ros::TimerEvent&); private: ros::Publisher twist_pub; ros::Subscriber pose_sub; ros::Timer timer; ros::NodeHandle nh; }; turtleSim::turtleSim(){ twist_pub = nh.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1000); pose_sub = nh.subscribe<turtlesim::Pose>("turtle1/pose", 1, &turtleSim::poseCallback, this); timer = nh.createTimer(ros::Duration(0.1), &turtleSim::timerCallback, this); geometry_msgs::Twist twist; twist.linear.x = 0.0; twist.linear.y = 0.0; twist.linear.z = 0.0; twist.angular.x = 0.0; twist.angular.y = 0.0; twist.angular.z = 0.0; twist_pub.publish(twist); } turtleSim::~turtleSim(){ } void turtleSim::poseCallback(const turtlesim::PoseConstPtr& pose){ ROS_INFO("x:%f",pose->x); } void turtleSim::timerCallback(const ros::TimerEvent&){ setMoveVector(0.2, 10); setMoveVector(-0.2, 10); } void turtleSim::setMoveVector(float linear_x, int cnt){ int i; geometry_msgs::Twist twist; ros::Rate loop_rate(10); for(i = 0;i < cnt; i++){ twist.linear.x = linear_x; twist_pub.publish(twist); loop_rate.sleep(); } } int main(int argc, char **argv){ ros::init(argc, argv, "move_turtlesim"); turtleSim turtlesim; ros::spin(); return 0; }
試したこと
この場合新しく回転速度がほしいかなと思って新しい関数をpublic上で宣言するというところまでわかりましたがその中に何をどう書いていいかわからず断念しました。
補足情報(FW/ツールのバージョンなど)
現環境としてはubunntuを使用しており言語はC++です。
あなたの回答
tips
プレビュー