質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1917閲覧

kamenokotooga

macoffee

総合スコア5

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/06/11 02:44

編集2020/07/10 10:37

前提・実現したいこと

今ROSを勉強中で取り扱っているのですがその中でturtlesimノードの亀に対して正方形の起動を描かせるプログラミングを作りたいです。書き方を教えてもらえますでしょうか?まだROSを学び始めてから日が浅いので助けていただけると幸いです。

発生している問題

まず横方向(x軸上)に揺れ動くプログラミングを作りました。

### 該当のソースコード #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); ROS_INFO("y:%f",pose->y); ROS_INFO("theta:%f",pose->theta); ROS_INFO("linear_velocity:%f",pose->linear_velocity); ROS_INFO("angular_velocity:%f",pose->angular_velocity); } 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の中にvoid setRotateVector(float angular_z,int cnt);を宣言その中に以下のプログラミングを入力。私の解釈として回転速度を与えて曲がって欲しかったので以下のように書きました。

void turtleSim::setRotateVector(float angular_z,int cnt){ int i; geometry_msgs::Twist twist; ros::Rate loop_rate(10); for(i=0;i<cnt;i++){ twist.angular.z=angular_z; twist_pub.publish(twist); loop_rate.sleep(); } }

これを入れたとしてもビルドはできても上記プログラミングと同じ動き(x軸上に揺れ動く)をするだけでした。

補足情報(FW/ツールのバージョンなど)

環境としてはubunntu上で起動しており言語はC++です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuote

2020/06/11 04:13

タグにVimが入っていますが、関係ないのではないでしょうか。
macoffee

2020/06/11 04:14

そうですね。一応vimで書いたので必要かなと思い追加しました。消しておきます。
guest

回答1

0

自己解決

最初んお引数がバグを起こしていたため

投稿2020/07/10 10:41

macoffee

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問