自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 打不开 localhost:5173 解决方法

你浏览器地址栏写的是 https://localhost:5173/ ,Vite 默认是 http 协议,不支持 https,协议错误直接拦截。1. 地址栏把 https:// 改成 http://正确地址: http://localhost:5173。地址带 https 导致报错 ERR_SSL。2. 回车重新访问。

2026-07-20 14:40:30 770

原创 2D激光雷达发送的是什么信息

angle = angle_min + i * inc # 第 i 个点对应的角度。dist = msg.ranges[i] # 第 i 个方向的距离。msg.angle_increment # 每个点之间的角度间隔。msg.range_min # 最小测距(比如 0.1m)msg.range_max # 最大测距(比如 12m)msg.angle_min # 扫描起始角度(弧度)msg.angle_max # 扫描结束角度(弧度)msg.scan_time # 扫完一整圈的时间。

2026-05-03 15:32:44 69

原创 QoS是什么

雷达、IMU、相机这类高频传感器,不能用 ROS1 那种默认通信方式,必须用 QoS 改成 BEST_EFFORT 模式,不然你收不到 /scan 数据。- TRANSIENT_LOCAL:存最后一条,后来的订阅者也能拿到(适合坐标、参数)雷达数据发得太快,如果丢一包还要重发,直接堵死,所以必须 BEST_EFFORT。- BEST_EFFORT:尽力发,丢了不重发(雷达、IMU 必须用这个)- RELIABLE:可靠传输,丢了重发(适合话题、命令、状态)其他普通话题 → 用默认就行,不用写 QoS。

2026-05-03 15:19:52 182

原创 #!/usr/bin/env python3是干嘛的

2. ROS2 功能包里面必须写,不然启动文件可能找不到正确的 Python 版本。3. 防止系统用 python2 运行(ROS2 只支持 python3)在 Linux / Ubuntu / ROS2 环境里,强烈建议写上!系统不知道这是 Python 脚本,会用默认解释器跑,直接失败。但不是语法必须,不写也能运行,只是容易出 BUG、不方便。👉 你写 ROS2 节点,直接默认带上这行就对了!- 工程上必须写,Linux/ROS2 环境必备。- 语法上不是必须,不写代码也能执行。3. 写了有什么好处?

2026-05-03 14:39:13 37

原创 单总线协议在温度传感器的应用

典型芯片:DS18B20(温度)、DS1302(不完全是)、DHT11(类单总线)单总线协议(1-Wire Protocol)超详细讲解。- 0xCC :跳过ROM(总线上只有一个设备时用)复位 → 应答 → 写0/写1 → 读0/读1。- 0x33 :读ROM(读64位唯一ID)- 0x55 :匹配ROM(指定某个器件)- 0xBE :读取暂存器(9字节数据)- 这段低电平 = 存在脉冲(ACK)(2)写时序(MCU → 传感器)(3)读时序(传感器 → MCU)

2026-03-31 11:42:51 583

原创 maniskill封装xlerobot

ee_quat = obs["extra"]["ee_quat"]# 末端姿态。"""目标定位(仿真中直接获取,可替换为YOLO/分割)"""ee_pos = obs["extra"]["ee_pos"] # 末端位置。depth = obs["camera"]["depth"] # 深度图。qpos = obs["agent"]["qpos"] # 关节角度。rgb = obs["camera"]["rgb"] # RGB图。print(f"第{i}次抓取:{success}")

2026-03-31 10:42:59 651

原创 两轴机械臂,ros2上位机控制,直接输入坐标或者键盘控制,can通信控制

elif ch == 'd': # Joint1 大步长增加。elif ch == 'a': # Joint1 大步长减少。elif ch == 'k': # Joint2 大步长减少。elif ch == 'w': # Joint1 增加。elif ch == 's': # Joint1 减少。elif ch == 'o': # Joint2 增加。elif ch == 'l': # Joint2 减少。if mode == 1: # 绝对位置模式。mode: 1=绝对位置, 2=相对位置。

2026-03-26 21:56:02 490

原创 ros2里面declare_parameter怎么用

declare_parameter 支持Python 里最常用的几种基本类型,ROS2 会自动识别,你不用额外写类型声明。支持:bool、int、float、str、int 列表、float 列表,你直接传默认值,ROS2 自动识别类型。6. list(浮点数列表)3. float(浮点数)5. list(整数列表)1. bool(布尔)4. str(字符串)2. int(整数)

2026-03-26 21:54:51 65

原创 ros2里面线程的作用 如何开启多线程

import threading 就是用来开“多线程”,让程序能同时干好几件事,互不卡住。- rclpy.spin() → 一直跑循环。→ 程序一启动就卡在键盘等待,ROS2 跑不起来。- get_key() → 一直等你按键。- input() → 一直等你输东西。→ 或者一跑 ROS2,键盘和输入全部废了。如果不用线程,你的代码根本跑不起来。不跑这个,ROS2 就等于没启动。线程 = 让它们同时跑,互不干扰。- 监听你按 W/S/O/L 键。你一按键盘,程序就卡住不动了;

2026-03-26 20:00:57 99

原创 ros2里面setup.py有什么用

`resource/your_robot_controller` | `share/ament_index/resource_index/packages/` | ROS2 发现这个包 || `arm_controller` | 终端中使用的命令 | `ros2 run your_robot_controller arm_controller` || `launch/*.launch.py` | `share/your_robot_controller/launch/` | 启动文件 |

2026-03-26 12:23:34 350

原创 touch _init_py的作用

没有 __init__.py ,Python 不会把当前文件夹当作一个“包”,你无法在其他代码里写 import your_robot_controller。- __init__.py :Python 包的“身份证”,存在即生效,空文件也够用,主要用来标记目录为包、可选择做初始化和接口控制。- touch __init__.py :快速创建空的 __init__.py ,是 Python 包的“创建身份证”操作。- 更新时间戳:如果文件已存在,就更新它的“最后修改时间”,不会改变文件内容。

2026-03-26 11:28:21 489

原创 i++和++i的区别

i++ 后置自增 先返回 i 的旧值,再把 i 加1 自增前的值 int a = i++;++i 前置自增 先把 i 加1,再返回新值 自增后的值 int a = ++i;一句话总结: ++i 是先自增再使用, i++ 是先使用再自增,在循环里效果几乎一样,但底层实现和性能有细微差异。// 先把 j 的旧值 5 给 b,j 再变成 6 → b=5, j=6。// i 先变成 6,再赋值给 a → a=6, i=6。// i 先变成 5,再输出 5。

2026-03-24 15:00:21 669

原创 ros1服务通信如何保证消息对应

request、response、a、b、sum 全是固定名字。- .request = 系统规定的发送区(只能放要发的数据)3. 位置固定(只能放 request 里的 a、b)- Request 类型 = 系统规定的接收格式。- response = 纸条的反面(写答案)- request = 纸条的正面(写问题)- a 、 b = 合同里写死的两个位置。- .srv = 提前约定好的纸条格式。- a、b = 正面必须写的两个空。- sum = 反面必须写的一个空。

2026-03-18 16:38:34 311

原创 modbus的用法

功能码:你代码里的 0x03 读、 0x10 写。- 主站(你):只有它能发话(STM32/PC/PLC)- 从站(伺服):只能回答,不能主动说话。- 意思:把xx设置成xx,执行xx动作。- 比如:设目标位置、伺服使能、启动。[地址][功能码][数据][校验]- 地址:1、2、3、4 号伺服。- 校验:你写的 CRC16。- 意思:告诉我xx参数是多少。- 比如:读当前位置、读转速。- 数据:位置、速度、使能。② 0x10:写多个寄存器。Modbus 核心三要素。① 0x03:读寄存器。

2026-03-15 14:21:11 250

原创 如何通过485通信控制汇川电机

/ 多项式 0xA001(Modbus标准)// 低8位 → 一共写2个16位寄存器 = 32位。// 初始值固定 0xFFFF。// 最低位为0,直接右移。uint32_t data) // 要写入的32位数据(位置、速度等)if(crc & 0x0001) // 最低位为1。j++) // 逐bit移位。uint8_t slave_addr, // 从站地址(1~4)uint16_t reg_addr, // 要写的寄存器地址。// 和当前字节异或。// 2. 功能码:0x10 = 写多个寄存器。

2026-03-15 14:16:16 1118

原创 摄像头管理工具

我们在使用摄像头的时候,特别是多个摄像头,就无法查看那个运行了哪个没有运行,这个时候就需要摄像头管理工具guvcview。4.然后就可以看摄像头页面啦。

2026-03-03 20:19:53 38

原创 socket的使用

初学者可能会使用共享文档。但是如果我使用两个不同语言,共享文档用起来可能就十分麻烦,这里我们用socket。QQ、微信、网页、视频、远程控制、机器人、人脸识别…print(f"客户端连接成功:{client_addr}")print("服务器回复:", data.decode())- 传输内容:字符串、数字、图片、文件、JSON…- socket.socket() :创建一个“电话”一句话:只要两个程序要互相发数据,一定用 Socket。print("服务器启动,等待客户端连接...")

2026-03-03 14:35:18 519

原创 spawner怎么用

这是你最常用的选项,用来指定 controller_manager 所在的命名空间(比如 /marm )。spawner 是一个命令行工具,它通过调用 controller_manager 提供的 ROS 服务,来管理控制器的整个生命周期。spawner 是 controller_manager 的配套工具,专门用来加载、启动、停止和卸载控制器。- type="spawner" :指定要运行的工具是 spawner。指定在卸载控制器前,等待它停止的超时时间(默认是 1 秒)。

2026-02-08 20:15:29 667

原创 moveit_planning_execution.launch的解析

controllers.yaml :这个配置文件里定义了控制器和关节的映射关系,告诉 MoveIt!的 move_group 节点,使用哪个“控制器管理器”来管理和 Gazebo 的通信。- use_sim:=$(arg sim) 会告诉节点:现在是仿真环境,不需要连接真实机器人的控制器。- 这里的 sim 参数会让 move_group 加载仿真专用的运动学求解器和控制器配置。- sim:=true :这是你传入的关键参数,用来切换“仿真模式”和“真实机器人模式”。

2026-02-05 17:25:33 365

原创 moveit_commander详解

move_group.set_max_acceleration_scaling_factor(0.1) # 加速度比例。move_group.set_max_velocity_scaling_factor(0.1) # 速度比例。- 作用:这是最核心的类,用来控制指定的规划组(如 manipulator ),进行运动规划和执行。1. 初始化:初始化 moveit_commander 和 ROS 节点。- 作用:用来管理规划场景,比如添加/移除碰撞物体、设置机器人的碰撞状态。# 添加一个碰撞立方体。

2026-02-05 17:25:20 720

原创 controller_manager的深度解析

你通过 rosrun controller_manager spawner ... 命令或启动文件告诉它要加载哪些控制器(比如 arm_joint_controller )。- 加载/卸载控制器: rosservice call /marm/controller_manager/load_controller / unload_controll。- 启动时,它会通过 ROS 的插件机制,发现并连接到你的硬件接口(在仿真场景下就是 gazebo_ros_control 插件)。

2026-02-04 09:43:30 569

原创 ros的核心标签

一级标签:直接在launch根节点下写,如 <arg> 、 <node> (pkg/type/respawn/output都是 <node> 的属性);- 含义:节点所属的ROS功能包名,必须是已经编译/安装好的ROS包(如gazebo_ros、moveit_core、ur_robot_driver);- log :日志输出到ROS的默认日志文件(~/.ros/log/),不占终端,适合稳定运行的节点;-- 2. 使用参数,传递给gazebo的empty_world.launch -->

2026-02-04 09:43:17 452

原创 roscontrol和gazebo的结合代码

比如, controller_manager 节点的名字会变成 /marm/controller_manager ,控制器的话题会变成 /marm/arm_joint_controller/follow_joint_trajectory。- 这个插件是 Gazebo 和 ROS controller_manager 之间的接口,负责把关节的运动指令从 ROS 传递到 Gazebo 的物理引擎,再把仿真中的关节状态反馈回 ROS。

2026-02-03 11:15:19 668

原创 官方的gazebo_ros包

spawn_model :来自 gazebo_ros ,它作为一个 ROS 节点运行,从参数服务器的 robot_description 中读取 URDF 模型,然后通过 Gazebo 的 API 在仿真世界中生成这个模型。- gazebo_ros_control 插件:这是你之前配置的核心插件,它实现了 ros_control 与 Gazebo 的对接,让 controller_manager 可以直接控制 Gazebo 中的虚拟关节。

2026-02-02 21:22:17 1074 2

原创 传动装置的语法

复用性:给每个关节调用宏(如 <xacro:transmission_block joint_name="joint1"/> ),避免重复写相同代码,维护更方便。- <hardwareInterface> :指定电机的硬件接口类型,必须与关节的 <hardwareInterface> 匹配(否则指令无法传递)。4. 关节名匹配: <joint name="xxx"> 中的关节名必须与 URDF/Xacro 中定义的关节名完全一致,否则无法关联。

2026-02-02 20:21:25 357

原创 如何配置rviz

RVIZ左侧「Displays」面板,找到「Global Options」,展开后修改 Fixed Frame 为 base_link (机械臂的根坐标系,必须和你模型里的根link名一致)- 加「TF组件」:能看到各连杆的坐标系,方便调试,同样点Add→选TF→OK,可取消「Show Axes」外的冗余选项。-- 2. 自动转换Xacro为URDF,并存入robot_description -->-- 5. 计算并发布连杆位姿(TF变换) -->-- 3. 开启关节控制GUI(滑动条) -->

2026-02-01 09:34:31 403

原创 ros里面的两个固定节点,robot_state_publisher和joint_state_publisher

真实机器人的关节角度由硬件驱动发布到 /joint_states 话题,无需启动 joint_state_publisher。2. 从 /joint_states 话题读取关节角度数据(来自 joint_state_publisher 或真实硬件)。- 启动 joint_state_publisher (带 GUI)和 robot_state_publisher。joint_state_publisher → 解析模型 → 生成关节状态 → 发布/joint_states。

2026-02-01 09:17:05 622

原创 xacro语法

Xacro(XML Macros)是 ROS 专为解决纯 URDF 痛点设计的建模格式,完全兼容URDF所有语法,核心新增「参数化、宏复用、数学运算」三大功能,能大幅减少重复代码、降低修改成本,是复杂机器人(六轴机械臂、无人机、无人车)建模的首选,下面从基础到进阶、语法到实操、避坑到调试,一次性讲透。多个参数用空格分隔,如 link_name parent_link child_link link_len ),参数是封装结构的可变部分(如连杆名、父link、子link、连杆长度)-- 关节限位固定 -->

2026-01-31 15:45:01 690

原创 urdf语法

URDF(Unified Robot Description Format)是ROS中描述机器人结构的XML格式文件,核心是用链接(link) 定义刚体、关节(joint) 定义刚体连接,组合实现机器人完整结构建模,以下是所有核心语法、标签含义及实操示例,直接适配你的六轴机械臂开发。1. 命名唯一:所有link和joint的name不能重复,建议按“link_序号”“joint_父link_子link”命名(如link1、joint_base_link1),便于排查。-- 360°旋转限位 -->

2026-01-31 15:28:20 857

原创 从0开始制作一个视觉机械臂(第一讲)

3.写一个自己的xacro文件。4.保存并转换xacro文件。2.创建urdf文件包。

2026-01-29 16:22:29 355

原创 moveit下载UR5机械臂urdf时显示失败是怎么回事

因为UR5为了让代码更通用,所以给代码设计的分层,想要导入就应该先把他们和起来。1# 生成临时URDF。3.就可以正常配置了。

2026-01-24 09:16:11 742

原创 如何打开moveit配置urdf文件

1.安装moveit。

2026-01-20 21:43:07 104

原创 cmake error at /opt/ros/noetic了怎么办

2.输入catkin_make -DPYTHON_EXECUTABLE=usr/bin/python3。下载有anaconda,很容易出现这样的问题,两步就可以解决了。1.输入conda deactivate。

2026-01-20 21:36:49 184

原创 虚拟机Ubuntu如何扩容

初学ros的时候,给虚拟机的容量一般都是20G,慢慢会出现不够用的情况,这里教大家一个方法,轻轻松松解决问题。2.打开虚拟机,安装内存管理工具。输入sudo apt install gparted。5.点击上面那个dev/sda5,右键,重复上面的操作,点击调整大小,就结束啦。3.安装完成以后,输入sudo gparted,会出现下面这个页面。4.右键dev/sda2,点击调整大小,把新大小改成最大空间,然后点击调整大小。1.虚拟机--设置--硬盘--拓展。然后输入你想要的内存。

2026-01-19 22:48:17 190

原创 安装ros的时候显示内存锁被占了怎么办

一些新手安装ros的时候,可能安装一半把进程断了,然后接下来安装的时候,就会一直显示内存锁被占了。然后输入kill -9 3418。这一种情况非常简单,先Ctrl C 关闭终端。

2026-01-19 22:19:23 188

原创 Ubuntuvscode的下载安装

3.输入sudo dpkg -i code*(或者输入sudo dpkg -i code然后按tap健补全)1首先在官网下载vscode,Ubuntu系统在火绒下面搜索code.visualstudio.com。6.安装ros插件,原来的插件已经弃用,安装下面这个就行。5.安装中文简体包,安装成功后按照提示重启vscode。到这里,vscode就可以在Ubuntu里面正常使用了。7.安装camke tools。2.选择在终端中打开。

2026-01-17 09:48:11 407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除