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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

1638閲覧

直線追従プログラムについて

mrjohansson0901

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/08/08 06:31

編集2017/08/08 09:45

課題でy=0.5の直線追従のプログラムを作成せよといった課題が出たのですが以下のように作成してみると動きすらしません。
動かすためのメインのものとなるのがw = w-(以下略)で書かれているものでこれによって直線に近づいていくようになっているのですがどこがダメで動かないのかわからないのでどなたかお手伝い願えませんか?

C言語

1void user_program(void) { 2 static double x, y, th = 0; 3 static int count = 0; 4 static double v = 0.0, w = 0.0; 5 double vl = 0.0, vr = 0.0; 6 static double k, a, b, c; 7 8 x += v*cos(deg2rad(th)); 9 y += v*sin(deg2rad(th)); 10 th += rad2deg(w); 11 12 k = 0.5 - y; 13 14 w = w - (a * w + b * th + c * k); 15 16 vl = v - w*T / 2.0; 17 vr = v + w*T / 2.0; 18 19 robot_set_position(x, y, th); 20 fprintf(fp, "%d %f %f %f %f %f\n", count, x, y, th, vr, vl); 21 22 count++; 23 24 if (count > 10000) exit(1); 25}

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

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

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

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

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

coco_bauer

2017/08/08 07:24

追随していくには、動作を繰り返す必要があるのに、コードにはループ(繰り返し)がありません。ASCII文字でないη(ギリシャ語のイータ)が使う必要性が判りません。wの初期値が0.0なのも問題です。
mrjohansson0901

2017/08/08 07:37

ηはあくまでこちら側で置いた引数なので問題はないのではないでしょうか?また初期値としてのwはループさせるとしたら問題ないのではないのでしょうか?
SaitoAtsushi

2017/08/08 09:41 編集

識別子として使える文字として定義されている基本文字集合は A から Z 及び a から z 、それと数値といくつかの記号に制限されています。 η はその範囲にない文字だということです。 その旨はだいたいの処理系でエラーメッセージとして提示されると思うのですが……
mrjohansson0901

2017/08/08 09:42

なるほどではηを何か代替文字で書いてやればいいということですね  ありがとうございます
mrjohansson0901

2017/08/08 10:36

どなたかこうすればできるよというのがあればお願いします。
sazi

2017/08/08 13:00

vl = v - w*T / 2.0; とありますが、ここでのTは宣言されていませんが、何を表しているのでしょう?
WoodenHamlet

2017/08/09 00:43

このカウンタは何なの?exitしちゃっていいのこれ。countがクリアされるタイミング無いから動いてたロボットがどっかのタイミングでいきなりストップすると思うんだけど
WoodenHamlet

2017/08/09 01:00 編集

最初の状態と、なって欲しい理想的な最後の状態がどのようなものなのか提示してほしい。a, b, c の初期値はなにかとか
anndonut

2017/08/09 13:51

ロボットの問題なので、図とか、ロボットの形状や、そのy=0.5への追従方法などを説明しないと回答できないと思います。あと、理論的なシミュレーションモデルなのか、実機なのかによっても回答の仕方が変わると思いますので。
mrjohansson0901

2017/08/09 14:01

今回の問題当方で解決いたしました >>Woodenhamlet様:カウントに関してはほとんど無視していただいて結構です。a,b,cの値はPID制御と同様のものと考えていただけると幸いです。そのためにa,b,cをともに1.0に設定してやりプログラムを修復すれば動作しました 
mrjohansson0901

2017/08/09 14:02

>>anndount様今回環境はvisual studio 2017を使用したためにシュミレーションモデルを試用して運用いたしました。先ほど述べたように動かすことができました。自己解決してしまったためにせっかく答えていただこうとしているのに申し訳ありません。
WoodenHamlet

2017/08/09 14:43

自己解決した場合は自分で回答を書き、同じような疑問を持った別の人が同じように解決できるようにしてくださいね。自己解決するボタンとか、そういう機能がありますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問