ROS[aruco_ros+easy_handeye]手眼标定(眼在手外+UR10e+realsense-d435i)
参考链接:
https://zhuanlan.zhihu.com/p/576861119
https://blog.csdn.net/qq_32618327/article/details/120730198
本次在Docker中使用
-
打印Aruco码:https://chev.me/arucogen/
选择
Dictionary
为 Original ArUco(aruco_ros默认这个,如果选其他的可能需要修改),其他的选完要记住,Aruco码打印下来测量一下以防被缩放导致实际尺寸不对。 -
安装realsense的驱动和ros包:
#安装 sudo apt install ros-noetic-realsense2-camera #使用 roslaunch realsense2_camera rs_camera.launch #点云 roslaunch realsense2_camera rs_camera.launch filters:=pointcloud
如果出现bug:failed to open usb interface: 0, error: RS2_USB_STATUS_ACCESS
宿主机和容器都设置一下:
检查目录
/etc/udev/rules.d/
下是否有99-realsense-libusb.rules
如果有,需要修改内容。
如果没有,则需要创建规则文件99-realsense-libusb.rules
,内容如下:##Version=1.1## # Device rules for Intel RealSense devices (R200, F200, SR300 LR200, ZR300, D400, L500, T200) SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0a80", MODE:="0666", GROUP:="plugdev", RUN+="/usr/local/bin/usb-R200-in_udev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0a66", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aa5", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0abf", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0acb", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad0", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="04b4", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad1", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad2", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad3", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad4", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad6", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af6", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b03", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b0c", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b0d", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b48", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b49", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b52", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", MODE:="0666", GROUP:="plugdev"# Intel RealSense recovery devices (DFU) SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ab3", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0adb", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0adc", MODE:="0666", GROUP:="plugdev" SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b55", MODE:="0666", GROUP:="plugdev"# Intel RealSense devices (Movidius, T265) SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0af3", MODE="0666", GROUP="plugdev" SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0b37", MODE="0666", GROUP="plugdev" SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="03e7", ATTRS{idProduct}=="2150", MODE="0666", GROUP="plugdev"KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'" KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'" DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
设置完后执行
sudo /etc/init.d/udev restart
->USB拔掉->容器关闭->插入USB->启动容器。 -
创建工作空间,安装aruco_ros和easy_handeye 。
其中 aruco_ros 需要找到
aruco_ros/aruco_ros/src/simple_single.cpp
,注释以下框中的内容(我这里已经注释),原因见https://zhuanlan.zhihu.com/p/576861119。执行的命令顺序:
#安装aruco_ros mkdir -p calibrate_ws/src && cd calibrate_ws/src #安装自己系统版本的,这里是noetic,具体版本去github上面查branch git clone https://github.com/pal-robotics/aruco_ros.git -b noetic-devel 按照上图手动注释simple_single.cpp中的内容#安装easy_handeye git clone https://github.com/IFL-CAMP/easy_handeye#准备编译 cd .. #pwd=/path/calibrate_ws rosdep install -iyr --from-paths src #这个命令会从src目录中查找所有ROS包的package.xml文件, #然后自动安装所有这些文件中指定的依赖项,即使某些依赖项已经安装过,也会重新安装 #安装完以后编译 catkin_makeecho "source /path/calibrate_ws/devel/setup.bash" >> ~/.bashrc
-
编写launch文件(我这里为
ur10e_realsense_calibrate.launch
):主要修改的参数都在arg
中,easy_handeye
里对应的robot_base_frame
和robot_effector_frame
也要改一下。<?xml version="1.0" ?> <launch><!-- fill in the following parameters according to your tracking system --><arg name="namespace_prefix" default="ur10e_realsense_calibrate" /><arg name="eye_on_hand" default="false" /><!-- <arg name="robot_ip" default="10.8.1.1" /> --><arg name="markerId" default="6"/> <!-- set your marker id --><arg name="markerSize" default="0.05"/> <!-- in m --><arg name="eye" default="left"/><arg name="marker_frame" default="aruco_marker_frame"/> <arg name="ref_frame" default=""/> <!-- leave empty and the pose will be published wrt param parent_name --><arg name="corner_refinement" default="LINES" /> <!-- NONE, HARRIS, LINES, SUBPIX --> <arg name="camera_frame" default="camera_link" /><arg name="camera_image_topic" default="/camera/color/image_raw" /><arg name="camera_info_topic" default="/camera/color/camera_info" /> <!-- start the robot (using https://github.com/UniversalRobots/Universal_Robots_ROS_Driver) --><!-- <include file="$(find ur_robot_driver)/launch/ur10e_bringup.launch"><arg name="robot_ip" value="$(arg robot_ip)" /><arg name="kinematics_config" value="$(find ur_description)/config/ur10e/default_kinematics.yaml" /> --><!-- </include><include file="$(find ur10e_moveit_config)/launch/ur10e_moveit_planning_execution.launch" /><include file="$(find ur10e_moveit_config)/launch/moveit_rviz.launch" ><arg name="rviz_config" value="$(find ur10e_moveit_config)/launch/moveit.rviz" /></include> --><!-- (start your tracking system's ROS driver) --><include file="$(find realsense2_camera)/launch/rs_camera.launch"> </include> <node pkg="aruco_ros" type="single" name="aruco_single"><remap to="$(arg camera_info_topic)" from="/camera_info" /><remap to="$(arg camera_image_topic)" from="/image" /><param name="image_is_rectified" value="True"/><param name="marker_size" value="$(arg markerSize)"/><param name="marker_id" value="$(arg markerId)"/><param name="reference_frame" value="$(arg ref_frame)"/> <!-- frame in which the marker pose will be refered --><param name="camera_frame" value="$(arg camera_frame)"/><param name="marker_frame" value="$(arg marker_frame)" /><param name="corner_refinement" value="$(arg corner_refinement)" /></node><!-- start easy_handeye --><include file="$(find easy_handeye)/launch/calibrate.launch" ><arg name="namespace_prefix" value="$(arg namespace_prefix)" /><arg name="eye_on_hand" value="$(arg eye_on_hand)" /><arg name="tracking_base_frame" value="$(arg camera_frame)" /><arg name="tracking_marker_frame" value="$(arg marker_frame)" /><arg name="robot_base_frame" default="ra_base_link" /><arg name="robot_effector_frame" default="ra_tool0_controller" /><arg name="freehand_robot_movement" value="true" /><arg name="robot_velocity_scaling" value="0.5" /><arg name="robot_acceleration_scaling" value="0.2" /><arg name="translation_delta_meters" default="0.05" /><arg name="rotation_delta_degrees" default="25" /><arg name="rviz_config_file" value="$(find easy_handeye)/launch/self_arm.rviz" /></include><node name="rviz_for_aruco_result" pkg="rviz" type="rviz" respawn="true" output="screen" /></launch>
-
这里没有设置机械臂启动的脚本,所以启动前自己先正常启动机械臂,再启动这个脚本就可以了。
-
启动后一共三个窗口(两个rviz和一个rqt),一个rviz控制机械臂移动,一个rviz观察aruco码的识别结果,一个rqt用来采样和保存结果。观察到aruco码的识别结果准确时点击
Take Sample
,采集结果足够多(15次以上)后点击Compute
会出现结果,最后点击Save
,保存后需要去终端查看保存的位置,是个yaml文件。 -
根据标定的结果查看结果:
rosrun tf2_ros static_transform_publisher 0.012 -1.2 0.396 -0.6437 0.023 0.0344 0.7641 /ra_base_link_test /camera_link_test # 0.012 -1.2 0.396 -0.6437 0.023 0.0344 0.7641 是我标定的结果 # 用法: static_transform_publisher x y z yaw pitch roll frame_id child_frame_id static_transform_publisher x y z qx qy qz qw frame_id child_frame_id
-
打开rviz,选择
Fixed Frame
为ra_base_link_test
,添加TF插件,添加刚刚指定的两个坐标系:ra_base_link_test
和camera_link_test
,可以看到结果。
相关文章:

ROS[aruco_ros+easy_handeye]手眼标定(眼在手外+UR10e+realsense-d435i)
参考链接: https://zhuanlan.zhihu.com/p/576861119 https://blog.csdn.net/qq_32618327/article/details/120730198 本次在Docker中使用 打印Aruco码:https://chev.me/arucogen/ 选择Dictionary为 Original ArUco(aruco_ros默认这个,如果…...

第九篇:k8s 通过helm发布应用
什么是helm? Helm 是 Kubernetes 的包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 在红帽系的Linux中我们使用yum来管理RPM包,类似的,在K8s中我们可以使用helm来管理资源对象(Deployment、Service、Ingress…...
dataTable
在 C# 中,DataTable 是 .NET Framework 中用于处理数据表格的一个类,属于 System.Data 命名空间。它是一种内存中表示数据表的结构,通常用于临时存储和操作数据,类似于数据库中的表。DataTable 的主要特点是行列结构,其…...

json+Tomact项目报错怎么办?
在响应请求的时候,如果http响应没有指定响应数据的content-type,浏览器就不知道按照什么格式解析响应体的数据,因为浏览器只知道怎样解析http的行和头,再从头里获取响应体的字节长度和类型,按照你给的长度去截流&#…...
Flume——sink连接Hive的参数配置(属性参数)
目录 配置文件官网属性参数例子 配置文件官网 可以参考官网的说明 属性参数 属性名默认值说明type无(必须指定)组件类型名称,必须是"hive"hive.metastore无(必须指定)元数据仓库地址,例如&…...
Netty面试内容整理-Netty 的应用场景
Netty 是一个高性能、异步的事件驱动网络框架,广泛应用于各种需要高并发、高吞吐量的网络通信场景。以下是 Netty 的常见应用场景: RPC 框架 ● 应用描述: ○ 远程过程调用(RPC)框架用于跨网络调用远程服务,就像调用本地方法一样。 ○...

波特图方法
在电路设计中,波特图为最常用的稳定性余量判断方法,波特图的根源是如何来的,却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源,给出了其对应关系和波特图相应的稳定性余量。 理论贯通,不在于精确绘…...

服务器数据恢复—硬盘掉线导致热备盘同步失败的RAID5阵列数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障&#…...
在Ubuntu中运行和管理AppImage
文章目录 什么是AppImage?如何在Ubuntu中运行AppImage?如何管理AppImage?安装AppImageLauncher如何添加AppImage到系统?如何从系统中移除AppImage? 总结 什么是AppImage? AppImage是一种将应用程序打包为单…...

如何查看电脑的屏幕刷新率?
1、按一下键盘的 win i 键,打开如下界面,选择【系统】: 2、选择【屏幕】-【高级显示设置】 如下位置,显示屏幕的刷新率:60Hz 如果可以更改,则选择更高的刷新率,有助于电脑使用起来界面更加流…...
浏览器数据存储方法深度剖析:LocalStorage、IndexedDB、Cookies、OPFS 与 WASM - SQLite
在当今的 Web 开发领域,选择合适的浏览器数据存储方法对于构建高效、功能丰富的应用程序至关重要。随着 Web 应用的不断演进,从早期的静态 HTML 页面到如今复杂的单页应用和本地优先应用,数据存储需求也日益多样化。本文将深入探讨 LocalStor…...

面向金融场景的大模型 RAG 检索增强解决方案
概述 在现代信息检索领域,检索增强生成(Retrieval-Augmented Generation, RAG)模型结合了信息检索与生成式人工智能的优点,从而在特定场景下提供更为精准和相关的答案。在特定场景下,例如金融等领域,用户通…...

经典蓝牙(BT/EDR)蓝牙配对与连接
经典蓝牙的连接过程包括跳频,扫描,配置交换等过程。对ACL链路以及sco的连接过程也做详细的分析。 1. 为什么不配对便无法建立连接? 任何无线通信技术都存在被监听和破解的可能,蓝牙SIG为了保证蓝牙通信的安全性,采用…...
Flask: flask框架是如何实现非阻塞并发的
写在前面:Flask框架是通过多线程/多进程+阻塞的socket实现非阻塞,其本质是基于python的源库socketserver实现的 前言 认识WSGI协议 认识Werkzeug flask是如何实现非阻塞的 本文使用的flask框架为最新的1.1.1版本,所有代码基于python3运行 一:前言 使用过flask或者其他web框…...

JAVA |日常开发中连接Oracle数据库详解
JAVA |日常开发中连接Oracle数据库详解 前言一、Oracle 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 Oracle 数据库的准备工作2.1 添加 Oracle JDBC 驱动依赖2.2 了解连接信息 三、建立数据库连接3.1 代码示例(使用服务名)3.2 步骤解…...

头歌 进程管理之二(wait、exec、system的使用)
第1关:进程等待 任务描述 通过上一个实训的学习,我们学会了使用fork创建子进程,在使用fork创建子进程的时候,子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行,随后父进程再…...
详解日志格式配置:XML 与 Spring Boot 配置文件格式
详解日志格式配置:XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分,通过定制化日志格式和颜色,开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...
JDK21新特性
目录 虚拟线程(JEP 444): 顺序集合(JEP 431): 字符串模板(JEP 430): 模式匹配的增强(JEP 440、441以及443): 结构化并发和作用域值…...
SqlDataAdapter
SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类,属于 System.Data.SqlClient 命名空间(或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间)。它的作用是充当数据源(如 SQL Server 数据库ÿ…...

AI赋能:构建安全可信的智能电子档案库
在档案的政策与法规上,《中华人民共和国档案法》2020年修订新增,对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定,保障数字资源的安全保存和有效利用。 日前,国家档案局令第22号公布《电子…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...