ros-day5

1 launch启动Gamapping建图

创包

写代码

编译运行

保存地图

2 Gmapping建图参数

3 地图的保存和加载

保存

保持运行

查看

加载

5 move_base导航

将图像放在

创包

代码

运行

启动rviz 发送目标点

6 全局规划器

navfn默认用dijk算法 后可用A*(有bug)

global则也可都用 没bug

向目标生成路线 有障碍物停止

7 AMCL定位算法

定位机器人的位置

通过分身进行预判机器人位置-应对里程计误差

查看分身

8 代价地图Costmap

全局规划器生成的路线不考虑机器大小

那么生成代价地图-让机器人不靠近

全局的只最开始计算一次 局部的随时进行

路线

9 代价地图的参数

将ns里面的内容加在文件的开头

python 复制代码
obstacle_range: 6.0
含义:传感器能检测到障碍物的最大距离(米)。
用途:只有距离 ≤ 6.0 米的障碍物才会被加入代价地图。更远的障碍物忽略
(视为不影响当前导航)。
raytrace_range: 6.0
含义:传感器用于清空区域的最大距离。
用途:如果之前某位置标记为障碍物,但当前扫描在此方向上6米内没有检测到物体,
就将该位置"清空"为自由空间。
这是动态更新地图的关键:移除已消失的障碍物。
python 复制代码
observation_sources: base_lidar
含义:声明一个观测源,命名为 base_lidar。可配置多个传感器(如 laser1 laser2)。
base_lidar: { ... }(子参数)
data_type: LaserScan​
数据类型为激光扫描消息(ROS 标准消息类型 sensor_msgs/LaserScan)。
topic: /scan​
订阅的激光雷达话题名称。雷达数据通过此话题发布。
marking: true​
是否用此传感器数据标记障碍物(即添加新障碍物到地图)。
clearing: true​
是否用此传感器数据清空自由区域(即移除不存在的障碍物)。
python 复制代码
tatic_map: true​ ⬅️ 红框标注的核心参数
含义:是否从静态地图加载全局代价地图。
作用:
true:从地图服务器(map_server)加载预先构建好的静态地图(如 map.yaml)
作为全局代价地图的基础。
false:初始时为空,完全通过传感器动态构建(适用于无先验地图的场景)。

update_frequency: 1.0
含义:全局代价地图的更新频率为 1.0 Hz(每秒更新1次)。
说明:即使地图是静态的,机器人位置变化或新增障碍物(如新标记的禁区)
也需要更新代价地图中的信息。
publish_frequency: 1.0
含义:将代价地图发布为 ROS 话题(如 /global_costmap/costmap)的频率也是 1.0 Hz。
用途:供 RViz 等可视化工具订阅显示,或供其他模块使用。

transform_tolerance: 1.0
含义:坐标变换的最大容忍延迟为 1.0 秒。

用odom 因为map会跳变

python 复制代码
static_map: false
含义:不加载静态地图作为初始地图。
作用:局部代价地图完全由传感器实时构建,只包含机器人周围当前检测到的障碍物

rolling_window: true​ ⬅️ 红框标注的核心机制
含义:启用滚动窗口模式。
工作原理:
代价地图是一个固定大小(图中 width: 3.0, height: 3.0)的窗口。
窗口中心始终跟随机器人移动(锁定在 robot_base_frame)。
当机器人移动时,窗口"滚动"------旧区域移出窗口,新区域进入窗口。

width: 3.0和 height: 3.0
含义:滚动窗口的宽度和高度都是3.0米。
python 复制代码
update_frequency: 10.0
含义:局部代价地图更新频率为10 Hz(每秒10次)。
对比:全局地图更新频率1.0 Hz,局部地图更新频率高10倍。
原因:局部避障需要快速响应环境变化。
publish_frequency: 10.0
含义:发布到ROS话题的频率也是10 Hz,供实时显示和监控。
4. 容错参数
transform_tolerance: 1.0
含义:坐标变换最大容忍延迟1.0秒(与全局配置相同)。

10导航系统|恢复行为|Recovery Behaviors

当有障碍物的时候重新绘画路线

11 恢复行为的参数设置

清楚1.84以外的障碍物内容

12 局部规划器

DWA规划器

调节参数

TEB规划器

调节参数

13 action编程接口

导航会给client返回完成的情况

编写节点文件

python 复制代码
主程序入口,初始化ROS节点,节点名为nav_client。

创建一个动作客户端(SimpleActionClient),连接到名为move_base
的动作服务器(负责路径规划与执行),并指定动作类型为MoveBaseAction。

ac.wait_for_server()阻塞直到move_base服务器就绪,确保连接成功后再发送目标。

创建一个MoveBaseGoal对象(目标点消息),后续需要为其设置目标位姿
(如坐标和朝向),再通过ac.send_goal(goal)发送给服务器。
图中代码仅展示了初始化,未包含完整的位姿设置和发送逻辑。
  • 设置了机器人的目标位置在(-3.0, 2.0, 0.0)

  • 朝向使用四元数表示,(0,0,0,1)表示无旋转(默认朝向)

python 复制代码
ac.send_goal(goal)  # 发送导航目标到move_base服务器
日志提示(第25行):
rospy.loginfo("开始导航...")  # 输出开始导航信息
等待结果(第26行):
ac.wait_for_result()  # 阻塞等待导航完成(成功或失败)

添加可执行权限

14 ros航点导航插件

将建完的地图放到文件夹里面

加载导航的位置

进行导航的保存

进行运行

在导航系统里面启动插件

粘贴文件

启动

仿真环境

导航系统

进行导航

python

15 ros的相机

彩色图像

ros相机图像的获取

创建包

python 复制代码
bridge = CvBridge()
创建一个CvBridge类的实例。CvBridge是ROS与OpenCV之间的"桥梁",
专门用于实现ROS图像消息(sensor_msgs/Image)与OpenCV图像格式
(numpy数组)之间的相互转换

cv_image = bridge.imgmsg_to_cv2(msg, "bgr8")
在try块中,使用bridge.imgmsg_to_cv2()方法将ROS图像消息转换为OpenCV图像。
msg:待转换的ROS图像消息。
"bgr8":指定转换后的图像编码格式为BGR三通道8位,
这是OpenCV处理彩色图像的常用格式。
python 复制代码
except CvBridgeError as e:
当try代码块中的代码(即bridge.imgmsg_to_cv2(msg, "bgr8"))执行失败,
并抛出CvBridgeError类型的异常时,程序会跳转到这里执行。
CvBridgeError是cv_bridge模块专门定义的错误类型,通常发生在ROS图像消息
与OpenCV格式不匹配、编码不支持或数据损坏时。
as e表示将捕获到的异常对象赋值给变量e,以便后续使用(例如打印错误信息)。
rospy.logerr("格式转换错误:%s", e)
这是ROS提供的日志记录函数,用于输出错误级别的日志。
它会将错误信息输出到ROS的日志系统(可以通过rosout查看),并在终端显示为红色错误信息。
"格式转换错误:%s"是格式化字符串,%s会被变量e(即具体的错误描述)替换。

添加可执行权限

编译

启动

颜色目标识别与定位

防止RBG受光照对饱和度和亮度的影响

设置阈值可以提取特定的颜色

编写

python 复制代码
cv2.equalizeHist(v):仅对明度(Value)通道进行直方图均衡化
cv2.merge():将处理后的三个通道重新合并
python 复制代码
cv2.createTrackbar(..., hue_min, ...)
作用:滑动条创建时的初始位置
类型:整数变量
实际显示:图中显示滑块初始在77的位置

cv2.createTrackbar(..., 179, ...)
作用:滑动条的取值范围上限
范围:0-179(对于HSV色彩空间的Hue通道,最大179°)
实际限制:滑块最右端对应179

cv2.createTrackbar(..., nothing)
作用:滑动条值变化时自动调用的函数
示例:通常定义为def nothing(x): pass
功能:可以在回调函数中实时处理滑动条值的变化
python 复制代码
v2.createTrackbar("hue_min", "Threshold", hue_min, 179, nothing)
 # 最小色相值,范围0-179
cv2.createTrackbar("hue_max", "Threshold", hue_max, 179, nothing) 
 # 最大色相值,范围0-179
python 复制代码
hue_min = cv2.getTrackbarPos("hue_min", "Threshold")
hue_max = cv2.getTrackbarPos("hue_max", "Threshold")
satu_min = cv2.getTrackbarPos("satu_min", "Threshold")
satu_max = cv2.getTrackbarPos("satu_max", "Threshold")
val_min = cv2.getTrackbarPos("val_min", "Threshold")
val_max = cv2.getTrackbarPos("val_max", "Threshold")
从名为"Threshold"的窗口中读取6个滑动条的当前位置值
HSV三通道阈值获取:
色调(Hue):hue_min~ hue_max(范围0-179)
饱和度(Saturation):satu_min~ satu_max(范围0-255)
明度(Value):val_min~ val_max(范围0-255)

权限

启动

ros颜色目标跟随

python 复制代码
假设有 N 个白色像素,每个像素的坐标为 (x₁, y₁), (x₂, y₂), ..., (xₙ, yₙ)。
则质心坐标 (Cx, Cy) 的计算公式为:
Cx = (x₁ + x₂ + ... + xₙ) / N
Cy = (y₁ + y₂ + ... + yₙ) / N

target_x、target_y:目标在图像中的质心坐标(像素单位)。
image_width、image_height:图像的宽度和高度(像素)。

权限

启动

人脸检测

权限

相关推荐
元让_vincent3 天前
DailyCoding C++ CMake | CMake 踩坑记:解决 ROS 项目中的“循环引用”与库链接依赖问题
c++·机器人·ros·动态库·静态库·cmake·循环引用
元让_vincent4 天前
DaliyCoding C++ ROS | C++ 避坑指南:ROS 回调函数中的对象生命周期陷阱 (Use-After-Free)
开发语言·c++·机器人·ros·ros2
liuniu08185 天前
参数--parameters
ros
liuniu08185 天前
服务--services
ros
liuniu08186 天前
节点--node
ros
liuniu08188 天前
VMware虚拟机安装ubuntu2022
ubuntu·ros
Tfly__8 天前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
Eric.Lee202113 天前
SLAM 路径规划的安全走廊实现
python·机器人·ros·路径规划·避障·安全走廊
滴啦嘟啦哒16 天前
【机械臂】【LLM】一、接入千问LLM实现自然语言指令解析
深度学习·ros·vla