多くのコースは、基礎コースと呼ばれる C/C++ またはその他のプログラミング コースから始まります。その後、学部の 4 年生に進んでロボット工学を勉強しますが、これでは非常に大きな時間のロスが発生し、効率も非常に低くなります。
C++/MCU/Embedded/ROS およびその他のプログラミング基礎を 1 つのコースに組み合わせて実装できます。これらの教材は 3 ラウンド以上反復されており、すべて公開されています。必要に応じて参照できます。必要ありません。自分用に書きます^_^ いつもご支援、ご支援、ご鞭撻を賜り、誠にありがとうございます。
https://www.lanqiao.cn/courses/854
に適用する
- C++ 11 14 17 20……
- Arduino UNO DUE ESP8266 ESP32……
- 腕……
- ROS1 キネティック メロディック ノエティック……
- ROS2 フォクシー謙虚……
一部しか公開されていないのですが、主な理由は内容が多すぎることです…。
C++
#include<iostream>
using namespace std;
main()
{
cout<<"Hello World !";
}
これはC++言語で書かれた簡単なプログラムです。中国語で詳しく説明しましょう。
まず、#include<iostream>
プログラムの実行前に iostream ファイルを含めるようコンパイラーに指示する前処理ディレクティブがあります。iostream ファイルには、入出力操作を実行するために必要な関数とオブジェクトが含まれています。
次に、using namespace std;
std 名前空間を使用するつもりであることをコンパイラーに伝えます。これは、iostream ファイル内の関数とオブジェクトが std 名前空間にあるためです。
次にmain()
、C++ プログラムへのエントリ ポイントである関数が来ます。プログラムを実行すると、main 関数が呼び出されます。
main 関数では、cout
「Hello World!」というメッセージを出力するために使用します。cout は、標準出力 (通常はモニター) を表すストリーム オブジェクトです。ここでは、cout オブジェクトを使用して文字列 (つまり、「Hello World!」) を標準出力に送信します。
一般に、このプログラムの機能は、「Hello World!」メッセージを出力することです。
Arduino
Arduino IDE では、C++ プログラミング言語を使用して、代わりにSerial.print()
ORSerial.println()
関数を使用してシリアル ポートに出力する必要がありますcout
。また、Arduino IDE はそれをサポートしていないusing namespace std;
ため、完全な標準ライブラリ名を使用する必要があります。
変更されたコードは次のとおりです。
#include <iostream>
int main()
{
Serial.print("Hello World !");
return 0;
}
注: このコードは Arduino IDE では直接動作しない可能性があります。Arduino IDE は主にマイクロコントローラー プログラミングに使用され、標準の C++ コンパイラーとは異なります。Arduino IDE で「Hello World!」を出力するには、次のコードを使用できます。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World!");
delay(1000);
}
上記のコードは、シリアル接続が開かれるとすぐに「Hello World!」を出力し、1 秒待ってプロセスを繰り返します。これは、Arduino IDE でのシリアル通信の通常の方法です。
ROS1
ROS_INFO
ROS1 では、代わりに関数を使用してメッセージを出力できますcout
。ROS_INFO
使用するために書き直されたコードの例を次に示します。
#include <ros/ros.h>
int main(int argc, char **argv)
{
ros::init(argc, argv, "my_node");
ros::NodeHandle nh;
ROS_INFO("Hello World !");
return 0;
}
上記のコードには、ros/ros.h
ROS1 のメイン ヘッダー ファイルであるヘッダー ファイルがインクルードされています。次に、ros::init
関数を使用して ROS ノードを初期化し、ノード ハンドルを作成します ( ros::NodeHandle
)。次にROS_INFO
関数を使って「Hello World!」メッセージを出力します。
ROS 関連の関数とメッセージングを適切に処理するには、このコードを ROS1 環境でコンパイルして実行する必要があることに注意してください。
ROS2
それは迅速かつ独立して実行できますか? ? ?
ROS2 では、メッセージ出力の代わりにrclcpp
ライブラリ内のマクロを使用できます。マクロを使用するようにコードを書き直す例を次に示します。RCL_INFO
cout
RCL_INFO
#include <rclcpp/rclcpp.hpp>
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("my_node");
rclcpp::Rate rate(1); // 设置一个频率为1Hz的定时器
while (rclcpp::ok()) {
node->get_logger().info("Hello World !"); // 使用RCL_INFO宏输出消息
rate.sleep(); // 等待一段时间以保持1Hz的频率
}
rclcpp::shutdown(); // 关闭ROS节点
return 0;
}
上記のコードでは、rclcpp/rclcpp.hpp
最初にヘッダー ファイルをインクルードします。次に、rclcpp::init
関数を使用して ROS ノードを初期化します。次に、共有ノード ハンドルを作成し、1Hz の周波数でタイマーを設定します。ループでは、RCL_INFO
マクロを使用して「Hello World!」メッセージを ROS システムのログに出力します。その後、rate.sleep()
周波数を1Hzに保つように呼び出してしばらく待ちます。最後に、rclcpp::shutdown()
関数を使用して ROS ノードをシャットダウンします。
ROS 関連の関数とメッセージングを適切に処理するには、このコードを ROS2 環境でコンパイルして実行する必要があることに注意してください。
ROS1 と Arduino
#include <ros.h>
#include <std_msgs/String.h>
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
char hello[13] = "hello world!";
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop()
{
str_msg.data = hello;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}
このコードは、C++ で書かれた単純な ROS (ロボット オペレーティング システム) ノードです。ROS は、C++、Python、Java などのさまざまなプログラミング言語をサポートするロボット ソフトウェアを作成するためのフレームワークです。
コードの主な機能は、文字列「hello world!」を含むメッセージを「chatter」という名前の ROS トピックにパブリッシュすることです。コードの各部分を詳しく説明しましょう。
#include <ros.h>
: ROS フレームワークを含むヘッダー ファイルです。#include <std_msgs/String.h>
: これは、標準メッセージ タイプの文字列メッセージを含むヘッダー ファイルです。ROS では、メッセージはノード間でデータを渡すために使用されるカスタム データ型です。ros::NodeHandle nh;
: ROS ノード ハンドル オブジェクトを作成します。ノード ハンドルは、ROS システムと対話するために使用される主要なインターフェイスです。std_msgs::String str_msg;
: メッセージのパブリッシュに使用される文字列メッセージ オブジェクトを作成します。ros::Publisher chatter("chatter", &str_msg);
: 「chatter」という名前のトピックにメッセージをパブリッシュするために使用されるパブリッシャー オブジェクトを作成します。char hello[13] = "hello world!";
: 文字列「hello world!」を格納する文字配列を作成します。void setup()
: ノードの初期化時に一度実行される「setup」という関数を定義します。nh.initNode();
: ノードを初期化します。nh.advertise(chatter);
: パブリッシャーを通知し、ノードが「chatter」という名前のトピックのリッスンを開始し、メッセージのパブリッシュの準備を開始します。void loop()
: ノードの実行中に継続的に実行される「ループ」と呼ばれる関数を定義します。str_msg.data = hello;
: 文字列「hello world!」をメッセージ オブジェクトのデータ フィールドに割り当てます。chatter.publish( &str_msg );
: 「雑談」トピックにメッセージを投稿します。nh.spinOnce();
: メッセージ キューを 1 回ポーリングして、他のノードからメッセージを受信します。delay(1000);
: 1 秒間遅延し、ループを繰り返します。
全体として、このコードは、文字列「hello world!」を含むメッセージを「chatter」という名前のトピックに継続的にパブリッシュする単純な ROS ノードを作成します。
M5ATOMS3の基本03 ROS1(rosserial)に挨拶を送る
ROS2とArduino
M5ATOMS3の基本04 ROS2(micro-ROS)に挨拶を送る