ORB-slam 노트북 카메라로 연결
1. ORB-SLAM 설치:
Pangolin
Pangolin은 알림에 따라 설치할 의존 라이브러리가 있습니다
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j
OpenCV
2.4.8 버전, 2.4.11 버전 모두 사용 가능, 3.2 버전은 테스트 안 해도 될 것 같아요.
OpenCV 호환성에 문제가 자주 발생하는데, 헤더 파일의 경로를 포함하여 버전마다 변화가 있습니다.
따라서source에서 컴파일하는 것이 좋습니다. 컴퓨터에서 자주 사용하는 OpenCV를 여러 개 컴파일할 수 있습니다. 나중에 마운트 해제하려면build 디렉터리에서sudo make uninstall를 직접 설치하면 됩니다. 설치하려면build 디렉터리에서sudo make install를 사용하면 서로 다른 버전으로 전환하는 것이 비교적 빠릅니다.
Eigen
sudo apt-get install libeigen3-dev
Eigen은 헤더 파일만 있는 라이브러리로/usr/include/eigen3/에 기본적으로 설치되어 있으며, Eigen의 위치에 문제가 자주 발생하여 CMakeLists.txt에서 이 라이브러리를 찾을 수 없습니다. 따라서 ORB-slam에서FindEigen3을 제공합니다.cmake 파일은 Eigen3을 찾는 데 도움을 주고, 자신의 프로젝트에서도 이 파일을 사용하여 Eigen 라이브러리의 위치를 찾을 수 있습니다.
DBow 및 g2o
이 두 라이브러리 ORB-slam의 Thirdparty 디렉터리에서 제공되며, ORB-slam 소스 코드를 다운로드한 후 제공된 스크립트를 사용하면 됩니다.
ROS에 ORB-SLAM을 설치하는 작업 경로 캣킨ss에서 ROS의 원리를 이해하지 못하면 ROS 홈페이지에 가서 Beginner Level Tutorial을 다 읽어야 한다.
cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git
ORB-sLAM 디렉터리의build을 실행합니다.sh 스크립트:
cd ORB-SLAM2
./build.sh
// build.sh
echo "Configuring and building Thirdparty/DBoW2 ..."
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../g2o
echo "Configuring and building Thirdparty/g2o ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../../
echo "Uncompress vocabulary ..."
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
echo "Configuring and building ORB_SLAM2 ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
DBow, g2o, ORB-slam의 컴파일을 완성하고 DBow 사전 파일을 해제합니다. ORB-slam이 시작될 때도 이 100여 M의 파일을 불러와야 하기 때문에 시간이 많이 걸립니다.
2. 노트북 카메라 구동 설치 및 카메라 규격
1. "usb cam"사용: A ROS Driver for V4L USB Cameras
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ../
catkin_make
표시된 흑백 바둑판을 다운로드하여 인쇄한 후 평판에 붙여라.
2. ROS 카메라 스탬프 패키지 컴파일
rosdep install camera_calibration
rosmake camera_calibration
3. usb 시작cam, 노트북 카메라 이미지 가져오기
// sudo apt-get install ros-indigo-usb-cam optional usb_cam
roslaunch usb_cam usb-cam-test.launch
4. 측정 프로그램 시작
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam
표시된 인터페이스가 나타나면 x(좌우), y(상하),size(전후),skew(기울기) 등 방식으로 바둑판을 이동하여 x, y,size,skew의 진도표가 녹색 위치로 변할 때까지 이동한다.
이 때 CALIBRATE 버튼을 누르면 일정 시간이 지나면 표시가 완료됩니다.
완료 후 Commit, 터미널 뒤에 표시된 결과yaml 파일 주소가 있습니다. 열고 TUM1을 누르십시오.yaml의 형식 수정, mycam.yaml./home/shang/catkin 로 복사ws/src/ORB_SLAM2/Examples/Monocular/디렉토리
그냥 카메라 사이즈를 넣어야 돼요. 카메라.width 및 Camera.height
제 T460s 카메라 지정 결과와 ORB-slam 파라미터는요.
%YAML:1.0
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 626.3131886043523
Camera.fy: 624.0872390416225
Camera.cx: 280.8331825622062
Camera.cy: 234.9590765749035
Camera.k1: 0.1226796723026339
Camera.k2: -0.1753096021786491
Camera.p1: 0.003319071389844154
Camera.p2: -0.01267716347709299
Camera.k3: 0
Camera.width: 640
Camera.width: 480
# Camera frames per second
Camera.fps: 30.0
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000
# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2
# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
3. 노트북 카메라로 ORB-SLAM 실행
이로써 준비 작업이 끝났다.
1. 환경 변수에 ORB-slam의 ROS 패키지 경로 추가
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/shang/catkin_ws/ORB_SLAM2/Examples/ROS // you should change /home/shang/catkin_ws to your catkin workspace
2. ORB-slam의 ROS 노드 컴파일
cd src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j
3. 이 단계가 가장 중요하다!
ORB ROS 노드에서 구독하는 topic 및 usbcam에서 발표한 토픽 이름이 달라요!
두 가지 방법이 있는데 첫 번째는 힘들지만 ROS의 작업 과정을 이해하는 데 도움을 줄 수 있다. 두 번째는 간단하다. ORB를 제거한다SLAM에서 가입한 코드를 변경하고 다시 컴파일합니다.
방법1:
사용자 정의 ROS 패키지를 작성하여 ORB-slam의 ROS 노드에서 노트북 카메라가 이미지를 발표하는 topic를 구독하도록 합니다
문제는 ORB-slam ROS 노드에서/camera/image 구독하는 topic입니다.view, 노트북 카메라 이미지 흐름 발표 topic/usbcam/image_raw, 이것들은 rostopic list - v/rosnode list를 통해 볼 수 있습니다.
따라서 ROS node 프로그램을 작성하여 이 두 topic를 결합시켜야 합니다. 우리는 ros packge를 다시 정의할 것을 선택했습니다.
cd catkin_ws/src
catkin_create_pkg orb_image_transport image_transport cv_bridge
cd ..
catkin_make
cd orb_image_transport
gedit orb_image_converter.cpp
orb_image_converter.cpp 파일은 노트북 카메라 이미지를 하나의 topic에 공개해서 ORB-slam이 이 topic를 구독하도록 합니다
#include
#include
#include
#include
#include //include the headers for OPENCV's image processing and GUI module
#include //
static const std::string OPENCV_WINDOW = "Image window"; //define show image gui
class ImageConverter
{
ros::NodeHandle nh_; //define Nodehandle
image_transport::ImageTransport it_; //use this to create a publisher or subscriber
image_transport::Subscriber image_sub_; //
image_transport::Publisher image_pub_;
public:
ImageConverter()
: it_(nh_)
{
// Subscrive to input video feed and publish output video feed
image_sub_ = it_.subscribe("/usb_cam/image_raw", 1,
&ImageConverter::imageCb, this);
//image_pub_ = it_.advertise("/image_converter/output_video", 1);
image_pub_ = it_.advertise("/camera/image_raw", 1);
cv::namedWindow(OPENCV_WINDOW); //Opencv HighGUI calls to create/destroy a display window on start-up / shutdon
}
~ImageConverter()
{
cv::destroyWindow(OPENCV_WINDOW);
}
void imageCb(const sensor_msgs::ImageConstPtr& msg)
{
cv_bridge::CvImagePtr cv_ptr;
try
{
cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}
cv::imshow(OPENCV_WINDOW, cv_ptr->image);
cv::waitKey(3);
// Output modified video stream
image_pub_.publish(cv_ptr->toImageMsg());
}
};
int main(int argc, char** argv)
{
ros::init(argc, argv, "image_converter");
ImageConverter ic;
ros::spin();
return 0;
}
CMakeLists에서txt 파일 마지막으로 추가
add_executable(orb_image_converter orb_image_converter.cpp)
target_link_libraries(orb_image_converter ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
catkin_make 후 모든 일을 완성했습니다.
여기에는 Package가 필요하지 않으므로 사용자 정의 메시지 유형이 사용되지 않습니다.xml 및 CMakeLists.txt는 다른 변경을 합니다.
마지막으로 ORB-SLAM 실행 완료
roslaunch usb_cam usb_cam-test.launch
rosrun orb_image_transport orb_image_converter
rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/Monocular/mycam.yaml // change /home/shang to your directory
스크립트를 사용하여 모든 노드를 실행할 수도 있습니다.
demo.sh
gnome-terminal -x bash -c "rosrun orb_image_transport orb_image_converter; exec $SHELL"
gnome-terminal -x bash -c "rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/Monocular/mycam.yaml
; exec $SHELL"
roslaunch usb_cam usb_cam-test.launch
직접 실행./demo.sh 완성
방법2:
나중에 이런 방법은 너무 멍청하다는 것을 발견했다. 보세의 ROS 카메라 드라이브 패키지 usb 를 설치했다.cam 이후 카메라의 이미지는/usb 에 발표됩니다cam/image_raw, 따라서 ORB 코드에서 구독한 topic를/camera/image 에서raw에서/usb 로 변경cam/image_ROS 디렉토리의 rosmono.cc 파일에서 수정하면 됩니다. 두 눈, 깊이는 AR demo와 같습니다.
이렇게 하려면 아래 두 가지 명령만 사용하면 된다.
roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono /home/shang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/shang/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/mycam.yaml
참조:
1. http://www.jianshu.com/p/c3e8c88edb64
2. http://www.cnblogs.com/li-yao7758258/p/5912663.html
전재 대상:https://www.cnblogs.com/shang-slam/p/6733322.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.