【5.12-5.13】实训Day-6&Day-7记录

本文记录了一次从零开始编译ROS工程的过程,包括解决catkin_make命令未找到、环境变量配置、依赖库安装等问题,以及针对旧版代码适配新版OpenCV库的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来了以后给我传了几个具体标定的代码
奈何还没有找到多余的显示器,只能通过远程连接linux桌面,于是要把这些代码拷贝到远程的桌面上,记录一下用到的命令,打开本地terminal,输入:

scp -r 文件路径 远程系统用户名@IP地址:/home/远程系统用户名/文件路径

我的完整命令行:
在这里插入图片描述
之后输入远程的那边的用户密码即可拷贝成功。
然后首先我想先编译一下ros工程,但是按照编译的流程,出现很奇怪的错误:
在这里插入图片描述
catkin_make是编译的命令,但是却说命令找不到,问了带教老师,老师说catkin是ros自带的编译工具,那ros已经安装了,不应该没有,于是我又试了一下测试ros是否安装的命令:
在这里插入图片描述
仍然是找不到命令,于是我开始怀疑ros究竟有没有安装成功,或者是没有加入环境变量的问题,于是又重新设置了环境变量,但还是没有解决,最终仔细去看了一下/opt路径下的ros安装包,发现安装的版本是eloquent,这个是ros2的版本,怀疑还是ros2与ubuntu18.04的不相兼容,并且老师说给我的工程是ros1的,问题应该就在这里了,所以重新安装ros1的melodic版本(不同版本的ubuntu对应不同版本的ros,具体对应关系参考以下链接)
放一个非常完整的ros安装及编译的教程ROS入门教程,按照里面的安装配置过程,终于是成功安装了,测试得到了以下结果:
在这里插入图片描述
真的是一个大坑,终于可以开始准备编译,但是没有想到的是这才是debug的开始…
首先按照前面的入门教程创建一个工作空间:

mkdir -p catkin_ws/src

在src下放入整个工程的代码,然后在catkin_ws的目录下开始编译,输入以下命令:

catkin_make

在这里插入图片描述
但是今天最大的努力就是让这个1%变成了98%,但还是没有到100%,基本上是每编译10%就会报错,刚开始报的错都比较好解决,在这里记录一下。

  1. The build space at ‘×××/build’ was previously built
    这个是由于我在创建新的工作空间catkin_ws之前仍然是在test这个为ros-eloquent这个版本的工作空间下编译的,所以重新创建一个工作空间就可以了,或者参考一下链接:
    https://blog.csdn.net/qq_42735696/article/details/112801451
  2. Could not find a package configuration file provided by "jsk_recognition_msgs”
    解决办法:
sudo apt-get install ros-melodic-jsk-recognition-msgs
  1. Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found.
    解决办法:https://blog.csdn.net/qq_43310597/article/details/109256838
  2. nlopt.hpp找不到对应的文件
    解决办法:
sudo apt-get install libnlopt-dev
  1. 接下来就是非常棘手的问题,由于代码的版本比较老,而现在下载的库是opencv4.1.1的,导致很多头文件找不到以及函数不存在的问题,总的来说我添加了以下几个头文件:
#include <opencv2/imgproc.hpp> //去掉#include <opencv/cv.h>
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui_c.h>
#include "opencv2/imgproc/imgproc_c.h" 
#include <opencv2/highgui/highgui.hpp>

参考链接如下:
https://blog.csdn.net/weixin_44312186/article/details/89000922
https://blog.csdn.net/qq_48705696/article/details/110530758
https://blog.csdn.net/yuteng12138/article/details/105204292

还有一些函数的问题我根据提示改成了现在版本里面的函数写法,于是解决掉这些bug,就已经编译了98%,但是还有几个错误,怎么也是解决不了,问了带教老师,但是带教老师这两天稍微有点忙,所以也是没能解决,希望这周之内能解决吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法5.12-5.13通常是指用于表达式求值的算法。这类算法在编译原理和编程语言解释器中非常重要。以下是对这类算法的介绍: 1. 中缀表达式转后缀表达式(算法5.12): 这个过程通常使用栈来实现。算法的基本步骤如下: - 创建一个空栈用于存储运算符 - 创建一个空列表用于存储输出 - 遍历中缀表达式的每个符号: * 如果是操作数,直接添加到输出列表 * 如果是左括号,压入栈中 * 如果是右括号,弹出栈中元素并添加到输出,直到遇到左括号 * 如果是运算符,当栈顶运算符的优先级大于或等于当前运算符时,弹出栈顶运算符并添加到输出,然后将当前运算符压入栈中 - 遍历结束后,将栈中剩余的运算符全部弹出并添加到输出 2. 后缀表达式求值(算法5.13): 这个过程也使用栈来实现。算法的基本步骤如下: - 创建一个空栈用于存储操作数 - 遍历后缀表达式的每个符号: * 如果是操作数,将其转换为数值并压入栈中 * 如果是运算符,从栈中弹出两个操作数,应用运算符后将结果压回栈中 - 遍历结束后,栈中剩下的元素就是表达式的最终结果 这些算法的主要优点包括: - 简单高效:使用栈结构可以有效地处理运算符的优先级 - 易于实现:算法步骤清晰,易于用各种编程语言实现 - 通用性强:可以处理任意复杂的算术表达式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值