实验设计 | ICRA工作交接

[2020/11/23] 文章更新

更新以下两篇文章,2021的同学,遇到相关问题的记得回来看:
实验设计 | 开发环境配置
实验设计 | 绑定串口

2020-2021 TDT ICRA人工智能挑战赛交接工作,主要包括以下两个部分:

  1. ros基础知识
  2. 视觉代码交接

1. ros基础知识

ROS( Robot Operating System)是一个机器人操作系统的软件框架,允许用户利用前人的资源做自己的开发。本讲的ros基础知识包括:创建工作空间ros常用概念,仅仅涉及很基础的内容,更深的内容需要各位在实践过程中慢慢探索。

1.1 创建工作空间

//-- step1:home下创建catkin_ws文件夹并进入
tdt@tdt:~$ mkdir catkin_ws 
tdt@tdt:~$ cd catkin_ws

//--step2:创建src文件夹并进入 
tdt@tdt:~/catkin_ws$ mkdir src
tdt@tdt:~/catkin_ws$ cd src 

//--step3 初始化工作空间
tdt@tdt:~/catkin_ws/src$ catkin_init_workspace 
/*
Creating symlink "/home/tdt/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
*/

//--step4:编译,必须在catkin_ws路径下
tdt@tdt:~/catkin_ws/src$ cd ..
tdt@tdt:~/catkin_ws$ catkin_make 

//--step5:~/.bash文件添加工作空间路径
//	打开~/.bashrc
tdt@tdt:~$ sudo gedit ~/.bashrc
//	添加如下内容:
source ~/catkin_ws/devel/setup.bash
//	路径生效
tdt@tdt:~/catkin_ws$ source devel/setup.bash 

编译通过后,在catkin_ws下生成两个文件夹 builddevel
build :编译空间(build space),为功能包和项目保存缓存信息、配置和其他中间文件。
devel:开发空间(Development space),用来保存编译后的程序。这个文件夹稍微重视一下,编译生成的可执行文件、一些消息或服务生成的头文件都保存在这个文件夹下。

1.2 ros 常用概念

在算法开发过程中,会经常用到以下概念:功能包、节点、话题、消息、服务。本小结针对这些概念的实际应用进行展开讲解

1.2.1 功能包

  1. 创建功能包
//-- 创建功能包
tdt@tdt:~/catkin_ws$ cd src 
tdt@tdt:~/catkin_ws/src$ catkin_create_pkg tuto1 std_msgs roscpp rospy 

功能包名:tuto1
依赖项 :std_msgs roscpp rospy 
  1. package.xml

  2. CMakeList.txt

1.2.2 节点

1.2.3 消息

1.2.4 话题

2.2.5 服务

ROS中有四种通信方式:Topic(话题)、Service(服务)、Parameter Serivce(参数服务器)、Actionlib(动作库)。

所谓通信,ros中每个程序包是一个node(节点),通信就是节点与节点间的数据传输,在这里简要介绍一下话题与服务
在这里插入图片描述
node: 本小节快捷键整理

[1]: 创建文件夹
mkdir [folderName]

[2]: 进入文件夹
cd [folderName]

[3]:返回上一级路径 || 指定路径
cd ..
cd ../[指定路径]

[4] 打开终端
Ctrl + Alt +t

[5] 在第一个终端下打开多个同路径的终端
Ctrl + Shift +t

[6]:多个终端之间切换
Alt + num (num= 1 2 3 ...)

[7] 删除文件
rm -r * 		 	//! 删除路径下所有文件
rm -r [faileNmae]	//! 删除指定文件
[8] 截图命令
gnome-screenshot -i

2. 视觉代码交接

2.1 大疆官方文档

https://robomaster.github.io/RoboRTS-Tutorial/#/README

2.2 视觉代码

视觉代码包含四个功能包:roborts_camera、beginner_tutorials、roborts_detection、udp_socket

2.2.1 roborts_camera

驱动相机,将相机的图像用话题发布。beginner_tutorials和roborts_detection订阅该话题,获得相机的数据。

|——cmake_module
|——config					//! 相机配置文件
|	|——camera_param.prototxt
|
|——HKVision					//!海康相机
|——proto		 			//! camera_param.prototxt编译生成文件
|	|——camera_param.pb.cc
|	|——camera_param.pb.h
|	|——camera_param.proto
|
|——test
|	|——image_capture.cpp
|	
|——uvc						//! 免驱相机
|	|——uvc_driver.cpp
|	|——usc_driver.h
|	|——CMakeList.txt
|
|——camera_base.h
|——camera_base.cpp
|——camera_node.h
|——camera_node.cpp		    //! 相机节点
|——camera_param.h
|——camera_param.cpp
|——CMakeList.tst
|——package.xml

这个功能包的目的就是打开相机,获取数据并发布。没有特殊的需求这部分代码不用修改。需要说明的一点:同时驱动多个相机

  1. 代码部分
    多线程实现,同时驱动多个相机。
  2. 配置文件
    配置文件路径: config/camera_param.prototxt
    配置文件包含了相机的参数信息,修改配置文件的参数不需要编译。每个相机需要一个camera:{} ,代码根据配置文件的路径读取信息,根据读到的配置文件信息来确定有几个相机。
    node:有几个相机就添加几个相机的参数信息
## 免驱相机
camera: {
  camera_name: "back_camera"
  camera_type: "uvc"
  camera_path: "/dev/video0"

  camera_matrix {
    data: 839.923052
    data: 0.0
    data: 340.780730
    data: 0.0
    data: 837.671081
    data: 261.766523
    data: 0.0
    data: 0.0
    data: 1.0
  }

  camera_distortion {
    data: 0.082613
    data: 0.043275
    data: 0.002486
    data: -0.000823
    data: 0.0
  }

  resolution {
    width: 640
    height: 480

    width_offset: 0
    height_offset: 0
  }

  fps: 100
  auto_exposure: 1
  exposure_value: 100#70
  exposure_time: 10
  auto_white_balance: 1
  auto_gain: 0
}
## 海康相机
camera:{
      camera_name: "back_camera1"
      camera_type: "HKVision"
      camera_path: "/dev/video1"
    camera_matrix {
      data: 1300.455871428321
      data: 0.0
      data: 341.8607823111971
      data: 0.0
      data: 1300.351036374975
      data: 279.9303380631039
      data: 0.0
      data: 0.0
      data: 1.0
    }

   camera_distortion {
      data: -0.4219849884671862
      data: -1.910835890478247
      data: -0.004344812206035102
      data: -9.443710934940395e-05
      data: 18.72987642778579
   }
    resolution {
	width:1440#640
	height:1080#480#360#?s

	width_offset: 0
	height_offset: 0
    }

      fps:100
      auto_exposure:0#1
      exposure_value:5000#10#70
      #2:RED:9000 #2 NOW PROGRAM BLUE 9000
      exposure_time: 10
      auto_white_balance: 1
      auto_gain: 0#1
}

2.2.2 beginner_tutorials

哨岗分区,将场地分为编号为1、2、3、4、5、6的六个区域。

  1. 约束方程 y=ax+b;
  2. 参数校准
|——include
|	|——beginner_tutorials
|
|——src
|	|——listener.cpp
|	|——talker.cpp				//! 哨岗分区约束条件参数获取
|	|——cameraCalibration.cpp	//!相机标定
|
|——CMakeList.txt
|——package.txt

Fig1.场地分区

在这里插入图片描述
在这里插入图片描述代码执行:

//-- step1 打开相机节点
tdt@tdt:~/catkin_ws$ sudo su 	//!打开海康相机,必须申请root权限
[sudo] tdt 的密码:tdt 
root@tdt:/home/tdt/catkin_ws# source devel/setup.bash 
root@tdt:/home/tdt/catkin_ws# rosrun roborts_camera roborts_camera_node 
//-- step2 打开参数校准节点
tdt@tdt:~/catkin_ws$ rosrun beginner_tutorials listener 

2.2.3 roborts_detection

视觉主算法,说明以下几点:

  1. 该部分代码结构混乱,可以考虑重新布置结构。
  2. 装甲板识别算法与国赛相同
  3. 新增视觉标签的识别算法
|——cmake_module
|	|——FindEigen3.cmake
|	|——FindProtoBuf.cmake
|	
|——util
|	|——cv_toolbox.h		//! 工具,图像话题接收
|	|——CMakeList.txt
|
|——armor_detection
|	|——config
|	|	|——armor_detection.prototxt
|	|	|——armor_detection1.prototxt
|	|
|	|——proto
|	|	|——armor_detection.pb.cc
|	|	|——armor_detection.pb.h
|	|	|——armor_detection.proto
|	|
|	|——constraint_set	//! 算法
|	|	|——config
|	|	|——model
|	|	|——proto
|	|	|——constraint_set.h
|	|	|——constraint_set.cpp
|	|	|——macro.h
|	|	|——macro.cpp
|	|	|——predict.h
|	|	|——predict.cpp
|	|	|——CMakeList.txt
|	|	|——package.xml
|	|	
|	|——armor_detection_algorithm.h
|	|——armor_detection_base.h
|	|——armor_detection_client.cpp
|	|——armor_detection_node.h
|	|——armor_detection_node.cpp		//! 免驱相机节点:处理视觉标签
|	|——armor_detection_node1.h
|	|——armor_detection_node1.cpp	//! 海康相机节点:处理装甲板
|	|——gimbal_control.h
|	|——gimal_control.cpp
|	|——CMakeList.txt
|
|——CMakeList.txt
|——package.xml

执行代码

//-- step1 打开相机节点
tdt@tdt:~/catkin_ws$ sudo su 	//!打开海康相机,必须申请root权限
[sudo] tdt 的密码:tdt 
root@tdt:/home/tdt/catkin_ws# source devel/setup.bash 
root@tdt:/home/tdt/catkin_ws# rosrun roborts_camera roborts_camera_node 
//-- step2 运行装甲板识别节点
tdt@tdt:~/catkin_ws$ rosrun roborts_detection armor_detection_node1   //海康相机节点
//-- step2 视觉标签识别节点
tdt@tdt:~/catkin_ws$ rosrun roborts_detection armor_detection_node   //免驱相机节点

node: 装甲板识别节点和视觉标签识别节点是相互独立的,可以根据需求运行。即,可以同时打开也可以根据需求选择某一个打开

2.2.4 udp_socket

通讯功能包,实现哨岗和场地机器人的通讯。

|——scripts
|	|——killServer.sh
|	|——l-runClient.sh
|	|——l-runServer.sh
|	
|——src
|	|——udp_recv.cpp		//! 接收
|	|——udp_send.cpp		//! 发送
|
|——CMakeList.txt
|——package.xml

参考
[1]: ros.org (ros官网)
[2]: ROS机器人高效编程
[3]: 大疆官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值