6. ROS编程入门--路径跟随(Trajectory following)

本文介绍了一种名为FollowtheCarrot的路径跟随算法,该算法通过计算目标点与机器人当前位置之间的角度差来引导机器人沿预设路径前进,并结合避障机制确保机器人能够在复杂环境中安全导航。

Task

本次实验才采用“Follow the carrot 算法去跟随定义好的路径。控制的目标点在机器人行走的路径上,距离机器人是个常数距离。机器人计算自己的方向角和目标点角度之间的相差度数。控制这个差角为0.
为了在探测时候能够用这个算法,路径需要在实时更新并且需要配合避障,因为在探测时候路径计算的并不精确,机器人有碰撞到障碍物的可能性。

算法

位置和向量

向量的模:

||v||=x2+y2(vector-norm)

点乘,加法,减法:
va=(xva;yva)(mult-vector)

v+u=(xv+xu;yv+yu)(add-vector)

vu=(xvxu;yvyu)(add-vector)

处理输入输出

控制机器人采用Twis消息类型
从激光输入进来的数据可以用来避障
输入Path的消息格式:

std_msgs/Header header
geometry_msgs/PoseStamped[] poses
std_msgs/Header header
geometry_msgs/Pose pose
geometry_msgs/Point position
geometry_msgs/Quaternion orientation

本次实验中只有x、y坐标下的位置,路径存储在一个队列对象MyPoint中,你可以仅仅为每一个在poses向量中的元素建立一个新的MyPoint类的对象,然后添加到路径队列中。每次添加新的控制点需要删掉之前的点。在这种情况下,每一次循环路径都会改变,每次都是跟随最新的路径。将每一个路径变换带Odometry坐标下。

路径

这里写图片描述

移除掉前面的点存储在lastRemoved中。之后需要移除掉路径上被认为已经到达的点,这一步要防止机器人沿着路径后退。
把移除掉的点存储在lastRemoved中。如果没有点移除掉机器人首先去lastRemoved的移除点,否则机器人在lastRemoved和 路径前端之间的线段上寻找目标点。

控制点(control point)

控制点是路径上线和弧的插值点。为了避免计算和选择插值点,估计目标点方法如下:

d=||l⃗ a⃗ +s⃗ 2i+v⃗ ||(approx-condition)

l⃗  :上一次从路径上移除掉的点
s⃗  = f⃗ l⃗  f⃗  :是路径队列的首部值
v⃗  : 前一次迭代的贡献值??
a⃗  :机器人坐标
d : 目标和机器人之间的距离
i : 迭代次数

如果d小于targetDistance, s⃗  v⃗  相加

v⃗ i+1=v⃗ i+s⃗ i2i(approx-passed)

大概迭代10次你会有一个精确的( 210||s⃗ || )目标点的估计值:
t⃗ =l⃗ +v⃗ (target-point)
如果机器人距离路径很远,可能要移除的不仅仅是第一个距离大于targetDistance的点, v⃗  保持为0,机器人朝向第一个被移除的点的移动。
这里写图片描述
如果路径点之间相距比较远,机器人所处的位置如图所示,机器人会找到两个插值点,有可能会导致机器人后退。简单的解决方法是把目标点设置为:移除点和路径队列首项之间的线段 与 过机器人原点的法线 的交点
xv=||a⃗ l⃗ ||cos(φf⃗ l⃗ φa⃗ l⃗ )||s⃗ ||xs(intersection-x)
yv=||a⃗ l⃗ ||cos(φf⃗ l⃗ φa⃗ l⃗ )||s⃗ ||ys(intersection-y)
φf⃗ l⃗  f⃗ ,l⃗  之间的角度, φa⃗ l⃗  a⃗  , l⃗  之间的角度

角速度

φ=φtaα,(target-angle)

ω=kφ

k是常值1/t(t 是返回0值的时间),k越大对路径变化的反应越快速,但是太大会导致不稳定,建议设置为2。

避障

这里写图片描述
绿色区域:设置机器人速度为原先的80%,误差角度设置为:

φ=0.3sign(β)(avoid-front)

蓝色区域:设置机器人速度为原先的60%,误差角度设置为:
φ=0.2sign(β)(avoid-side)

红色区域:设置机器人速度为原先的60%,误差角度设置为:
φ=0.3sign(β)(avoid-front)

code

https://github.com/will1991/rosintrodution

CMakeLists.txt
gfq@gfq-virtual-machine:~$ sudo apt install ros-melodic-gazebo-ros ros-melodic-gazebo-plugins ros-melodic-gazebo-ros-control ros-melodic-joint-state-controller ros-melodic-position-controllers ros-melodic-joint-trajectory-controller 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 ros-melodic-gazebo-plugins 已经是最新版 (2.8.7-1bionic.20221025.195709)ros-melodic-gazebo-plugins 已设置为手动安装。 ros-melodic-gazebo-ros 已经是最新版 (2.8.7-1bionic.20221025.195022)ros-melodic-gazebo-ros 已设置为手动安装。 ros-melodic-gazebo-ros-control 已经是最新版 (2.8.7-1bionic.20221025.202747)ros-melodic-gazebo-ros-control 已设置为手动安装。 ros-melodic-joint-state-controller 已经是最新版 (0.17.3-1bionic.20230131.222942)ros-melodic-joint-state-controller 已设置为手动安装。 ros-melodic-position-controllers 已经是最新版 (0.17.3-1bionic.20230131.223210)ros-melodic-position-controllers 已设置为手动安装。 下列软件包是自动安装的并且现在不需要了: gir1.2-goa-1.0 gir1.2-snapd-1 linux-headers-5.4.0-84-generic linux-hwe-5.4-headers-5.4.0-84 linux-image-5.4.0-84-generic linux-modules-5.4.0-84-generic linux-modules-extra-5.4.0-84-generic 使用'sudo apt autoremove'来卸载它(它们)。 下列【新】软件包将被安装: ros-melodic-joint-trajectory-controller 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。 需要下载 221 kB 的归档。 解压缩后会消耗 1,222 kB 的额外空间。 您希望继续执行吗? [Y/n] y 中止。 gfq@gfq-virtual-machine:~$
最新发布
11-20
<think> 我们面对两个问题: 1. rosdep update 出现 urlopen error timed out 错误(网络连接问题) 2. sudo apt install 安装 ros-melodic-joint-trajectory-controller 时中止(可能由于软件源问题或依赖问题) 针对第一个问题:rosdep update 超时 原因:访问 raw.githubusercontent.com 超时,通常由于网络连接问题(尤其是在国内访问GitHub不稳定) 解决方案:使用国内镜像源替换,例如清华源或中科大源。 针对第二个问题:安装特定包中止 可能原因: a) 软件源未正确配置(特别是ROS的软件源) b) 依赖问题(可能由于部分依赖未安装或版本冲突) c) 网络问题导致下载中断 我们将分步骤解决这两个问题。 ### 第一步:解决 rosdep update 超时问题 方法1:修改rosdep的源为国内镜像(推荐清华源或中科大源) 1. 备份原有配置文件: ```bash sudo cp /etc/ros/rosdep/sources.list.d/20-default.list /etc/ros/rosdep/sources.list.d/20-default.list.bak ``` 2. 修改20-default.list文件,将URL中的`https://raw.githubusercontent.com`替换为国内镜像地址: - 清华源:`https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master` - 中科大源:`https://raw.githubusercontent.com.ros.chinaapp.tech/ros/rosdistro/master`(注意:这个中科大镜像可能已变更,建议使用清华源) 使用sed命令替换(清华源): ```bash sudo sed -i 's|https://raw.githubusercontent.com|https://mirrors.tuna.tsinghua.edu.cn/github-raw|g' /etc/ros/rosdep/sources.list.d/20-default.list ``` 或者手动编辑: ```bash sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list ``` 将文件中所有的: https://raw.githubusercontent.com/ros/rosdistro/master 替换为: https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master 3. 设置环境变量(可选,但推荐): 因为rosdep在访问index-v4.yaml时也可能超时,我们可以设置使用镜像的索引: ```bash echo "export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml" >> ~/.bashrc source ~/.bashrc ``` 4. 清除缓存并更新: ```bash sudo rm -rf /etc/ros/rosdep/sources.list.d/20-default.list.save # 如果有的话 rm -rf ~/.ros/rosdep/sources.cache rosdep update ``` 如果上述方法仍然超时,可以尝试手动下载文件并放置到本地: 方法2:手动下载文件(以base.yaml和python.yaml为例) 1. 创建目录(如果不存在): ```bash sudo mkdir -p /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support/ ``` 2. 下载文件(使用镜像URL): ```bash wget https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/base.yaml -O /tmp/base.yaml wget https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/python.yaml -O /tmp/python.yaml ``` 3. 复制到目标目录: ```bash sudo cp /tmp/base.yaml /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support/ sudo cp /tmp/python.yaml /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support/ ``` 4. 再次更新: ```bash rosdep update ``` ### 第二步:解决安装 ros-melodic-joint-trajectory-controller 中止的问题 1. 确保软件源配置正确(使用国内ROS软件源): 检查你的sources.list中是否有正确的ROS镜像源(如清华源或中科大源)。 对于Ubuntu 18.04 (bionic)ROS Melodic,清华源的配置如下: ```bash sudo sh -c '. /etc/lsb-release && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list' ``` 然后导入密钥(如果之前导入失败,可以尝试以下方法): ```bash sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 如果密钥服务器连接有问题,可以尝试: ```bash sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 或者直接下载密钥并添加: ```bash wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc -O - | sudo apt-key add - ``` 2. 更新软件包索引: ```bash sudo apt-get update ``` 如果遇到签名验证错误(如引用[3]中的问题),请执行: ```bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654 ``` 然后再次运行 `sudo apt-get update` 3. 修复损坏的依赖(可选): ```bash sudo apt-get install -f ``` 4. 安装特定包: ```bash sudo apt-get install ros-melodic-joint-trajectory-controller ``` 5. 如果安装过程中断(可能由于网络问题),可以尝试清除apt缓存并重试: ```bash sudo apt-get clean sudo rm -rf /var/lib/apt/lists/* sudo apt-get update sudo apt-get install ros-melodic-joint-trajectory-controller ``` 6. 如果问题依旧,可以尝试单独下载该deb包并安装: ```bash # 先查找确切的包名称和版本 apt-cache policy ros-melodic-joint-trajectory-controller # 使用apt download下载包(假设包名为ros-melodic-joint-trajectory-controller,版本为1.5.2-0bionic) apt download ros-melodic-joint-trajectory-controller # 然后手动安装 sudo dpkg -i ros-melodic-joint-trajectory-controller_1.5.2-0bionic_amd64.deb ``` ### 其他注意事项: - 确保网络连接稳定,特别是使用国内镜像后。 - 如果使用代理,请确保终端中设置了代理环境变量(如`http_proxy`和`https_proxy`)。 - 检查系统时间是否正确,错误的时间可能导致SSL证书验证失败。 按照以上步骤操作,应该能够解决两个问题。 如果仍然遇到问题,请提供具体的错误信息以便进一步分析。 §§相关问题§§ 1. 如何为ROS配置中科大镜像源? 2. 如何解决sudo apt update时出现的GPG签名错误? 3. 如何手动下载并安装ROS软件包? 4. rosdep update失败的其他解决方案? 5. 安装ROS包时出现依赖冲突如何解决? </think> ### 解决 `rosdep update` 超时错误及 ROS 安装中止问题 #### 一、解决 `rosdep update` 超时错误 **原因**:网络连接问题导致无法访问 GitHub 资源(特别是国内用户访问 raw.githubusercontent.com) ##### ✅ 最佳解决方案:使用国内镜像源替换 ```bash # 1. 备份原配置文件 sudo cp /etc/ros/rosdep/sources.list.d/20-default.list ~/20-default.list.bak # 2. 替换为清华源(推荐) sudo sed -i \ 's|https://raw.githubusercontent.com|https://mirrors.tuna.tsinghua.edu.cn/github-raw|g' \ /etc/ros/rosdep/sources.list.d/20-default.list # 3. 设置环境变量 echo "export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml" | sudo tee -a /etc/ros/rosdep/rosdep.yaml # 4. 清除缓存并更新 rm -rf ~/.ros/rosdep/sources.cache rosdep update ``` ##### 🔧 备选方案:手动下载配置文件 ```bash # 1. 手动下载关键文件 wget https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/base.yaml wget https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/python.yaml # 2. 复制到系统目录 sudo mkdir -p /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support/ sudo cp base.yaml python.yaml /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support/ # 3. 强制更新 rosdep update --include-eol-distros ``` #### 二、解决 `sudo apt install` 安装中止问题 **原因**:通常由软件源配置错误或依赖关系冲突引起(引用[3][5]) ##### ✅ 完整修复步骤: ```bash # 1. 修复软件源配置(使用阿里云ROS镜像) sudo sh -c 'echo "deb http://mirrors.aliyun.com/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' # 2. 修复GPG密钥错误(引用[3]) sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 # 3. 清理APT缓存(引用[5]) sudo apt clean sudo rm -rf /var/lib/apt/lists/* sudo mkdir -p /var/lib/apt/lists/partial # 4. 更新软件源 sudo apt update # 5. 修复损坏的依赖 sudo apt install -f # 6. 安装ROS包(示例) sudo apt install ros-melodic-joint-trajectory-controller ``` #### 三、验证成功的输出示例 ``` reading in sources list data from /etc/ros/rosdep/sources.list.d Hit https://mirrors.tuna.tsinghua.edu.cn/.../base.yaml Hit https://mirrors.tuna.tsinghua.edu.cn/.../python.yaml Updated cache in /home/$USER/.ros/rosdep/sources.cache 正在安装 ros-melodic-joint-trajectory-controller (1.5.2-0bionic) ... ``` ### 🔍 故障排查指南 1. **网络测试**: ```bash ping mirrors.tuna.tsinghua.edu.cn -c 4 curl -I https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml ``` 2. **详细错误日志**: ```bash # 查看apt安装详细过程 sudo apt install ros-melodic-joint-trajectory-controller -o Debug::pkgProblemResolver=yes ``` 3. **彻底重置ROS配置**: ```bash sudo rm -rf /etc/ros/rosdep/sources.list.d/* sudo apt purge ros-* sudo rosdep init # 重新初始化 ``` ### 📚 根本原因分析 | 问题类型 | 主要原因 | 解决方案 | |---------|---------|---------| | `rosdep update` 超时 | GitHub访问受限 | 使用国内镜像源替代 | | 安装包中止 | 软件源配置错误 | 更换阿里云/清华源 | | 安装包中止 | GPG密钥缺失 | 重新导入ROS密钥 | | 安装包中止 | 依赖冲突 | 执行 `sudo apt install -f` | > **重要提示**:90%的安装问题可通过更换国内源解决[^1][^3]。若仍失败,尝试在终端设置代理: > ```bash > export https_proxy=http://<your-proxy>:<port> > ```
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值