mkdir -p catkin_ws/srccd catkin_ws/src
git clone /bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
source ./devel/setup.bash
cd src/usb_cam
mkdir build
cd build
cmake ..
make
关闭终端,
打开文档
ctrl +h
双击brashc
末尾添加
source ~/catkin_ws/devel/setup.bash
重新打开终端
cd catkin_ws/src/usb_cam/launch
sudo gedit usb_cam-test.launch
找到:
<launch><node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" ><param name="video_device" value="/dev/video0" /><param name="image_width" value="640" /><param name="image_height" value="480" /><param name="pixel_format" value="yuyv" /><param name="camera_frame_id" value="usb_cam" /><param name="io_method" value="mmap"/></node><node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen"><remap from="image" to="/usb_cam/image_raw"/><param name="autosize" value="true" /></node></launch>
将上述"yuyv"改成"mjpeg"
cd ..
cd src
sudo gedit usb_cam.cpp
大约在第430+行找到如下代码段:
if (pic_size != avframe_camera_size_){ROS_ERROR("outbuf size mismatch. pic_size: %d bufsize: %d", pic_size, avframe_camera_size_);return;}video_sws_ = sws_getContext(xsize, ysize, avcodec_context_->pix_fmt, xsize, ysize, AV_PIX_FMT_RGB24, SWS_BILINEAR, NULL,NULL, NULL);sws_scale(video_sws_, avframe_camera_->data, avframe_camera_->linesize, 0, ysize, avframe_rgb_->data,avframe_rgb_->linesize);sws_freeContext(video_sws_);
在代码段:video_sws_ = sws_get... 位置上面一行插入以下代码:
{AVPixelFormat pixFormat;switch (avcodec_context_->pix_fmt) {case AV_PIX_FMT_YUVJ420P :pixFormat = AV_PIX_FMT_YUV420P;break;case AV_PIX_FMT_YUVJ422P :pixFormat = AV_PIX_FMT_YUV422P;break;case AV_PIX_FMT_YUVJ444P :pixFormat = AV_PIX_FMT_YUV444P;break;case AV_PIX_FMT_YUVJ440P :pixFormat = AV_PIX_FMT_YUV440P;break;default:pixFormat = avcodec_context_->pix_fmt;break;}avcodec_context_->pix_fmt = pixFormat;}
重新打开终端
cd catkin_ws
catkin_make
source ./devel/setup.bash
cd catkin_ws/src/usb_cam/build
cmake ..
make
完成
重新打开终端
运行
roslaunch usb_cam usb_cam-test.launch