开发环境初始化配置

 

1.安装矢量图制作工具: 

sudo add-apt-repository ppa:inkscape.dev/stable
sudo apt-get update
sudo apt-get install inkscape

图像转svg

sudo apt install potrace

r

Workspace创建

mkdir -p first_ws/src

编译工作空间

cd first_ws
catkin_make

 Package创建

来到workspace的src目录下

cd first_ws/src
catkin_create_pkg demo_cpp roscpp rospy rosmsg

 

启动ROS Master

roscore

 

catkin 编译脚本

catkit_make_source.sh

用 source catkit_make_source.sh 命令启动

#!/bin/bash
catkin_make
if [[ $? != 0 ]]; then
echo 'catkin_make :error'
else
echo 'catkin_make :ok'
source devel/setup.bash
echo 'source devel/setup.bash :ok'
fi

启动clion脚本

clion_start.sh

#!/bin/bash
bash ~/CLion-2020.1.1/clion-2020.1.1/bin/clion.sh

进入指定文件夹的shell脚本

inWorkspaceWorkProject.sh

用控制台命令:  source inWorkspaceWorkProject.sh  启动

或者 . ./inWorkspaceWorkProject.sh 命令运行脚本,第二个命令注意两个点之间是有空格的;

#!/bin/bash
cd ~/workspace/ros_work5

9.robot.czxy.com 笔记网站

 

查看摄像头
ll /dev/video*  
查询 c++ 库中的方法函数 
进opencv_env/opencv-3.4.9 目录下
grep -rniI "cornerHarris(" *
grep -rniI "cornerHarris(" * --include=*.cpp
 
制作 命令台命令:
通过一个命令启动
例如:
在 ~/.bashrc 中加入
alias sd='source devel/setup.sh'
在命令台中就可以使用 sd 命令
 

多机部署ros 

# 多机部署ros

> 主机和从机要在同一个局域网内

1. 主机添加在hosts中添加所有节点的ip和主机名(主机配置)

   ```bash
   sudo gedit /etc/hosts
   ```

   > ip  主机名

2. 从机配置master节点服务(主机不用修改)

   ```bash
   sudo gedit ~/.bashrc
   
   export ROS_HOSTNAME=本机ip
   
   export ROS_MASTER_URI=http://主机ip:11311

ros_视觉USB驱动集成

# USB驱动集成

## 下载驱动

来到工作空间下的src目录,下载驱动到当前目录:

```bash
# 下载
cd ws/src
git clone https://github.com/ros-drivers/usb_cam

# 编译
cd ws
catkin_make
```

## rosrun调试

1. 运行`usb_cam`节点

   ```bash
   rosrun usb_cam usb_cam_node
   ```

2. 图像调试

   ```bash
   rosrun image_view image_view image:=/usb_cam/image_raw
   ```

## roslaunch调试

```bash
roslaunch usb_cam usb_cam-test.launch
```

## 参数说明

`usb_cam`配置信息是通过rosparam来进行设置的。

|        参数        |    默认值     |                             说明                             | 编程关注度 |
| :----------------: | :-----------: | :----------------------------------------------------------: | :--------: |
|    video_device    | `/dev/video0` |                       设置使用哪部相机                       |   ★★★★★    |
|    image_width     |      640      |                       输出图片像素宽度                       |   ★★★★★    |
|    image_height    |      480      |                       输出图片像素高度                       |   ★★★★★    |
|    pixel_format    |    `mjpeg`    | 像素格式。取值范围: `yuyv`, `uyvy`, `mjpeg`, `yuvmono10`, `rgb24` 建议使用`yuyv` |   ★★★★★    |
|     framerate      |      30       |                  采样率,每秒钟采样30张图片                  |    ★★★     |
|     brightness     |      -1       |                       亮度。取值0~255                        |    ★★★     |
|      contrast      |      -1       |                      对比度。取值0~255                       |    ★★★     |
|     saturation     |      -1       |                      饱和度。取值0~255                       |    ★★★     |
|     sharpness      |      -1       |                       锐度。取值0~255                        |    ★★★     |
|     io_method      |    `mmap`     |               读取方式.`mmap`,`read`,`userptr`               |     ★      |
|     autofocus      |    `false`    |                           自动聚焦                           |     ★      |
|       focus        |      -1       |                         聚焦值.0~255                         |     ★      |
|    autoexposure    |    `false`    |                           自动曝光                           |     ★      |
|      exposure      |      100      |                           曝光值.                            |     ★      |
|        gain        |      -1       |                      曝光增益值。0-100                       |     ★      |
| auto_white_balance |    `false`    |                         自动白平衡。                         |     ★      |
|   white_balance    |     4000      |                          白平衡值。                          |     ★      |
|  camera_frame_id   | `head_camera` |                 标记当前帧是什么设备拍摄的。                 |     ★      |

# 图像数据转换

## CvBridge介绍

![](img/2.png)

CvBridge主要解决的问题是将Ros的Image数据与OpenCv的Image数据进行相互转换。

**Ros Image to OpenCv Image场景**

通常Ros Node和相机硬件进行数据交互,最终拿到的是 Ros Image类型数据。

对于这种数据,我们希望通过OpenCv库进行图片数据的操作。但是OpenCv需要的是Mat类型的数据。

因此,需要进行数据类型的转换。这种场景主要是需要对图片进行一下业务操作。

**OpenCv Image to Ros Image 场景**

OpenCv图片操作完成后的数据是Mat类型的,在业务场景中,如果其他节点需要这个数据的话,是需要订阅这种数据的。在Ros中,OpenCV的Mat数据是不可以在节点与节点间进行传输的,要传输只可以采用Ros的Image类型进行传输。此时就需要将OpenCv的Mat数据转换为Ros 的Image类型。

##  RosImage to CvMat(c++)

**依赖配置**

1. package.xml配置

   ```xml
     sensor_msgs
     sensor_msgs
     sensor_msgs
   
     cv_bridge
     cv_bridge
     cv_bridge
   
     image_transport
     image_transport
     image_transport
   ```

2. CMakeLists.txt配置

   ```cmake
   find_package(catkin REQUIRED COMPONENTS
       roscpp
       rosmsg
       rospy
   
       sensor_msgs
       cv_bridge
       image_transport
   )
   ```

3. 引入opencv库

   ```cmake
   find_package(OpenCV REQUIRED)
   ```

4. 添加链接库

   ```cmake
   target_link_libraries(image_subscriber
       ${catkin_LIBRARIES}
       ${OpenCV_LIBS}
   )
   ```

**转换代码**

1. 引入头

   ```c++
   #include 
   #include 
   #include 
   #include 
   #include 
   #include "sensor_msgs/Image.h"
   ```

2. 转换逻辑

   ```c++
   void topicCallback(const sensor_msgs::ImageConstPtr &msg) {
     const cv_bridge::CvImageConstPtr &ptr = cv_bridge::toCvShare(msg);
     cv::Mat mat = ptr->image;
     ...
   }
   ```

查看相机:

开发环境初始化配置_第1张图片

 

开发环境初始化配置_第2张图片

 

notepadqq

 

你可能感兴趣的:(python,c++,ros)