初始位姿偏移问题
- 需在对应配置文件中配置
1
2
3
4<!-- 设置初始位置 -->
<param name="initial_pose_x" value="0.0"/>
<param name="initial_pose_y" value="0.0"/>
<param name="initial_pose_a" value="0.0"/>
在ROS Noetic中仿真两轮差速小车时,出现以下错误信息:
1 | Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame omni_b_link (parent car_base_link) at time 1488.072000 according to authority unknown_publisher |
同时发现:
/gazebo
发布odom到base_footprint的频率为101.099Hz/robot_state_publisher
发布后续tf的频率为1000.00Hz该错误表明有多个发布者在相同时间戳为相同的tf变换发布数据,导致数据冲突。具体原因:
gazebo_ros_diff_drive
插件和gazebo_ros_control
插件同时控制相同的关节Transmission是ROS控制系统中定义执行器与关节连接关系的配置:
1 | <transmission name="wheel_l_trans"> |
工作流程:
1 | 命令输入 → 控制器 → 传动系统 → 执行器 → 关节 → 链接运动 |
1. 删除gazebo_ros_control插件
在主URDF文件中注释或删除:
1 | <!-- 删除这部分配置 --> |
2. 优化gazebo_ros_diff_drive配置
1 | <gazebo> |
3. 删除wheel的transmission配置
在wheel_125mm.xacro中注释:
1 | <!-- 删除或注释掉wheel的transmission --> |
4. 调整robot_state_publisher频率
在launch文件中:
1 | <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen"> |
1. 删除gazebo_ros_diff_drive插件
2. 修改gazebo_ros_control配置
1 | <gazebo> |
3. 修正transmission配置
1 | <transmission name="${wheel_prefix}_wheel_trans"> |
4. 添加控制器配置
在launch文件中:
1 | <rosparam file="$(find zeus_s1_description)/config/control.yaml" command="load"/> |
control.yaml文件内容:
1 | # Joint state controller |
1 | # 查看TF树结构 |
1 | # 查看关节状态话题 |
需要使用的场景:
不需要使用的场景:
对于简单的差分驱动机器人仿真,推荐使用方案一(gazebo_ros_diff_drive),因为:
TF_REPEATED_DATA错误的核心是避免多个发布者控制相同的关节,选择合适的控制架构是关键。
在ROS Noetic中使用rqt_graph保存.dot类型的话题链接情况文件时,出现以下错误:
1 | zhao@zhao:~/WS/Now/demo_ws$ rosrun rqt_graph rqt_graph |
问题特征:
frames.dot
可以正常工作LIO-SAM-Debug-Active.dot
时出现错误在ROS Noetic(Python 3)中,write()
方法期望接收字节类型数据(bytes
、bytearray
或QByteArray
),但实际接收到的是字符串类型(str
)。
根本原因:
self._current_dotcode
是字符串类型write()
方法期望字节类型数据初步怀疑是文件名中的连字符(-
)导致的问题,但实际上主要是编码转换问题。
验证方法:
1 | # 测试不同文件名 |
1. 备份原文件
1 | sudo cp /opt/ros/noetic/lib/python3/dist-packages/rqt_graph/ros_graph.py /opt/ros/noetic/lib/python3/dist-packages/rqt_graph/ros_graph.py.bak |
2. 修改源代码
1 | sudo nano /opt/ros/noetic/lib/python3/dist-packages/rqt_graph/ros_graph.py |
3. 找到第414行,进行修改
原代码:
1 | handle.write(self._current_dotcode) |
修改为:
1 | handle.write(self._current_dotcode.encode('utf-8')) |
如果需要更安全的修改,可以添加类型检查:
1 | if isinstance(self._current_dotcode, str): |
注意事项:
在修改过程中遇到的缩进错误:
1 | TabError: inconsistent use of tabs and spaces in indentation |
解决方法:
检查缩进方式:
1 | # 查看文件缩进类型 |
1. 基本功能测试
1 | rosrun rqt_graph rqt_graph |
2. 文件名测试
1 | # 测试各种文件名 |
3. 文件内容验证
1 | # 检查生成的.dot文件内容 |
虽然编码问题已解决,但为了避免潜在的兼容性问题,建议:
1 | # 推荐使用 |
如果不想修改源码,可以使用ROS的命令行工具:
1 | # 查看当前节点和话题 |
如果修改出现问题,可以重新安装:
1 | sudo apt update |
这个问题的核心是ROS Noetic中Python 3对字符串和字节类型的严格区分。通过简单的编码转换(encode('utf-8')
)即可解决。
关键要点:
修复后的效果:
确保目标目录存在
1 | mkdir -p /full/path/to/data |
从 TopicsRecord.txt
文件读取话题列表并录制到指定路径
1 | rosbag record -o /full/path/to/data/my_bag $(cat TopicsRecord.txt) |
检查录制的 bag 文件内容
1 | rosbag info /full/path/to/data/my_bag_2025-07-04-16-54-00.bag |
使用压缩选项录制以减少文件大小
1 | rosbag record -j -o /full/path/to/data/my_bag $(cat TopicsRecord.txt) |
按文件大小分割录制(例如,每 1024 MB 分割)
1 | rosbag record --split --size=1024 -o /full/path/to/data/my_bag $(cat TopicsRecord.txt) |
限制录制时长(例如,60 秒)
1 | rosbag record --duration=60 -o /full/path/to/data/my_bag $(cat TopicsRecord.txt) |
TopicsRecord.txt
文件内容1 | /clock |
.condarc
文件1 | nano ~/.condarc |
将内容替换为以下格式 (以 清华源 为例):
1 | channels: |
建议保留
defaults
作为备用源
镜像站 | 地址 |
---|---|
清华大 | https://mirrors.tuna.tsinghua.edu.cn/anaconda/ |
中科大 | https://mirrors.ustc.edu.cn/anaconda/ |
阿里云 | https://mirrors.aliyun.com/anaconda/ |
华为云 | https://repo.huaweicloud.com/anaconda/ |
以中科大镜像为例:
1 | channels: |
换源后建议清除并更新缓存:
1 | conda clean -i # 清除索引缓存 |
如你使用 conda-forge
频道,也可配置为国内镜像:
1 | conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge |
下载并解压缩KITTI中关于3D物体的数据集
Step 1: 下载数据集wget https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_velodyne.zip
wget https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_label_2.zip
wget https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_calib.zip
Step 2: 解压数据集unzip data_object_velodyne.zip -d kitti_dataset
unzip data_object_label_2.zip -d kitti_dataset
unzip data_object_calib.zip -d kitti_dataset
Step 1:配置对应conda环境,安装依赖
这里我使用的是pointnet++的pytorch版本,参考了下面的仓库:
1 | https://github.com/yanx27/Pointnet_Pointnet2_pytorch.git |
Step 2:终端打开到虚拟环境,运行命令测试import torch
输出空行torch.cuda.is_available()
输出:Truetorch.cuda.device_count()
输出:1torch.cuda.device(0)
输出:<torch.cuda.device object at 0x7fd95fd1fa90>torch.cuda.get_device_name(0)
输出:’NVIDIA GeForce RTX 4060 Laptop GPU’
Step3:未完待续
为了安装 CMake 3.26,可以通过以下步骤手动编译安装:
首先,访问 CMake GitHub releases 页面 或者使用 wget
下载 CMake 3.26 的源码包:
1 | wget https://github.com/Kitware/CMake/releases/download/v3.26.0/cmake-3.26.0.tar.gz |
下载完成后,解压文件:
1 | tar -zxvf cmake-3.26.0.tar.gz |
运行以下命令来编译并安装 CMake:
1 | ./bootstrap |
这可能需要一些时间来完成编译。
安装完成后,使用以下命令验证 CMake 是否已成功安装:
1 | cmake --version |
你应该看到类似以下的输出,表示已安装 CMake 3.26:
1 | cmake version 3.26.x |
为了在 Ubuntu 中安装 GCC 11,你可以通过 APT 包管理器来进行安装。首先更新 APT 包管理器,并安装 GCC 11:
1 | sudo apt update |
安装完成后,你可以使用 update-alternatives
工具来选择使用 GCC 11 作为默认编译器。运行以下命令来配置默认的 GCC 和 G++ 版本:
1 | sudo update-alternatives --config gcc |
在提示选择时,输入对应的数字(例如选择 gcc-11
),然后按回车。
同样,对于 G++,使用以下命令:
1 | sudo update-alternatives --config g++ |
安装并切换完成后,使用以下命令检查当前的 GCC 版本:
1 | gcc --version |
输出应该显示 GCC 和 G++ 版本为 11.x.x。
1 | gcc (Ubuntu 11.x.x) ... |
<ranges>
等。
从下方链接下载:
https://github.com/XidianLemon/calibration_camera_lidar
下载后到自己项目的src
中,然后正常catkin_make
编译:
提示遇到错误,运行命令sudo apt install ros-noetic-jsk-recognition-msgs
即可
1 | Could not find a package configuration file provided by |
参考链接博文,下载场景,并自行导入自己的小车模型,然后开启小车的仿真,录制rosbag
模型的下载地址:
1 | https://pan.baidu.com/s/1H314s6Hn-bY1qFphinnNrg?pwd=2022 |
博客的链接地址:
1 | https://blog.csdn.net/weixin_43807148/article/details/114241862 |
参考下方链接操作,获取ID和Key,必须保存一下,仅显示一次!
https://picgo.github.io/PicGo-Doc/zh/guide/config.html#%E9%98%BF%E9%87%8C%E4%BA%91oss
参考上方链接,配置接下来的OSS-Bucket等信息:
确认完成后,返回主界面可以测试一下上传是否成功即可。
安装:最后一版免费Typora,感谢鱼香ROS大佬保存!
打开Typora,点击:文件-偏好设置-图像,如下图所示:
选择配置如上图所示,上传服务选择Core,然后点击下载(需要网络),下载完成后点击“打开配置文件”,复制上方安装的PicGo中的配置信息,完全粘贴到刚刚打开的配置文件中,保存
修改后,点击“验证图片上传选项”,测试成功即可!
Packages
,然后在这个文件夹下进行后续的1、2、3、这三个包的安装下载压缩包
1 | https://github.com/opencv/opencv/archive/4.2.0.zip |
使用unzip -x opencv4.2.0.zip
解压,进入文件夹后依次运行如下命令
1 | # 依赖库安装 |
安装依赖项
1 | sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev |
安装Pangolin 0.6(稳定版)(官网下载地址),不要下载最新master版,编译的时候可能有错误)
配置并编译
1 | cd Pangolin |
验证
1 | cd ../examples/HelloPangolin |
成功后会弹出一个终端,里面是一个立方体有三色,关闭即可。
方案一:直接安装
Eigen3是一个纯头文件的库,这个特点让使用者省去了很多安装和环境配置的麻烦,可以直接安装:
1 | sudo apt-get install libeigen3-dev |
方案二:源码安装
源码(地址)安装,执行以下指令:
1 | cd eigen3 |
安装后头文件在:
1 | /usr/local/include/eigen3/ |
复制头文件到/usr/local/include
:
1 | sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include |
使用鱼香ROS的一键配置命令,配置rosdepc
,终端执行下列命令,然后输入密码,选择rosdepc,然后配置好了之后会提示让rosdep init之类的命令,执行命令就好了
1 | wget http://fishros.com/install -O fishros && . fishros |
进入到自己的ROS工作空间的src
文件夹下,下载并解压源文件,然后打开,此处我的工作空间地址为:/home/zhao/WS/Now/ant_ws/src/ORB_SLAM2
修改各个CMakeLists.txt,将其中关于OpenCV的部分做如下修改:
1、主目录ORB_SLAM2下的CMakeLists.txt
1 | # 注释掉下面这7行,类似的也是把涉及到的部分注释调 |
2、ORB_SLAM2/Thirdparty/DBoW2
文件夹下的CMakeLists.txt
1 | # find_package(OpenCV 3.0 QUIET) |
3、ORB_SLAM2/Examples/ROS/ORB_SLAM2
文件夹下的CMakeLists.txt
1 | # find_package(OpenCV 3.0 QUIET) |
修改ros示例源文件,为Examples/ROS/ORB_SLAM2/src
路径下的所有.cc文件添加头文件
1 | #include <unistd.h> |
将ORB_SLAM2/Examples/
文件夹下的所有示例源文件中导入图像数据的参数 CV_LOAD_IMAGE_UNCHANGED
修改为下列表述,建议在这个文件夹下使用code .
命令开启vscode,使用侧边栏的搜索,然后全局替换(应该是6个)
1 | cv::IMREAD_UNCHANGED |
把ORB-SLAM2源码目录中include/LoopClosing.h
文件中的
1 | typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>, |
修改成:
1 | typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>, |
解压源文件,在该文件夹下打开终端:
这里建议使用记事本打开build.sh,然后逐个命令执行,方便检查错误,且注意!每次运行到最后的make命令如果失败了,在修复了之后需要依次删除对应的build文件夹,重新创建并编译!
1 | cd ORB_SLAM2 |
如果在运行时出现问题:
1 | error: ’usleep’ was not declared in this scope |
那么找到对应的.cc
文件,在其开头的#include
部分添加内容:
1 | #include <unistd.h> |
然后,需要对照着build.sh
中的内容,将涉及到的所有build
文件夹全部删除并重新开始!
在终端添加ROS路径,执行以下两行命令
1 | echo 'export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:'"`pwd`/Examples/ROS" >> ~/.bashrc |
编译ros节点,此时便不再会出现问题了
1 | ./build_ros.sh |
https://blog.csdn.net/zardforever123/article/details/125044004/
rosbag
内容,就是有点混乱,如果你的初衷就是在ROS中实现运行,建议按照我的流程走,然后有问题再参考这个链接的内容!在此感谢此大佬,解救我于水火中!https://blog.csdn.net/qq_49164258/article/details/129375322
rosbag
数据集,在验证数据集部分比较详细https://blog.csdn.net/weixin_43693946/article/details/127538660
此中提到一个python默认是2的问题,应修改为默认的python 3.8.10
,可以参照评论区的建议,执行命令后,重新运行./build_ros.sh
即可,注意重新运行时建议先阅读此sh
脚本内容,将对应的build
文件夹先删除再运行
1 | sudo apt install python-is-python3 |
https://blog.csdn.net/Robot_Starscream/article/details/89435642