ROS C++ Python プロジェクト構築とエラーログ

1. 複数のmain関数によるコンパイルエラー

C++プロジェクトで複数のソースファイルにmain関数が存在する場合、リンカーエラーが発生します。ROSノードの構築では、各実行ファイルに対して1つのmain関数のみを許容します。

解決方法

  • 各ノードを個別に分離してビルド
  • CMakeLists.txtで明示的にソースファイルを指定
cmake_minimum_required(VERSION 3.0.2)
project(vehicle_control)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  geometry_msgs
)

catkin_package()

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(drive_controller src/drive_node.cpp)
target_link_libraries(drive_controller ${catkin_LIBRARIES})

add_executable(path_planner src/path_node.cpp)
target_link_libraries(path_planner ${catkin_LIBRARIES})

対応するソースコード例

drive_node.cpp:

#include "ros/ros.h"
#include "std_msgs/Float32.h"

class DriveController {
public:
  DriveController(ros::NodeHandle& nh) {
    cmd_pub_ = nh.advertise<std_msgs::Float32>("cmd_throttle", 10);
  }
private:
  ros::Publisher cmd_pub_;
};

int main(int argc, char **argv) {
  ros::init(argc, argv, "drive_controller");
  ros::NodeHandle nh;
  
  DriveController controller(nh);
  
  ros::Rate loop_rate(20);
  while (ros::ok()) {
    ros::spinOnce();
    loop_rate.sleep();
  }
  return 0;
}

2. ROSワークスペースの構築と環境設定

ワークスペースの初期化手順

mkdir -p ~/autonomous_car_ws/src
cd ~/autonomous_car_ws/
catkin_make

環境変数の設定

各端末セッションで以下のコマンドを実行:

source /opt/ros/noetic/setup.bash
source ~/autonomous_car_ws/devel/setup.bash

3. パッケージ依存の解決

システム依存パッケージのインストール

sudo apt-get install libpcap-dev
sudo apt-get install ros-noetic-navigation

カスタムメッセージタイプの依存解決

package.xmlに依存関係を追加:

<depend>custom_msgs</depend>

4. Pythonバージョンの互換性問題

Pythonバージョンの切り替え

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
sudo update-alternatives --config python

5. セグメンテーションフォールトのデバッグ

GDBを使用した解析

gdb -ex run --args rosrun my_package my_node
# 実行中にエラー発生位置を特定

ログファイルの検証

cat /home/user/.ros/log/$(date +%Y-%m-%d)/my_node-*.log

6. OSQPソルバーのバージョン問題

特定バージョンのインストール

git clone https://github.com/oxfordcontrol/osqp.git
cd osqp
git checkout v0.6.0
mkdir build && cd build
cmake ..
make
sudo make install

タグ: ROS C++ Python CMake Catkin

8月4日 16:37 投稿