ROS シリーズ: 第 3 章 (2)

シリーズ記事ディレクトリ

第1章 ROSの概要と環境構築
第2章 ROSの通信機構
第3章 ROSの通信機構 応用
編 第4章 ROSの運用管理 第5章
ROSの共通コンポーネント
第6章 ロボットシステムのシミュレーション
第7章 ロボットシステムのシミュレーション
第8章 ロボットシステムのシミュレーション
第9章 ロボットシステムのシミュレーション
第10章ロボットシステムシミュレーション



序文

  • レビューとレビューに使用されます
  • このnoteの動画説明アドレス:Bilibili大学
  • メモはビデオでより効果的に機能します
  • 間違いや脱落がある場合は、プライベートメッセージやコメントを送って修正していただければ、確認次第変更させていただきます。
  • 怕什么真理无穷,进一寸有一寸的欢喜
  • あなたと分け合う

3. 高度な ROS 通信メカニズム

6. ROSのヘッダファイルとソースファイル

  1. ヘッダー ファイル、実行可能ファイルをソース ファイルとして設定します。
  2. ヘッダーファイル、ソースファイル、実行ファイルを個別に設定する

6.1 カスタムヘッダーファイルの呼び出し

要件: ヘッダー ファイル、実行可能ファイル自体をソース ファイルとして設計します。

プロセス:

  1. ヘッダー ファイルを書き込みます。
  2. 実行可能ファイル (ソース ファイルも) を書き込みます。
  3. 設定ファイルを編集して実行します。

6.1.1 ヘッダーファイル

関数パッケージの下の include/function パッケージ名ディレクトリの下に新しいヘッダー ファイル hello.h を作成します。サンプルの内容は次のとおりです。

コードは以下のように表示されます。

#ifndef  _HELLO_H
#define  _HELLO_H

/* 声明 namespace
            |--class
                |--run

*/
namespace hello_ns {
    
    
    class Myhello
    {
    
    
    private:
        /* data */
    public:
        void run();                 //成员函数
    };
    
}

#endif

ヘッダー ファイルのコンパイル時に例外が発生しないようにするには、.vscode で c_cpp_properties.json の includepath プロパティを構成する必要があります。

"/home/wht/at_demo/demo03_ws/src/plumbing_head/include/**"//配置head文件的位置

前の行の末尾を区切るために必ずカンマを追加してください。

6.1.2 実行可能ファイル

src ディレクトリに新しいファイル hello.cpp を作成し、ヘッダー ファイル関数を記述して呼び出します。サンプルの内容は以下のとおりです。

コードは以下のように表示されます。

#include <ros/ros.h>
#include "plumbing_head/hello.h"
namespace hello_ns{
    
    
    void Myhello::run(){
    
    
        ROS_INFO("run 函数执行-------------");
    }
}

int main(int argc, char* argv[])
{
    
    
    setlocale(LC_ALL,"");

    ros::init(argc, argv, "hello_head");
    //函数调用
    hello_ns::Myhello myHello;
    myHello.run();
    return 0;
}

6.1.3 設定ファイル

CMakeLists.txt ファイルを構成します。ヘッダー ファイルの関連構成は次のとおりです。

コードは以下のように表示されます。

include_directories(
include
  ${
    
    catkin_INCLUDE_DIRS}
)
add_executable(hello src/hello.cpp)
add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(hello
  ${catkin_LIBRARIES}
)

コンパイルして実行します。

6.2 カスタムソースファイルの呼び出し

大きなファイルでは、ヘッダー ファイルを使用してクラスを宣言し、ソース ファイルを使用して定義し、ソース ファイルで定義された関数を呼び出すことで他の関数を実行し、関連する関数を実現できます。

要件: ヘッダー ファイルとソース ファイルを設計し、実行可能ファイルにヘッダー ファイルを含めます。

プロセス:

  1. ヘッダー ファイルを書き込みます。
  2. ソースファイルを書き込む。
  3. 実行可能ファイルを書き込みます。
  4. 設定ファイルを編集して実行します。

6.2.1 ヘッダーファイル

関数パッケージ hello.h の下の include/関数パッケージ名ディレクトリに新しいヘッダー ファイルを作成します。これはクラスの宣言に使用されます。

コードは以下のように表示されます。

#ifndef  _HELLO_H
#define  _HELLO_H

/* 声明 namespace
            |--class
                |--run

*/
namespace hello_ns {
    
    
    class Myhello
    {
    
    
    private:
        /* data */
    public:
        void run();                 //成员函数
    };
    
}

#endif

ヘッダー ファイルのコンパイル時に例外が発生しないようにするには、.vscode で c_cpp_properties.json の includepath プロパティを構成する必要があります。

"/home/wht/at_demo/demo03_ws/src/plumbing_head_src/include/**"//配置head文件的位置

前の行の末尾を区切るために必ずカンマを追加してください。

6.2.2 ソースファイル

src ディレクトリに新しいファイル hello.cpp を作成します。このファイルは、関連関数の定義に使用されます。

コードは以下のように表示されます。

#include <ros/ros.h>
#include "plumbing_head_src/hello.h"

namespace hello_ns{

void My::run(){
    ROS_INFO("调用源文件函数成功-------------");
}

}

6.2.3 実行可能ファイル

src ディレクトリに新しいファイル use_hello.cpp を作成し、ソース ファイル関数を呼び出します。

コードは以下のように表示されます。

#include <ros/ros.h>//因为源文件已经包含,所以可以省略
#include "plumbing_head_src/hello.h"

int main(int argc, char *argv[])
{
    
    
    setlocale(LC_ALL, "");
    ros::init(argc, argv, "hello_head_src");
    //函数调用
    hello_ns::Myhello myHello;
    myHello.run(); //此时虽然包含了plumbing_head_src/hello.h   即包含了头文件,但不能链接源文件hello.cpp  需要配置
    return 0;
}

6.2.4 設定ファイル

CMakeLists.txt ファイルを構成します。ヘッダー ファイルとソース ファイルの構成は次のとおりです。

コードは以下のように表示されます。

#包含头文件
include_directories(
include
  ${
    
    catkin_INCLUDE_DIRS}
)
## 声明C++库
# 库的名字 起名字随便起,但是与后面的要对应 
# 第一个是头文件include/plumbing_head_src/hello.h
# 第二个源文件 hello.cpp
add_library(head_src
  include/${PROJECT_NAME}/hello.h
  src/hello.cpp
)
# 执行权限配置
add_executable(use_hello src/use_hello.cpp)
# 执行权限配置
add_dependencies(use_hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 库的配置    设置成上面库的名字
add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 库的配置
target_link_libraries(head_src
  ${catkin_LIBRARIES}
)
# 执行权限配置 需要链接到库上
target_link_libraries(use_hello
  head_src
  ${catkin_LIBRARIES}
)

コンパイルして実行します。

要約:

2つ目は将来よく使われる方法で
、大きなファイルではヘッダファイルでクラスを宣言し、ソースファイルで定義し、その後他の関数を実行することができ、ファイルは関数を呼び出すことで関連する関数を実現します。ソースファイルで定義されています。

おすすめ

転載: blog.csdn.net/TianHW103/article/details/127341637