рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ - рднрд╛рдЧ 2

рд╢реБрдн рджреЛрдкрд╣рд░, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ , рдореИрдВрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд░рдУрдПрд╕ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЖрд░рдУрдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреМрди рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред


рдХреИрдорд░рд╛ рдЖрд░рдкреАрдЖрдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб


рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдРрд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреИрдорд░рд╛ рдмреЛрд░реНрдб
рдЫрд╡рд┐

рдХреИрдорд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдпрд╣ рдХреИрдорд░рд╛ рд╕реАрдзреЗ рдмреЛрд░реНрдб рдкрд░ рдПрдХ рд╕реАрдПрд╕рдЖрдИ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрдкреАрдпреВ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреИрдорд░реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ 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 рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:

// Some logic for the calculation of offest
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 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд░реЛрдмреЛрдЯ, рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛, рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рджреГрд╢реНрдп рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВ!
рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдХрд░ рд░реЛрдмреЛрдЯ рдХреЛ рдЯреЗрд▓реАрдкреНрд░реЗрд╢рди рдореЛрдб рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдкреБрдирд╢реНрдЪред рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧреА рдЪреАрдЯ рд╢реАрдЯ рд╣реИрдВ - рдЖрд░рдУрдПрд╕ рдЪреАрдЯрд╢реАрдЯред рдЖрд░рдУрдПрд╕ рдЗрдВрдбрд┐рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/hi388927/


All Articles