ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ROS2-笔记-SLAM与导航

ROS2-笔记-SLAM与导航 ROS2运行海龟模拟器#启动海龟模拟器 ros2 run turtlesim turtlesim_node #启动海龟模拟器键盘控制节点 ros2 run turtlesim turtle_teleop_key工作环境source install/setup.bash编译colcon build可视化修改参数工具rqt查看参数列表ros2 param list参数查询与修改ros2 param describe turtlesim background_b # 查看某个参数的描述信息 ros2 param get turtlesim background_b # 查询某个参数的值 ros2 param set turtlesim background_b 10 # 修改某个参数的值参数文件保存与加载ros2 param dump turtlesim turtlesim.yaml # 将某个节点的参数保存到参数文件中 ros2 param load turtlesim turtlesim.yaml # 一次性加载某一个文件中的所有参数显示串口ll /dev | grep tty* ll /dev | grep ttyUSB*启动导航这是我自己的不要用#运行底盘控制 ros2 run airobot_pkg move #运行雷达 ros2 launch lslidar_driver lsm10_uart_launch.py #发布tf坐标 ros2 launch rm_bringup urdf2tf.launch.py #启动建图cartographer_ros ros2 launch cartographer_ros mylaser.launch.py #启动建图slam_toolbox ros2 launch slam_toolbox online_async_launch.py use_sim_time:False #键盘控制 ros2 run teleop_twist_keyboard teleop_twist_keyboard #或者 ros2 run airobot_pkg mbot_teleop #停止建图 ros2 service call /finish_trajectory 0 #保存地图 ros2 run nav2_map_server map_saver_cli -f ~/ros2bookcode/ros2_ws/src/rm_navigation2/maps/zoulang #进行导航 ros2 launch rm_navigation2 navigation2.launch.py #添加导航航点 ros2 launch wp_map_tools add_waypoint_sim.launch.py #航点保存节点 ros2 run wp_map_tools wp_saver #启动航点导航 ros2 launch rm_navigation2 waypoint_nav.launch.py #运行航点导航 ros2 run rm_navigation2 waypoint_navigation #以下是相机与机械臂 夹爪使用python运行 serial_control.py #相机~/rosbookcode/orbbec_ws$ roslaunch orbbec_camera gemini_330_series.launch #运行二维码识别~/rosbookcode/orbbec_ws$ roslaunch orbbec_camera gemini_330_series.launch #机械臂 sudo ifconfig enxe04e7ad23ef3 192.168.1.150 #运行movit规划~/rosbookcode/gluon_ws$ roslaunch gluon_moveit_config cm_demo.launch #运行给定坐标规划任务 ~/rosbookcode/gluon_ws$ roslaunch moveit_tutorials move_group_interface_tutorial.launch发布速度控制命令ros2 topic pub /cmd_vel geometry_msgs/msg/Twist linear: x: 0.2 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0RDKX5项目命令#运行底盘控制 ros2 run airobot_pkg smallcar_move #运行雷达 ros2 launch ldlidar_stl_ros2 ld06.launch.py ros2 launch turn_on_wheeltec_robot wheeltec_lidar.launch.py #发布tf坐标 ros2 launch rm_bringup urdf2tf.launch.py #启动建图cartographer_ros ros2 launch cartographer_ros mylaser.launch.py #启动建图slam_toolbox ros2 launch slam_toolbox online_async_launch.py use_sim_time:False #键盘控制 ros2 run teleop_twist_keyboard teleop_twist_keyboard #或者 ros2 run airobot_pkg mbot_teleop #停止建图 ros2 service call /finish_trajectory 0 #保存地图 ros2 run nav2_map_server map_saver_cli -f ~/ros2bookcode/ros2_ws/src/rm_navigation2/maps/zoulang #进行导航 ros2 launch rm_navigation2 navigation2.launch.py #添加导航航点 ros2 launch wp_map_tools add_waypoint_sim.launch.py #航点保存节点 ros2 run wp_map_tools wp_saver #启动航点导航 ros2 launch rm_navigation2 waypoint_nav.launch.py #运行航点导航 ros2 run rm_navigation2 waypoint_navigation #摄像头ascam ros2 launch ascamera hp60c.launch.py #运行识别 ros2 run qrnode_pkg rdk_power_QTLivox-MID-70雷达ros2使用livox-ros2-driver 首先mid70在ros2上的驱动是livox-ros2-driver而不是livox-ros-driver2。发布的点云格式为 livox_interfaces/msg/custommsg。 具体安装方法见https://github.com/Livox-SDK/livox_ros2_driver 原文链接https://blog.csdn.net/omnas/article/details/145163154 从览沃 GitHub 获取览沃 ROS2 驱动程序 git clone https://github.com/Livox-SDK/livox_ros2_driver.git ws_livox/src sudo ifconfig eno1 192.168.1.50 rviz小记 fixed_frame: livox_frame #固定坐标系 pointclound2: topic– livox/lidar Decay Time: 1 #值越大激光线越密集图像显示效果越好 style: point 模式选择 FAST-LIOFast LiDAR-Inertial Odometry是一种高效的激光雷达-惯性里程计算法由香港大学HKU开发.FAST-LIO结合了激光雷达LiDAR和惯性测量单元IMU的数据通过紧耦合的迭代扩展卡尔曼滤波器EKF实现高精度的位姿估计。该算法在快速运动、噪声或杂乱环境中表现出色具有计算效率高和鲁棒性强的特点。 FAST_LIO_ROS2 git clone https://github.com/Ericsii/FAST_LIO_ROS2.git --recursive git clone https://github.com/Ericsii/FAST_LIO.git --recursive pcl包 sudo apt install ros-humble-pcl-ros 保存点云图并查看 catlubancat:~$ ros2 service call /map_save std_srvs/srv/Triggerrequester: making request: std_srvs.srv.Trigger_Request()response:std_srvs.srv.Trigger_Response(successTrue, messageMap saved.) 可以使用pcl_viewer工具进行查看sudo apt-get install pcl-toolspcl_viewer test.pcdLivox-MID-360雷达ros2使用注意更改路径~/ws_livox/install/livox_ros_driver2/share/livox_ros_driver2/config下的MID360_config.json配置参考https://blog.csdn.net/bitswh/article/details/148477007?ops_request_miscelastic_search_miscrequest_idcff5bfc805d40a6c0fae41640a033e51biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-148477007-null-null.142^v102^pc_search_result_base9utm_termmid360ROS2spm1018.2226.3001.4187与https://www.cnblogs.com/oliudaneng/p/18964156安装3D地图转换栅格地图需要的库 pip3 install open3d opencv-python PyYAML numpy # 安装 ROS2 依赖 sudo apt install -y ros-$ROS_DISTRO-nav2-map-server \ ros-$ROS_DISTRO-nav2-common \ ros-$ROS_DISTRO-geometry-msgs # 安装 Python 依赖 pip3 install open3d opencv-python PyYAML numpy#以下指令在~/ros2bookcode/ros2_ws工作空间下 #启动底盘控制发布里程计 ros2 run airobot_pkg move #启动底盘控制不发布里程计 ros2 run airobot_pkg fastlio_move #启动底盘控制发布里程计odom_car ros2 run airobot_pkg fastlio2_move #启动键盘控制 ros2 run airobot_pkg mbot_teleop #松灵底盘每次断电时执行此命令 sudo bash /src/ranger_ros2/ranger_bringup/scripts/bringup_can2usb.bash sudo ip link set can0 up type can bitrate 500000 #启动基础节点ranger_mini_v3 $ ros2 launch ranger_bringup ranger_mini_v3.launch.py #for ranger_mini 3.0 #启动urdf的TF坐标发布 ros2 launch rm_bringup fastlio_urdf2tf.launch.py #以下指令在~/ros2bookcode/livox_ws工作空间下 #启动雷达 ros2 launch livox_ros_driver2 msg_MID360_launch.py ros2 launch livox_ros_driver2 rviz_MID360_launch.py #启动FAST-LIO2建图 ros2 launch fast_lio mapping.launch.py config_file:mid360.yaml #保存地图 ros2中建图不能直接保存PCD需要call service ros2 service call /map_save std_srvs/srv/Trigger #使用pcl_viewer工具进行查看sudo apt-get install  pcl-tools pcl_viewer test.pcd #生成栅格地图并且发布地图 ros2 launch pcd_to_gridmap pcd_to_gridmap_launch.py #将MID360自定义点云转化为ROS标准点云格式 ros2 run rm_pointcloud_to_laserscan mid360_to_pointcloud2.py #运行地面分割程序 ros2 run pcd_processor terrain_analysis_node.py ros2 run pcd_processor ray_ground_segmentation_node #使用pointcloud_to_laserscan将3D点云转换成2D ros2 run rm_pointcloud_to_laserscan custom_pointcloud_to_laserscan.py #发布地图 ros2 run pcd_to_gridmap grid_map_publisher.py #启动ICP定位 ros2 launch icp_registration icp.launch.py #启动fstlio_location定位 ros2 launch fast_lio_location mapping.launch.py #运行nav2导航 ros2 launch robot_navigation2 navigation2.launch.py #运行DBSCAN点云分割程序 ros2 run pcd_processor dbscan_clustering_node.py ros2 run pcd_processor multi_frame_dbscan_clustering_node #启动摄像头 ros2 launch orbbec_camera gemini_330_series.launch.py #运行多传感器融合的目标检测程序 ros2 run pcd_processor fused_detector_with_calib.py ros2 run pcd_processor semantic_conflict_fusion_node #录制雷达点云包 ros2 bag record /livox/lidar #启动延迟3秒后开始播放bag文件 ros2 bag play my_rosbag2_folder --delay 3.0 #0.1倍速播放 ros2 bag play 地下车库坡道加障碍物/ --rate 0.1FAST_LIVO2部署教程https://blog.csdn.net/qq_62275910/article/details/153752091https://blog.csdn.net/qq_62275910/article/details/153752091与https://blog.csdn.net/qq_62275910/article/details/151625713?spm1001.2014.3001.5502https://blog.csdn.net/qq_62275910/article/details/151625713?spm1001.2014.3001.5502运行指令都需要在工作空间之下 ros2 launch fast_livo mapping_avia.launch.py use_rviz:True ros2 bag play HKU_Centennial_Garden_ros2/ #录制雷达包 ros2 bag record -o 1bag /livox/lidar #进行标定 ros2 launch fast_calib calib.launch.py 如果要修改实机与仿真需要修改camera_pinhole.yaml和avia.yaml直接列出所有网络接口名称ls /sys/class/netRos2-SLAM-RPlidar 激光雷达git clone https://github.com/Slamtec/sllidar_ros2.git sudo chmod 777 /dev/ttyUSB0 #启动 RPLidar 节点 ros2 launch sllidar_ros2 sllidar_a3_launch.py #确认正在发布扫描数据 ros2 topic echo /scan #github连接 https://github.com/SYED-M-HUSSAIN/Ros2-Slam-RPlidarYOLOv8# 创建虚拟环境 conda create --name myYolov8 python3.8 # 激活环境 conda activate myYolov8 # CUDA 11.7安装 Pytorch 1.13 pip install torch1.13.1cu117 torchvision0.14.1cu117 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117 # 安装 ultralytics 包yolov8仅需要安装这一个库就ok了 pip install ultralytics 配置环境变量 export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH 然后执行以下命令使环境变量生效 source ~/.bashrc #关闭conda环境 conda deactivate #添加环境 export PYTHONPATH/home/cyx/.conda/envs/myYolov8/lib/python3.8/site-packages:$PYTHONPATH #查看显卡命令 lspci | grep -i vga # 查看所有 VGA 兼容显卡通用 lspci | grep -i nvidia # 仅查看 NVIDIA 显卡 lspci | grep -i amd # 仅查看 AMD 显卡 lspci | grep -i intel # 仅查看 Intel 显卡 nvidia-smi #数据集标注 labelimgyolo taskdetect modepredict modelyolov8n.pt source~/1.jpg高斯泼溅参考一下文章ubuntu22.04复现3DGS包含双系统、cuda、conda、colmap的安装_3dgs ubuntu-CSDN博客Ubuntu22.04及ROS2复现Fast_livo2包含ROS2的安装、cmake的版本选择等等_fastlivo2 复现-CSDN博客Ubuntu22.04结合fast_livo2进行3DGS三维重建_fastlivo23dgs-CSDN博客高斯泼溅的网址 https://github.com/graphdeco-inria/gaussian-splatting #创建虚拟环境 conda env create --file environment.yml #激活虚拟环境 conda activate gaussian_splatting 3DGS训练模型输出成果 #进入视频存放文件夹 cd gaussian-splatting/data/Chomper/ #使用ffmpeg截取视频帧为图片在Chomper目录下创建input目录将截取好的图片放到该目录下 mkdir input ffmpeg -i Chomper.mp4 -vf setpts0.2*PTS input/input_%4d.jpg #返回到gaussian-splatting文件夹下使用源码中的convert.py生成点云过程中会调用colmap cd ~/gaussian-splatting/ python convert.py -s data/Chomper/ #开始训练,训练完成后data文件夹下生成一个output文件夹里面存放着训练结果 python train.py -s data/Chomper -m data/Chomper/output 使用gaussian-splatting文件夹下的SIBR_viewers进行可视化 路径/home/cyx/3DGS/gaussian-splatting/SIBR_viewers/install/bin ./SIBR_gaussianViewer_app -m ~/3DGS/gaussian-splatting/data/Chomper/output/ 网址superspl https://superspl.at/editor 使用fastlivo的数据进行训练 首先将 /fast_ws/src/fast_livo/Log/Clomap 下的 images 和 sparse 文件夹拷贝到 /gaussian-splatting/data/RS/ 下接着可以开始训练进行重建 #激活虚拟环境 conda activate gaussian_splatting cd ~/gaussian-splatting/ python train.py -s data/RS -m data/RS/output #优化生成高斯点云 查看高斯图 ./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m ~/gaussian-splatting/data/RS/output/ 若是在运行 train.py 阶段提示显存不足也可以通过降低图片分辨率的方式进行训练不过最终呈现的效果也会打折扣 # --resolution 2 表示分辨率降为原来的1/2, --resolution 3 则表示降为原来的1/3,以此类推 python train.py -s data/RS -m data/RS/output --resolution 2 .bin文件转换成.txt文件 colmap model_converter \ --input_path /home/cyx/3DGS/gaussian-splatting/data/Chomper/sparse/0 \ --output_path /home/cyx/3DGS/gaussian-splatting/data/Chomper/sparse/0 \ --output_type TXT .txt文件转换成.bin文件 colmap model_converter \ --input_path /home/cyx/3DGS/gaussian-splatting/data/Chomper/sparse/0 \ --output_path /home/cyx/3DGS/gaussian-splatting/data/Chomper/sparse/0 \ --output_type BIN使用SIBR_viewers可视化参考链接Ubuntu20.04 3DGS复现全流程-CSDN博客 3D Gaussian Splatting复现-CSDN博客将下面代码保存为 .html 文件格式后打开可实现滑动来对比效果!DOCTYPE html html langzh-CN head style meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title自适应比例图片对比滑动组件/title link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css style * { margin: 0; padding: 0; box-sizing: border-box; font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #0f2027, #203a43, #2c5364); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 30px 20px; color: white; overflow-x: hidden; } .comparison-container { position: relative; width: 100%; max-width: 700px; /* 最大宽度 */ background: #000; box-shadow: 0 15px 50px rgba(0, 0, 0, 0.5); } .image-wrapper { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; /* 默认16:9比例可根据图片的实际比例调整 */ } .comparison-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: block; object-fit: contain; } .twenty-before { clip: rect(0px, 50%, 100%, 0px); z-index: 2; } .twenty-after { clip: rect(0px, 100%, 100%, 50%); } .twenty-handle { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background: white; cursor: ew-resize; z-index: 3; transform: translateX(-50%); box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); } .twenty-handle::before { content: ; position: absolute; width: 50px; height: 50px; border-radius: 50%; background: white; top: 50%; left: 50%; transform: translate(-50%, -50%); box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); } /style /head body div classcomparison-container idcomparison-container div classimage-wrapper idimage-wrapper img classcomparison-image twenty-before idbefore-image srchttps://i-blog.csdnimg.cn/direct/e54f5424002a49e19e08be193e65de20.png alt原始图像 img classcomparison-image twenty-after idafter-image srchttps://i-blog.csdnimg.cn/direct/97ff516e878944df929b0c4a5b7925d5.png alt处理后图像 div classtwenty-handle idhandle/div /div /div script document.addEventListener(DOMContentLoaded, function() { const container document.getElementById(image-wrapper); const beforeImg document.getElementById(before-image); const afterImg document.getElementById(after-image); const handle document.getElementById(handle); let isDragging false; let startX, startLeft; // 图片加载后初始化组件 function initComponent() { // 设置容器比例 setContainerAspectRatio(beforeImg); setContainerAspectRatio(afterImg); // 初始化滑块位置 initSlider(); } // 根据图片宽高设置容器的比例 function setContainerAspectRatio(image) { const imgWidth image.naturalWidth; const imgHeight image.naturalHeight; const aspectRatio imgHeight / imgWidth; // 设置容器的高度比例 container.style.paddingBottom (aspectRatio * 100) %; } // 初始化滑块位置 function initSlider() { const containerWidth container.offsetWidth; const position containerWidth / 2; updateClip(position); handle.style.left position px; } // 更新图片裁剪区域 function updateClip(pos) { const containerHeight container.offsetHeight; beforeImg.style.clip rect(0px, ${pos}px, ${containerHeight}px, 0px); afterImg.style.clip rect(0px, ${container.offsetWidth}px, ${containerHeight}px, ${pos}px); } // 添加鼠标事件 handle.addEventListener(mousedown, startDrag); // 添加触摸事件 handle.addEventListener(touchstart, startDrag); // 容器点击事件 container.addEventListener(click, function(e) { if (isDragging) return; const rect container.getBoundingClientRect(); const position e.clientX - rect.left; updateClip(position); handle.style.left position px; }); // 开始拖动 function startDrag(e) { e.preventDefault(); isDragging true; const startX e.clientX || e.touches[0].clientX; const startLeft parseFloat(handle.style.left); function onDrag(e) { const currentX e.clientX || e.touches[0].clientX; const rect container.getBoundingClientRect(); let newPosition startLeft (currentX - startX); // 限制位置在容器范围内 newPosition Math.max(0, Math.min(newPosition, container.offsetWidth)); updateClip(newPosition); handle.style.left newPosition px; } function stopDrag() { document.removeEventListener(mousemove, onDrag); document.removeEventListener(mouseup, stopDrag); document.removeEventListener(touchmove, onDrag); document.removeEventListener(touchend, stopDrag); isDragging false; } document.addEventListener(mousemove, onDrag); document.addEventListener(mouseup, stopDrag); document.addEventListener(touchmove, onDrag, { passive: false }); document.addEventListener(touchend, stopDrag); } // 窗口大小变化时重新计算 window.addEventListener(resize, function() { initSlider(); }); // 图片加载后初始化 beforeImg.addEventListener(load, function() { initComponent(); }); afterImg.addEventListener(load, function() { initComponent(); }); // 如果图片已经加载完成 if (beforeImg.complete afterImg.complete) { initComponent(); } }); /script /body /htmlRAICOM睿抗#启动spark各种驱动 roslaunch spark_bringup driver_bringup.launch camera_type_tel:d435 #启动TF坐标以及底盘 roslaunch spark_bringup base_bringup.launch #启动intel d435相机 roslaunch realsense2_camera rs_rgbd.launch #启动机械臂 roslaunch swiftpro pro_control_nomoveit.launch #启动机械臂通信 roslaunch swiftpro swift_control.launch #启动movit规划 roslaunch swift_moveit_config demo.launch #启动点云分割处理 rosrun cmz_bs pointcloud_grasp_node.py #启动QT界面 rosrun cmz_bs qt_control_node.py 启动gmapping建图 roslaunch spark_slam 2d_slam_teleop.launch slam_methods_tel:gmapping camera_type_tel:d435 lidar_type_tel:ydlidar_g6 导航 roslaunch spark_navigation amcl_demo_lidar_rviz.launch camera_type_tel:d435 lidar_type_tel:ydlidar_g6 键盘控制 rosrun spark_teleop spark_teleop_node 0.2 0.5Ubuntu(1)重启系统 sudo reboot (2)关闭系统 sudo poweroff设置中文#更新软件包列表并安装language-pack-zh-hans sudo apt update sudo apt install language-pack-zh-hans #生成本地化文件 sudo locale-gen zh_CN.UTF-8 sudo update-locale LANGzh_CN.UTF-8 #重启系统 sudo rebootubuntu查看版本lsb_release -aubuntu查看存储空间df -lhUbuntu下U盘没有写权限的问题查看U盘的挂载点df -h然后使用命令即可mount -o remount,rw /dev/sdd4 #/dev/sdd4需要替换成自己看到的文件系统路径解决linux系统下U盘只读文件系统问题https://blog.csdn.net/ITBigGod/article/details/79914534
返回列表