рд╢реБрдн рджреЛрдкрд╣рд░, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ , рдореИрдВрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд░рдУрдПрд╕ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛редрд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЖрд░рдУрдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреМрди рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗредрдХреИрдорд░рд╛ рдЖрд░рдкреАрдЖрдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб
рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдРрд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб
рдХреИрдорд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдпрд╣ рдХреИрдорд░рд╛ рд╕реАрдзреЗ рдмреЛрд░реНрдб рдкрд░ рдПрдХ рд╕реАрдПрд╕рдЖрдИ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрдкреАрдпреВ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреИрдорд░реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ ZIF рдХреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЛрд░реНрдб рдкрд░ рдХреЗрдмрд▓ рдХрдиреЗрдХреНрдЯрд░ рдИрдерд░рдиреЗрдЯ рдФрд░ рдПрдЪрдбреАрдПрдордЖрдИ рдкреЛрд░реНрдЯ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рдд рд╣реИ:
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрдирд╛
рддреЛ рдЪрд▓реЛ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, OpenCV рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:$ sudo apt-get install libopencv-dev
рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░рд╛рд╕реНрдкрд┐рдХреИрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ редрдЕрдЧрд▓рд╛, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:$ tar xvzf raspicamxx.tgz
$ cd raspicamxx
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig
рдЖрдкрдХреЛ рд░рд╛рд╕рдмреА-рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рд╕реНрдкрд┐рдпрди рдореЗрдВ рдХреИрдорд░рд╛ рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:$ sudo raspi-config
рд╡рд┐рдХрд▓реНрдк 5 рдЪреБрдиреЗрдВ - рдХреИрдорд░рд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЪрдпрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВредрдЖрд░рдУрдПрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИ
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдХреИрдЯрдХрд┐рди рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдмрдирд╛рдПрдВ:$ mkdir -p ~/driverobot_ws/src
$ cd ~/driverobot_ws/src
$ catkin_init_workspace
$ cd ~/driverobot_ws
$ catkin_make
рдПрдХ рдирдпрд╛ ROS рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБ:$ cd src/
$ catkin_create_pkg raspi_cam_ros image_transport cv_bridge roscpp std_msgs sensor_msgs compressed_image_transport opencv2
Catkin_create_pkg рдХрдорд╛рдВрдб рдХрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: catkin_create_pkg <package_name> [depend1] [depend2],рдЬрд╣рд╛рдВ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рддрд╣рдд рдХреЛрдИ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреАредрдпрд╣ рдХрдорд╛рдВрдб ROS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рддрд╛ рд╣реИ: рдиреЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ CMakeLists.txt рдФрд░ package.xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛редрдореБрдЭреЗ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реА рдЬреЛ рдХреИрдорд░реЗ рд╕реЗ рдлреНрд░реЗрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ "рдкреНрд░рдХрд╛рд╢рдХ" (рдкреНрд░рдХрд╛рд╢рдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЖрд░рдУрдПрд╕ рдЗрдВрдбрд┐рдЧреЛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ редрдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ UV4L рдХреИрдорд░рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:$ curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -
рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдХреЛ /etc/apt/source.list рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВdeb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
рд╕рдВрдХреБрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:$ sudo apt-get update
$ sudo apt-get install uv4l uv4l-raspicam
рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдмреВрдЯ рдкрд░, рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрдХреЗрдЬ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:$ sudo apt-get install uv4l-raspicam-extras
рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдкрдиреА CMakeLists.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ редCMakeLists.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЗрдиреЗрдВ:link_directories(/usr/lib/uv4l/uv4lext/armv6l/)
тАж
target_link_libraries(capture ${catkin_LIBRARIES} uv4lext)
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо uv4l рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИредрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрдиреЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:add_executable(capture src/capturer.cpp)
target_link_libraries(capture ${catkin_LIBRARIES} uv4lext)
Add_executable рд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдЗрдирд░реА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ target_link_lbraries рдХреИрдкреНрдЪрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕реЗрд▓рд╛рдкрддрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рднрд░реЗрдВред xml рдлрд╝рд╛рдЗрд▓ рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:<?xml version="1.0"?>
<package>
<name>raspi_cam_ros</name>
<version>0.0.0</version>
<description>The raspi_cam_ros package</description>
<maintainer email="pi@todo.todo">pi</maintainer>
<license>TODO</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>cv_bridge</build_depend>
<build_depend>image_transport</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_depend>opencv2</build_depend>
<build_depend>compressed_image_transport</build_depend>
<run_depend>cv_bridge</run_depend>
<run_depend>image_transport</run_depend>
<run_depend>roscpp</run_depend>
<run_depend>std_msgs</run_depend>
<run_depend>sensor_msgs</run_depend>
<run_depend>opencv2</run_depend>
<run_depend>compressed_image_transport</run_depend>
</package>
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдиреЛрдб рдХреЗ рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ - рдирд╛рдо, рд╕рдВрд╕реНрдХрд░рдг, рд╡рд┐рд╡рд░рдг, рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред Build_depend рдХреА рд░реЗрдЦрд╛рдПрдБ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВ, рдФрд░ run_d рдирд┐рд░реНрднрд░ рд▓рд╛рдЗрдиреЗрдВ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВредSrc рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреИрдкреНрдЪрд░рдХреЙрдкрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдпрд╣рд╛рдБ рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдЪрд┐рдкрдХрд╛рдПрдБ ред рдпрд╣рд╛рдБ рдореБрдЦреНрдп () рд╡рд┐рдзрд┐ рдореЗрдВ, рдиреЛрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рд▓реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:ros::init(argc, argv,"raspi_cam_ros");
ros::NodeHandle n;
UsbCamNode a(n);
a.spin();
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдУрдкрдирд╕реАрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдорд░реЗ рд╕реЗ рдЪрд┐рддреНрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рднрд░рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд░рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред рдпрд╣рд╛рдВ "рдкреНрд░рдХрд╛рд╢рдХ" рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП image_transport рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ uv4l рдбреНрд░рд╛рдЗрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:$ uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --nopreview
рдХреНрдпрд╛ MJPEG рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдмрдирд╛рдПрдЧрд╛редрд╣рдорд╛рд░реЗ ROS рдиреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:$ roscore
$ cd ~/driverobot_ws
$ catkin_make
ROS_PACKAGE_PATH рдЪрд░ рдХрд╛ рдорд╛рди рдЬрд╛рдВрдЪреЗрдВ:echo $ROS_PACKAGE_PATH
/opt/ros/indigo/share:/opt/ros/indigo/stacks
ROS_PACKAGE_PATH рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкрде рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рд╕реНрдерд╛рди рдХреЛ рдкрде рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:$ source devel/setup.bash
рдЕрдм рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ $ ROS_PACKAGE_PATH рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░ рд╣рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:/home/youruser/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
, рдЬрд╣рд╛рдВ / рдШрд░ / <user_name> / catkin_ws / src рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХрд╛ рдорд╛рд░реНрдЧ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ ROS рдХреИрдЯрдХрд┐рди_рд╡реНрд╕ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣рдорд╛рд░реЗ рдиреЛрдбреНрд╕ рдХреЛ "рджреЗрдЦ" рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд░реЛрдЬрд╝реНрд░рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВредрд╣рдорд╛рд░реЗ ROS рдиреЛрдб рдЪрд▓рд╛рдПрдБ:$ rosrun raspi_cam_ros capture
рд╡рд┐рд╖рдп рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓реЗрдЦреАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо rqt_image_view рдХреЛ рдЪрд▓рд╛рдПрдВ:$ rosrun rqt_image_view rqt_image_view
Rqt_image_view рд╡рд┐рдВрдбреЛ рдореЗрдВ image_raw рд╡рд┐рд╖рдп рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдиреЛрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рддреНрд░реБрдЯрд┐ "Gtk-WARNING **: рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИ: -1 ssh рдпрд╛" GdkGLExtxt- рдЪреЗрддрд╛рд╡рдиреА **: рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ** рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо OpenGL рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред " рдЬрдм VNC рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдореЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реЛред рд╕рдорд╛рдзрд╛рди SS11 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЛ X11 рдЕрдЧреНрд░реЗрд╖рдг рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:$ ssh -X pi@<host_pi>
рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реЛрд╕реНрдЯреЛрдкрд┐рдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:rostopic hz image_raw
рдпрд╣ рдХрдорд╛рдВрдб рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рддрд┐ рд╡рд┐рд╖рдп рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИредрдореЙрдбрд▓ рдмреА + рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдерд╛:average rate: 7.905
min: 0.075s max: 0.249s std dev: 0.02756s
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ 8 рд╣рд░реНрдЯреНрдЬ рд╣реИредрдореИрдВрдиреЗ рдЖрд░рдкреАрдЖрдИ 2 рдореЙрдбрд▓ рдкрд░ рдХреИрдорд░реЗ рд╕реЗ рдЪрд┐рддреНрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рднреА рдЬрд╛рдВрдЪреАред рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рдХрдИ рдЧреБрдирд╛ рдмреЗрд╣рддрд░ рдереЗ:average rate: 30.005
min: 0.024s max: 0.043s std dev: 0.00272s
рд╕рдВрджреЗрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 30 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмреА + рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╡реГрджреНрдзрд┐ рд╣реИредOpenCV рдФрд░ ROS рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп-рдЖрдзрд╛рд░рд┐рдд рд░реЛрдмреЛрдЯ рдирд┐рдпрдВрддреНрд░рдг
рдЕрдм рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЛрдмреЛрдЯ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЖрд░рдУрдПрд╕ рдкреИрдХреЗрдЬ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдорд╛рдиреНрдпрддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕) рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░реЛрдмреЛрдЯ рдСрдлрд╕реЗрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, рд░реЛрдмреЛрдЯ рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдг рдиреЛрдб рдЗрд╕ рд╡рд┐рд╖рдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдЧрд╛ рдФрд░ Arduino рдХреЛ рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛редрдЕрдм рдХреИрдкреНрдЪрд░рдХреИрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ "рдкреНрд░рдХрд╛рд╢рдХ" рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╢рд┐рдлреНрдЯ рд╡реИрд▓реНрдпреВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╢рд┐рдлреНрдЯ рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ - std_msgs / Int16ред#include <std_msgs/Int16.h>
rosserial рд╡рд┐рд╢реЗрд╖ рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдорд╛рдирдХ rosserial рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб ros_lib рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ package_name рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ:package_name/msg/Foo.msg тЖТ package_name::Foo
std_msgs::Int16 shift_msg;
рдПрдХ "рдкреНрд░рдХрд╛рд╢рдХ" рдмрдирд╛рдПрдБ:ros::Publisher shift_pub;
рдФрд░ UsbCamNode рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрддреЗ рд╣реИрдВ:shift_pub = nh.advertise<std_msgs/Int16>(тАЬline_shiftтАЭ, 1);
рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕рдХреЗ рдмрд╛рдж, OpenCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрди рд╢рд┐рдлреНрдЯ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ #_dedef OUTPUT_ENABLED рд▓рд╛рдЗрди рд╕реЗ рдкрд╣рд▓реЗ take_and_send_image () рд╡рд┐рдзрд┐ рдореЗрдВ line_shift рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:
shift_msg.data = offset;
shift_pub.publish(shift_msg);
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд░реЗрдбреАрдореЗрдб рд▓рд╛рдЗрди-рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдардХ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рддрд░реНрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИредрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрджреЗрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:$ rosmsg show std_msgs/Int16
рдЕрдм рдиреЛрдб рдЪрд▓рд╛рдПрдБ:$ rosrun raspi_cam_ros capturer
рд╣рдо рд╡рд┐рд╖рдп рдкрдВрдХреНрддрд┐_рд╢рд┐рдлреНрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдореЗрдВ рд░реЛрд╕реНрдЯреЛрдкрд┐рдХ рдЗрдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:$ rostopic echo line_shift
рдЕрдм рд░реЛрдмреЛрдЯ рдирд┐рдпрдВрддреНрд░рдг рдиреЛрдб рдореЗрдВ рдПрдХ "рдЧреНрд░рд╛рд╣рдХ" рдЬреЛрдбрд╝реЗрдВред рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:#include <std_msgs/UInt16.h>
рдлрд┐рд░ рд╣рдо рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╖рдп рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИредvoid messageCb(const std_msgs::UInt16& message)
{
int shift_val = int(message.data);
char* log_msg;
if(shift_val < 0) log_msg = "Left";
else if(shift_val > 0 ) log_msg = "Right";
else log_msg = "Forward";
nh.loginfo(log_msg);
}
рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рд╕рдВрджрд░реНрдн рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПредрд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рд╛рдЗрди рдСрдлрд╝рд╕реЗрдЯ рдХреА рджрд┐рд╢рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рдЖрдк рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░реЛрдмреЛрдЯ рдЧрддрд┐ рддрд░реНрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВредрд╡рд┐рд╖рдп line_shift рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдПрдБредros::Subscriber<std_msgs::UInt16> sub("line_shift", &messageCb);
рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо рдФрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВредрдЖрдЧреЗ rosserial_arduino рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕реНрдХреЗрдЪ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЖрддреА рд╣реИрдВ:void setup()
{
nh.initNode();
nh.subscribe(sub);
Serial.begin(57600);
}
void loop()
{
nh.spinOnce();
delay(100);
}
рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ "рд╕рджрд╕реНрдпрддрд╛" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП nh.subscribe (рдЙрдк) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВредрд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреЗрдЪ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редрдЫреЛрдЯреА рдЪрд╛рд▓! рдЖрд░рдУрдПрд╕ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд▓реЙрдиреНрдЪ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рд▓реЙрдиреНрдЪ рдлрд╛рдЗрд▓реЗрдВ xml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдиреЛрдбреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рдиреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗредрдЖрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди rosserial_python рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред$ cd <catkin_ws>/src
$ catkin_create_pkg rosserial_controller
$ cd src/rosserial_controller
$ vim rosserial_controller.launch
рд╣рдо рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:<launch>
<node pkg="rosserial_python" type="serial_node.py" name="arduino_serial">
<param name="port" value="/dev/ttyACM0"/>
</node>
</launch>
рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:$ cd ~/<catkin_ws>
$ catkin_make
$ source devel/setup.bash
$ roslaunch rosserial_controller rosserial_controller.launch
рд╣рдо rqt_plot рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ line_shift рдереАрдо рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :$ rqt_plot line_shift
рдЕрдм рдЖрдк рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдФрд░ OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд░реЛрдмреЛрдЯ, рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛, рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рджреГрд╢реНрдп рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВ!рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдХрд░ рд░реЛрдмреЛрдЯ рдХреЛ рдЯреЗрд▓реАрдкреНрд░реЗрд╢рди рдореЛрдб рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗредрдкреБрдирд╢реНрдЪред рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧреА рдЪреАрдЯ рд╢реАрдЯ рд╣реИрдВ - рдЖрд░рдУрдПрд╕ рдЪреАрдЯрд╢реАрдЯред рдЖрд░рдУрдПрд╕ рдЗрдВрдбрд┐рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред