ROS Noetic에서 개발한 패키지를 ROS Melodic에서 실행할 때 종종 cvBridge error를 마주하게 된다.
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
Noetic은 그냥 pip3 install cv_bridge를 해 주면 문제 없이 cvBridge를 쓸 수 있지만 Melodic은 그렇지 않나 보다.
나의 경우에는 conda 환경의 Python3를 쓰고 있기도 해서, Melodic + Conda python3 + cvBridge를 함께 써 주려면 다음과 같은 추가적인 설정이 필요하다.
Python3용 cv_bridge 빌드
anaconda python3 환경 위치 : /home/nuc/anaconda3/envs/ziwon/bin/python3
cd /catkin_ws/src
git clone -b melodic https://github.com/ros-perception/vision_opencv.git
sed -i 's/PYTHON_EXECUTABLE}/python3}/' vision_opencv/cv_bridge/CMakeLists.txt
cd ~/catkin_ws
catkin_make -DPYTHON_EXECUTABLE=/home/nuc/anaconda3/envs/ziwon/bin/python3 -DPYTHON_INCLUDE_DIR=/home/nuc/anaconda3/envs/ziwon/include/python3.7m -DPYTHON_LIBRARY=/home/nuc/anaconda3/envs/ziwon/lib/libpython3.7m.so
source devel/setup.bash
echo 'export PYTHONPATH=$PYTHONPATH:~/catkin_ws/devel/lib/python3/dist-packages' >> ~/.bashrc
source ~/.bashrc
이와 같이 catkin_make를 할 때 anaconda python3로 경로를 지정해준다.
이래도 잘 안 되면 CMakeLists.txt를 다음과 같이 수정해준다. env 이름은 무시..
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
set(PYTHON_EXECUTABLE /home/nuc/anaconda3/envs/face-ros/bin/python3)
set(PYTHON_INCLUDE_DIR /home/nuc/anaconda3/envs/face-ros/include/python3.8)
set(PYTHON_LIBRARY /home/nuc/anaconda3/envs/face-ros/lib/libpython3.8.so)
참고로 rospy에서 shebang을
#!/home/nuc/anaconda3/envs/ziwon/bin/python3
요렇게 작성해주면 해당 conda 환경의 python3를 사용할 수 있다.