在Jetson Nano上实现单目相机 apritag_ros识别

2023-05-16

一,apritag_ros安装

最开始采用克隆源码编译的方式进行安装,后来在Jetson nano上有opencv4与opencv3的依赖问题,后来索性直接采用二进制安装:

sudo apt-get install ros-melodic-apriltag-ros

二,单目相机数据读取

这里使用的是uvc_camera包:
launch文件:
这里使用了命名空间head_camera
head_camera为相机标定参数存放位置

  <launch>
  <group ns="head_camera">
    <node pkg="uvc_camera" type="uvc_camera_node" name="head_camera" output="screen">
	<param name="width" type="int" value="640" />
	<param name="height" type="int" value="480" />
	<param name="fps" type="int" value="30" />
    <param name="frame_id" type="string" value="head_camera" />
	<param name="auto_focus" type="bool" value="False" />
	<param name="focus_absolute" type="int" value="0" />
	<param name="device" type="string" value="/dev/video1" /> 
	<param name="camera_info_url" type="string" value="file://$(find cyrobot)/param/camera/head_camera.yaml" />
   </node>
 </group>
</launch>

三,单目相机标定

安装标定包:

sudo apt-get install ros-melodic-camera-calibration

标定命令:

rosrun camera_calibration cameracalibrator.py --size 7x5 --square 0.0245 image:=/image_raw camera:=/camera --no-service-check

(1)–size 7x5 为棋盘内部角点的个数,方格几列几行(需要减1),比如我的标定板方格是8X6,则siez为7x5。
(2)–square 0.0245为每个棋盘格的边长
(3)image:=/image_raw 为当前订阅的图像来自名为/image_raw的topic
(4)camera:=/head_camera为摄像机名 主要用于COMMIT时自动更新内参参数

  1. 移动标定板:

为了达到良好的标定效果,需要在摄像机周围移动标定板,并完成以下基本需求:
(1)移动标定板到画面的最左、右,最上、下方。
(2)移动标定板到视野的最近和最远处。
(3)移动标定板使其充满整个画面。
(4)保持标定板倾斜状态并使其移动到画面的最左、右,最上、下方 。
当标定板移动到画面的最左、右方时,此时,窗口的x会达到最小或满值。同理,y指示标定板的在画面的上下位置,size表示标定板在视野中的距离,也可以理解为标定板离摄像头的远近。skew为标定板在视野中的倾斜位置。每次移动之后,请保持标定板不动直到窗口出现高亮提示。
直到条形变为绿色。当calibration按钮亮起时,代表已经有足够的数据进行摄像头的标定,此时请按下calibration并等待一分钟左右,标定界面会变成灰色,无法进行操作,属于正常情况。

在这里插入图片描述

界面灰色恢复后,点击save,就会自动保存在tmp目录:

在这里插入图片描述

进入tmp目录解压:

在这里插入图片描述

解压出的ost.yaml即为标定结果
接着转换格式:

rosrun camera_calibration_parsers convert ost.yaml camera.yaml

在这里插入图片描述
转换出的camera.yaml即为标准的ROS内参格式
接着填入内参yaml参数:
需要注意的是我这里使用的uvc_camera功能包貌似只支持的camera_name 为camera的单目相机类型,写为front_camera或back_camera均会报错

image_width: 640
image_height: 480
camera_name: camera
camera_matrix:
  rows: 3
  cols: 3
  data: [626.3262036036353, 0, 300.5591565230002, 0, 627.3720075547461, 244.4302177150301, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.1367930342496266, -0.1715444663163723, 0.001436032994469869, -0.00732797305912324, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [643.0006713867188, 0, 296.6836730995783, 0, 0, 648.4296875, 244.9678966293577, 0, 0, 0, 1, 0]

四,apriltag识别:

启动功能包:

roslaunch apriltag_ros continuous_detection.launch

查看launch内容,发现需要配置如下:
修改camera_name与image_topic为自己实际使用的

<launch>
  <arg name="launch_prefix" default="" /> <!-- set to value="gdbserver localhost:10000" for remote debugging -->
  <arg name="node_namespace" default="apriltag_ros_continuous_node" />
  <arg name="camera_name" default="/camera_rect" />
  <arg name="image_topic" default="image_rect" />

  <!-- Set parameters -->
  <rosparam command="load" file="$(find apriltag_ros)/config/settings.yaml" ns="$(arg node_namespace)" />
  <rosparam command="load" file="$(find apriltag_ros)/config/tags.yaml" ns="$(arg node_namespace)" />
  
  <node pkg="apriltag_ros" type="apriltag_ros_continuous_node" name="$(arg node_namespace)" clear_params="true" output="screen" launch-prefix="$(arg launch_prefix)" >
    <!-- Remap topics from those used in code to those on the ROS network -->
    <remap from="image_rect" to="$(arg camera_name)/$(arg image_topic)" />
    <remap from="camera_info" to="$(arg camera_name)/camera_info" />

    <param name="publish_tag_detections_image" type="bool" value="true" />      <!-- default: false -->
  </node>
</launch>

其中还要修改两个识别配置文件:
找到apriltag的安装目录,更改config:

在这里插入图片描述

settings.yaml:
我这里打印的为tag36h11类型的

tag_family:        'tag36h11' # options: tagStandard52h13, tagStandard41h12, tag36h11, tag25h9, tag16h5, tagCustom48h12, tagCircle21h7, tagCircle49h12  #支持单一标签类型
tag_threads:       2          # default: 2           # 设置Tag_Threads允许核心APRILTAG 2算法的某些部分运行并行计算。 典型的多线程优点和限制适用
tag_decimate:      1.0        # default: 1.0       #减小图像分辨率
tag_blur:          0.0        # default: 0.0            #设置tag_blur> 0模糊图像,tag_blur  < 0锐化图像
tag_refine_edges:  1          # default: 1       #增强了计算精度,但消耗了算力
tag_debug:         0          # default: 0            #1为保存中间图像到~/.ros
max_hamming_dist:  2          # default: 2 (Tunable parameter with 2 being a good choice - values >=3 consume large amounts of memory. Choose the largest value possible.)
# Other parameters
publish_tf:        true       # default: false       #发布tf坐标

tags.yaml
standalone_tags中需要依次填入所有需要识别的tag对应的id与size,size的话填边长,需要尽量准确,可以提高识别准确率

standalone_tags:
  [
    {id: 0, size: 0.033,name: "home"},   #size对应标签的大小
    {id: 1, size: 0.066},
    {id: 2, size: 0.04},
    {id: 3, size: 0.07},
    {id: 4, size: 0.045}
  ]
tag_bundles:
  [
  ]

接下来运行launch,即可进行识别
在这里插入图片描述

参考:
https://blog.csdn.net/lemonxiaoxiao/article/details/107719348
https://blog.csdn.net/qq_25241325/article/details/82705003

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Jetson Nano上实现单目相机 apritag_ros识别 的相关文章

  • 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 最近 作者参加了关于RMUS 高校 SimReal挑战赛 首次接触到了机器人导航领域 这里记录一下这段时间的收货 sim2real的全称是simulation to reality 是强化学习的一个分支 同时也属于transfer l
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • 激光雷达LMS111在ROS上的使用

    LMS111 10100 在ROS上的测试与使用 准备工作 设备 硬件 LMS111 101000激光雷达 软件 ubuntu16 04 ROS 开始 设备连接 将激光雷达与处理器 电脑 工控机等 通过以太网连接好 激光雷达默认的IP地址为
  • ROS 笔记(01)— Ubuntu 20.04 ROS 环境搭建

    ROS 官网 https www ros org ROS 中文官网 http wiki ros org cn 1 系统和 ROS 版本 不同的 ROS 版本所需的 ubuntu 版本不同 每一版 ROS 都有其对应版本的 Ubuntu 切记
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • 在 Python 中通过管道传输到脚本时无法启动交互式程序

    我有一个 python 脚本需要调用定义的 EDITOR or VISUAL 当单独调用 Python 脚本时 我可以启动 EDITOR没有任何问题 但是当我将某些内容传输到 Python 脚本时 EDITOR无法启动 现在 我正在使用 n
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • bash:nano:在 Windows git bash 中找不到命令

    我在 Windows 电脑上使用 git 版本 2 7 0 windows 1 我使用了以下命令 nano README 结果我 bash nano command not found 现在如何将 Nano 文本编辑器安装到 git bas
  • ROS 问题:libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

    当我跑步时 rosrun turtlesim turtlesim node 在 Ubuntu 上 我收到以下消息 opt ros noetic lib turtlesim turtlesim node 加载共享库时出错 libQt5Core
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件

随机推荐

  • Ubuntu 18.04 ———(Intel RealSense D435i)运行VINS-Mono

    Intel RealSense D435i 一 准备工作二 修改参数rs camera launchrealsense color config yaml 参考文献 一 准备工作 1 Intel Realsense D435i Ubuntu
  • RPLIDAR全面兼容ROS系统,赋能Mini款无人驾驶汽车

    从技术角度来说 xff0c 无人驾驶系统可分为环境感知 智能规划和决策 自适应控制和车辆底层线控四部分 感知系统主要是通过激光雷达 视觉 惯导等传感器获取 xff0c 并通过数据处理 xff0c 形成决策 目前 xff0c 单线激光雷达用在
  • 激光雷达在机器人中的避障方案

    如今 xff0c 在各种商用场景中服务机器人已屡见不鲜 xff0c 对于一些在餐厅 酒店等地的服务机器人来说 xff0c 往往会面临应用环境复杂多变的情况 xff0c 这就对机器人的避障能力提出了很大的挑战 xff0c 避障是指移动机器人根
  • 单片机的查询和中断两种方式怎么从程序里面看出来

    查询方式就是对某一标志位的不停检测 xff0c 直到发生变化 xff0c 例如 xff0c 汇编 xff1a LOOP JBC TF1 L 查询计数器是否溢出 xff0c 若溢出转L SJMP LOOP xff1b 无溢出转LOOP xff
  • 【STM32】SPI的基本原理、库函数(SPI一般步骤)

    STM32F1xx官方资料 xff1a STM32中文参考手册V10 第23章 串行外设接口SPI SPI的基本介绍 SPI的简介 SPI xff0c 是英语Serial Peripheral interface的缩写 xff0c 顾名思义
  • win10下安装emqx

    下载 进入官网EMQ 点击下载 xff08 这是我所选择的一个版本 xff09 装解压EMQ 1 把下载的EMQ解压到D盘 xff0c 得到一个emqx文件夹 2 启动EMQ step1 Win10 系统的 开始 右键 进入win10 系统
  • Apollo ROS原理(一)

    一 背景介绍 为什么选择ROS 高效的开发支持 1 具有完整的包管理和工程结构 2 庞大的基础库 3 多语言接口支持 模块灵活配置 1 消息驱动的异步运行模型 2 抽象的P2P通信接口 3 自定义的消息格式 丰富的调试工具 1 具有可视化的
  • Java 模板变量替换(字符串、占位符替换)

    1 org apache commons text 变量默认前缀是 xff0c 后缀是 lt dependency gt lt groupId gt org apache pdfbox lt groupId gt lt artifactId
  • Ubuntu16.04——推荐几个Ubuntu16.04镜像下载链接

    ubuntu16 04下载地址 xff1a 中科大源 xff1a http mirrors ustc edu cn ubuntu releases 16 04 阿里云开源镜像站 xff1a http mirrors aliyun com u
  • Matlab中计算程序运行时间的三种方法

    经常我们需要计算我们程序到底运行多长时间 xff0c 这样可以比较程序的执行效率 当然这个对于只有几秒钟的小程序没有什么意义 xff0c 但是对于大程序就有很重要的意义了 下面我们就说说MATLAB中计算程序运行时间的三种常用方法吧 xff
  • 经典力学(动力学)——刚体的转动

    目录 刚体的定轴转动 力矩刚体刚体转动的角速度和角加速度匀变速转动公式角量与线量的关系力矩 转动惯量 转动定律质点的转动惯量 角动量 角动量守恒定律角动量刚体定轴转动的角动量 力矩做功 刚体定轴转动的动能定理力矩做功刚体绕定轴转动的动能定理
  • 转动惯量到底是个什么物理量

    转动惯量 xff0c 对于大多数人可能都很难理解 xff0c 这个问题也困惑博主很久 xff0c 最近本人需要用到建模知识 xff0c 在回顾大学物理时重新学习了什么是转动惯量 xff0c 同时也是参考了几篇博文和知乎文章才基本理解 本人秉
  • ubuntu常见问题及解决方案——yr 不在 sudoers 文件中,此事将被报告,同时,su无法验证的解决办法

    昨晚因为改编译错误 xff0c 修改了sudoers里的内容 xff0c 导致 xff08 1 xff09 用户名 不在sudoers文件中 xff0c 同时 xff0c xff08 2 xff09 su无法验证的解决办法 对于问题 1 网
  • ROS1——ROS自定义消息格式配置相关

    在使用ROS时 xff0c 其自带的消息格式已经使开发人员很方便 xff0c 但是仍然避免不了会有一些特别的消息需要自己去定义 xff0c 此时 xff0c 就需要了解ROS中如何编写配置自定义消息格式 1 新建filename msg文件
  • 百度Apollo规划算法——轨迹拼接

    百度Apollo规划算法 轨迹拼接 引言轨迹拼接1 什么是轨迹拼接 xff1f 2 为什么要进行轨迹拼接 xff1f 3 结合Apollo代码为例理解轨迹拼接的细节 参考 引言 在apollo的规划算法中 xff0c 在每一帧规划开始时会调
  • Ubuntu16.0 ——安装串口驱动

    Ubuntu16 0 安装串口驱动 步骤一 在终端输入sudo apt get install minicom安装串口驱动 步骤二 在终端输入sudo minicom s打开串口配置窗口如下图 使用方向键 选择 Serial port se
  • 串口通信

    1 什么是串口通信 xff1f 串口通信 xff08 Serial CommunicaTIon xff09 xff0c 是指外设和计算机间 xff0c 通过数据信号线 地线等 xff0c 按位进行传输数据的一种通讯方式 串口是一种接口标准
  • Linux 网络开发必学课程(七)UDP 数据收发实战、深入UDP 数据收发

    15 UDP 数据收发实战 再论 UDP 协议 UDP 是无连接的 不可靠的 xff0c 无应答消息 xff0c 数据包无序号标识 UDP 是面向数据包的 xff0c 对应用层数据既不合并也不拆分 xff08 保留数据包边界 xff0c 不
  • Java 删除非空文件夹

    Java中的File delete 方法只能删除文件或者空文件夹 xff0c 无法删除非空文件夹 xff0c 当是非空文件夹时 xff0c 方法返回false xff0c 下面写一个工具类 xff0c 采用递归方式 xff0c 实现删除非空
  • 在Jetson Nano上实现单目相机 apritag_ros识别

    一 xff0c apritag ros安装 最开始采用克隆源码编译的方式进行安装 xff0c 后来在Jetson nano上有opencv4与opencv3的依赖问题 xff0c 后来索性直接采用二进制安装 xff1a sudo apt g