Ros2
ros安装设置
添加源
echo "deb [arch=$(dpkg --print-architecture)] https://repo.huaweicloud.com/ros2/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
安装
sudo apt-get update
OpenGL: sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
OpenAL: sudo apt-get install libopenal0a libopenal-dev
ALUT: sudo apt-get install libalut0 libalut-dev
sqlite3 sudo apt-get install sqlite3
ros2节点实例
source /opt/ros/humble/setup.bash
Ros2 command
//运行节点
ros2 run <package_naem> <executable_name>
//查看节点例表
ros2 node list
//查看节点信息
ros2 node info <node_name>
//查看话题例表
ros2 topc list
//重映射节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
//运行节点时设置参数
ros2 run example_parameters_rclcpp parameters_basic --ros-args -p rcl_log_level:=10
ros2 service
ros2 pkg
//创建功能包
ros2 pkg create
//比如以下创建一个包名为example_py编译类型为ament_python,如果使用c++编译类型为ament_cmake使用dependencies添加依赖。
ros2 pkg create example_py --build-type ament_python --dependencies rclpy
//列出所有包
ros2 pkg executables
//列出指定包
ros2 pkg executables turtlesim
//列出所有包
ros2 pkg list
//输出某个包所在路径的前缀
ros2 pkg prefix <package-name>
//比如小乌龟
ros2 pkg prefix turtlesim
//列出包的清单描述文件
每一个功能包都有一个标配的manifest.xml文件,用于记录这个包的名字,构建工具,编译信息,拥有者,干啥用的等信息。
通过这个信息,就可以自动为该功能包安装依赖,构建时确定编译顺序等
ros2 pkg xml turtlesim
ros2 action
//查看动作列表
ros2 action list
//查看动作信息
ros2 action info /turtle1/rotate_absolute
colcon build
build
--packages-select
,仅生成单个包(或选定的包)。--packages-up-to
,构建选定的包,包括其依赖项(先编译所有依赖后再编译该包)。--packages-above
,整个工作区,然后对其中一个包进行了更改。此指令将重构此包以及(递归地)依赖于此包的所有包
TEB
安装编译
#在编译官方teb_local_planner时里要
sudo apt-get install ros-humble-libg2o #需要安装指定版本的g2o,真恶心,否则一堆错误
- 还需要costmap_converter源码进行编译
teb参数解释
- global_plan_viapoint_sep:设置为正值(考虑全局points) 含义是在global_planner轨迹上间隔多远会有一个viapoint插入。设置为1就是1m一个viapoint。
- weight_viapoint:相关权重,提高和降低会明显改变输出轨迹的跟随力度
- acc_lim_x:(double,默认值 :0.5) 机器人的最大向前移加速度,单位为米/秒
- acc_lim_theta:(double,默认值:0.5) 机器人的最大角加速度,以弧度/秒为单位
- max_vel_x:(double,默认值:0.4) 机器人的最大平移速度,单位米/秒
- max_vel_x_backwards:(double,默认值:0.2) 向后行驶时机器人的最大绝对平移速度,米/秒
NAV2
需要的ros库
sudo apt-get install ros-humble-behaviortree-cpp-v3 #需要behaviortree-cpp-v3库
sudo apt-get install ros-humble-cv-bridge #需要cv-brideg库
sudo apt-get install ros-humble-ompl #ompl库
sudo apt-get install ros-humble-gazebo-ros-pkgs
注意事项
- 需要yawml0.7.0以上并开启动态库编译
源码功能包拆解
#==============控制器及其实现相关功能包======================#
nav2_controller | 控制器
nav2_dwb_controller | DWB控制器,Nav2控制器的一个实现
nav2_regulated_pure_pursuit_controller | 纯追踪控制器,Nav2控制器的一个实现
nav2_constrained_smoother
#==============规划器及其实现相关功能包======================#
nav2_planner | Nav2规划器
nav2_navfn_planner | navfn规划器,Nav2规划器的一个实现
nav2_smac_planner | smac规划器,Nav2规划器的一个实现
#=====================恢复器==============================#
nav2_recoveries | Nav2恢复器
#=====================行为树节点及其定义====================#
nav2_bt_navigator | 导航行为树
nav2_behavior_tree | 行为树节点插件定义
#=====================地图和定位===========================#
nav2_map_server | 地图服务器
nav2_costmap_2d | 2D代价地图
nav2_voxel_grid | 体素栅格
nav2_amcl | 自适应蒙特卡洛定位。 状态估计,输入地图、激光、里程计数据,输出机器人map和odom之间的位资关系。
#=====================通用插件系统管理等====================#
nav2_bringup | 启动入口
nav2_common | 公共功能包
nav2_msgs | 通信相关消息定义
nav2_util | 常用工具
nav2_lifecycle_manager |节点生命周期管理器
nav2_rviz_plugins | RVIZ插件
#=====================核心定义============================#
nav2_core | Nav2核心包
navigation2 | nav2导航汇总配置
#=====================应用================================#
nav2_waypoint_follower | 路点跟踪
#=====================测试=================================#
nav2_system_tests | 系统测试
nav2_param.yaml说明
编号 | 配置项 | 用途 | 对应模块与参数详解 |
---|---|---|---|
1 | amcl | 机器人定位 | nav2_amcl |
2 | bt_navigator | 导航行为树(用于加载行为树节点并根据xml配置进行调度) | nav2_bt_navigator,nav2_behavior_tree |
3 | controller_server | 控制器服务器 | nav2_controller,nav2_dwb_controller, nav2_regulated_pure_pursuit_controller |
4 | planner_server | 规划服务器 | nav2_planner,nav2_navfn_planner,smac_planner |
5 | recoveries_server | 恢复服务器 | nav2_recoveries |
6 | local_costmap | 局部代价地图 | nav2_costmap_2d,static_layer,inflation_layer |
7 | global_costmap | 全局代价地图 | nav2_costmap_2d,nav2_map_server |
TF2
坐标系
- earth:
- map:
- odom:
- base_link: "base_link"通常用于表示机器人的实际底盘或主体的坐标系。这个坐标系通常与机器人的物理结构直接相关,它可能位于机器人底盘的中心或者其他适当的位置。例如,对于一个移动机器人,"base_link"的原点可能位于机器人的几何中心或底盘的旋转中心,这取决于机器人的设计。
- base_footprint:"base_footprint"则更多地被用作机器人在地面上的一个虚拟平面的参考点,通常是机器人底盘的投影点。这个坐标系通常位于机器人底盘底部,用于表示机器人与地面的接触点。它可以被认为是机器人底部的一个虚拟标记,用来执行路径规划、避障和定位等任务。
在许多情况下,"base_link"和"base_footprint"的坐标原点可能是相同的,但它们的用途和表示方式略有不同。例如,在路径规划中,可能更常用"base_footprint",因为它更接近机器人在地面上的实际位置,有助于避免碰撞。而在其他情况下,如控制机器人的运动,使用"base_link"可能更合适,因为它更直接地与机器人的物理结构相联系。
rviz2
gazebo
虚拟机打不开gazebo问题
VMware: vmw_ioctl_command error 无效的参数.-CSDN博客
rqt
安装rqt插件
sudo apt-get install ros-noetic-rqt-common-plugins
Mqtt
cartographer
install
使用网络源安装
sudo apt install ros-humble-cartographer #安装cartographer
sudo apt install ros-humble-cartographer-ros #安装cartographer for ros
ros2 pkg list | grep cartographer #查看是否安装成功
sudo apt install ros-humble-nav2-map-server
cartographer参数配置
前端参数
文件:trajectory_builder_2d
src/cartographer/configuration_files/trajectory_builder_2d.lua
-- 是否使用IMU数据
use_imu_data = true,
-- 深度数据最小范围
min_range = 0.,
-- 深度数据最大范围
max_range = 30.,
-- 传感器数据超出有效范围最大值时,按此值来处理
missing_data_ray_length = 5.,
-- 是否使用实时回环检测来进行前端的扫描匹配
use_online_correlative_scan_matching = true
-- 运动过滤,检测运动变化,避免机器人静止时插入数据
motion_filter.max_angle_radians
后端参数
文件:pose_graph.lua-后端参数配置项
路径src/cartographer/configuration_files/pose_graph.lua
该文件主要和地图构建
--Fast csm的最低分数,高于此分数才进行优化。
constraint_builder.min_score = 0.65
--全局定位最小分数,低于此分数则认为目前全局定位不准确
constraint_builder.global_localization_min_score = 0.7
cartographer_ros参数配置
该部分参数主要是用于和ROS2进行通信和数据收发的配置,比如配置从哪个话题读取里程记数据,从哪个话题来获取深度信息(雷达)。
文件:backpack_2d.lua
路径:src/cartographer_ros/cartographer_ros/configuration_files/backpack_2d.lua
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
-- 用来发布子地图的ROS坐标系ID,位姿的父坐标系,通常是map。
map_frame = "map",
-- SLAM算法跟随的坐标系ID
tracking_frame = "base_link",
-- 将发布map到published_frame之间的tf
published_frame = "base_link",
-- 位于“published_frame ”和“map_frame”之间,用来发布本地SLAM结果(非闭环),通常是“odom”
odom_frame = "odom",
-- 是否提供里程计
provide_odom_frame = true,
-- 只发布二维位姿态(不包含俯仰角)
publish_frame_projected_to_2d = false,
-- 是否使用里程计数据
use_odometry = false,
-- 是否使用GPS定位
use_nav_sat = false,
-- 是否使用路标
use_landmarks = false,
-- 订阅的laser scan topics的个数
num_laser_scans = 0,
-- 订阅多回波技术laser scan topics的个数
num_multi_echo_laser_scans = 1,
-- 分割雷达数据的个数
num_subdivisions_per_laser_scan = 10,
-- 订阅的点云topics的个数
num_point_clouds = 0,
-- 使用tf2查找变换的超时秒数
lookup_transform_timeout_sec = 0.2,
-- 发布submap的周期间隔
submap_publish_period_sec = 0.3,
-- 发布姿态的周期间隔
pose_publish_period_sec = 5e-3,
-- 轨迹发布周期间隔
trajectory_publish_period_sec = 30e-3,
-- 测距仪的采样率
rangefinder_sampling_ratio = 1.,
--里程记数据采样率
odometry_sampling_ratio = 1.,
-- 固定的frame位姿采样率
fixed_frame_pose_sampling_ratio = 1.,
-- IMU数据采样率
imu_sampling_ratio = 1.,
-- 路标采样率
landmarks_sampling_ratio = 1.,
}
保存地图方法
ros2 run nav2_map_server map_saver_cli --help
# 先将地图保存到src/fishbot_cartographer/map目录下
cd src/fishbot_cartographer/ && mkdir map && cd map
ros2 run nav2_map_server map_saver_cli -t map -f fishbot_map
slam-toolbox
slam-toolbox也是一个建图工具
ros2 launch xxx slam-toolbox.launch.py
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效