ros大车学习2024.3.28-2024.5.14小结(1)

ros一键安装推荐wget http://fishros.com/install -O fishros && . fishros

(原本的资料的是melodic的,因为资料里面的镜像是ubuntu18.04的,而我用的是鲁班猫sk3566,ubuntu20.04,镜像来源于野火官网)首先获取新noetic源码2024.5.13从客服那得到的

https://pan.baidu.com/e/1tBnA_U0iR79Eapx2g7jwGA

然后在板子创建工作空间

mkdir catkin_ws

cd catkin_ws

将源码src文件整个复制到catkin_ws中

之后开始编译

首先编译三个文件(最基本的功能包)

先不讲哪三个,一开始我不知道怎么运行小车,只会运行不知道怎么把鲁班猫板子和下位机连接起来。怎么控制小车运行

所以出现了以下错误

可以看到我并没有用usb线将下位机stm32和板子鲁班猫连接,只是连接一个激光雷达和开启了小车的电源

解决方法:

检查一下ros主控是否接到stm32的串口三,没接的话接一下,接了之后还有这个报错的话,创建一下串口别名 执行下面四步 :

1、 ssh登录(如果是在小车上直接执行,可以忽略这一步)

2、 cd wheeltec_robot/src/turn_on_wheeltec_robot(注意 cd 后面有个空格)

3、 sudo ./wheeltec_udev.sh(注意 sudo 后面有个空格)

4、 拔插串口三 如果第三步执行失败,先执行下面这一步再执行第三步 cd scripts/(注意 cd 后面有个空格) 上面四步执行完成后,执行 ll /dev (是两个小写的L,ll 后面有个空格)查看是否有 wheeltec_controller,有的话就是添加串口别名成功了

讲下sudo ./wheeltec_udev.sh这个操作

可能会遇到这个问题

解决方法:

给文件赋权限

sudo chmod -R 777 src/(我直接给src的文件全部赋予了)

然后这个操作是干的呢

答案是执行脚本文件,用来对串口设备进行串口别名的

然后接下来讲回运行小车最基本需要哪三个功能包

讲个我遇到的问题,因为我的鲁班猫板子是2G的内存,所以运行很卡,很容易在编译的时候卡住

解决方法是

编译出现卡死情况,要扩展缓存后编译,主控可以通过扩展缓存以提高编译稳定性 扩展命令:

sudo dd if=/dev/zero of=/swap bs=1M count=4096
sudo mkswap /swap
sudo chmod 600 /swap
sudo swapon -a /swap

这是用来拓展编译内存的,第一句运行会比较久

然后第二个问题,我们编译的是一开始都是catkin_make,但这是把所有功能包都编译的意思

当我们拿到一大堆功能包时,刚开始应该一个包一个包的去编译,这样能找出错误,这个错误属于哪个包的,而且一下子编译所有包,很容易卡住。

解决方法

catkin_make -DCATKIN_WHITELIST_PACKAGES="包名"

eg:

catkin_make -DCATKIN_WHITELIST_PACKAGES="world_canvas_msgs"

然后我功能包编译好了,线也连上了,串口也对了,就开始运行键盘控制小车的launch文件

出现以下错误:

!!!此时我的ros源码的melodic版的代码,但我是ubuntu20.04

所以当时解决的方法是:

2024.3.28获得的Noetic源码(不要用) 链接: 百度网盘icon-default.png?t=N7T8https://pan.baidu.com/s/14vGCwHFQrigHz9hhCoIUMg

     

但有个问题:

代码里没有robot_pose_ekf这个功能包

但这个可以通过apt安装的

也可以通过我这个链接获取

链接:https://pan.baidu.com/s/1bDe3MNFn3SAyIeMuV6AHVw?pwd=7777
提取码:7777
--来自百度网盘超级会员V5的分享

之后我又遇到一个问题,系统时间的问题,板子一关机,系统的时间就不会走了

需要修改时间后在进行编译

解决方法:

修改文件编译要求修改时间的注意下面两个步骤

1、修改系统时间: sudo date -s "2022-06-15 09:00:00"

2、递归修改当前(终端)文件夹下文件修改时间: find ./* -exec touch {};

参考:

然后下一个问题:当我下好noetic源码进行编译时还是出现之前的错误(所以怀疑跟源码版本没关系):

然后看py文件

解决方法:在python后面加个3

然后代码可以运行了,但车动不了

查看oled屏

电压不对,大车电压正常是20多v以上的

解决方法:

需要打开打车电源

并重新启动一下ros代码

下一个问题激光雷达

思岚的雷达

wheeltec_lidar.launch的型号不对

wheeltec_lidar.launch的内容

解决方法:

(但这个更改错误,因为我不是这个型号,但出现新的问题)

没有carto算法的建图的,这个源码里面不包括。

这个在noetic安装不了的,因为apt安装会显示找不到这个包,目前之后orin系列的主控镜像才有

解决方法:

建图可以换其他算法,

这个只有carto没有,其他都有的,在mappin.launch里面修改

除carto算法,其他都是apt安装的,算法也是,要装其他依赖,只是编译,估计也是用不了的,这里算法的命令,melodic改为noetic

其他的依赖安装查看资料

然后还是有问题

是因为之前的雷达型号还是没选对

解决方法:

修改wheeltec_lidar.launch

然后出现world_canvas包出错

已经编译过了

输入source ./devel/setup.bash,再运行功能

还是一样

sudo chmod -R 777 src/

还是有这个问题

最后解决方法:

用新的

2024.4.1 Noetic源码 链接: 百度网盘

实现激光雷达建图需要编译哪些包?

用新的源码编译卡住了

解决方法:

等一会

这个警告,应该没有影响的,主要看报错

mapserver保存地图错误

可能整体编译,这个包太深了没有编译通过

解决方法:

指定编译这个包

解决方法:

删除掉编译生成build和deve文件夹里这个包,在指定编译

还是有这个错误

不过保存地图的代码,可以运行

之前报错找不到包,现在是是保存地址错了

默认还是官方镜像的路径,自己搭建环境需要修改

note: 需要删除掉编译生成build和deve文件夹里这个包

删除之前编译生成的,会冲突,就需要重新编译成功生成新的文件

编译move_base出错

解决方法:

缺东西了,可以在网上搜一下

启动自主导航出错

方法:

sudo apt install ros-noetic-map-server

在工作空间里面打开终端,输入sudo chmod -R 777 src/

无用

客服问题是:这个看着是因为系统本身缺少内容导致的,并且从您前面你的图看,缺太多了

启动自主导航后。出现警告

这里说的是地图读取不出来

解决方法:

在navigation.launch里面改的

获得一个新的map_server(但还是一样报错)

链接:https://pan.baidu.com/s/1eatccp5vvhtxETu5nG8xGQ?pwd=7777
提取码:7777
--来自百度网盘超级会员V5的分享

error:
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadLE16'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_FillRect'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadBE32'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_SetColorKey'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ClearError'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_FreeSurface'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_MapRGB'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_RWFromFile'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_SetError'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_UpperBlit'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadLE32'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_CreateRGBSurface'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_Error'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_GetError'
collect2: error: ld returned 1 exit status
make[2]: *** [navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/build.make:128:/home/cat/hl/wheeltec_robot/devel/lib/map_server/map_server] 错误 1
make[1]: *** [CMakeFiles/Makefile2:922:navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j4 -l4" failed

我查了网上说这个问题是表示在链接时找不到 SDL_ReadLE16 函数的定义。

这个错误通常表示在链接时找不到 SDL_ReadLE16 函数的定义。这可能是由于以下几种原因之一导致的:

  1. SDL_image 库版本不匹配:你正在使用的 SDL_image 库版本可能不兼容你的 SDL 版本。请确保你的 SDL_image 版本与 SDL 版本匹配,或者尝试更新或降级其中一个库的版本。

  2. 编译选项错误:在编译或链接时可能没有正确地包含 SDL_image 库。请确保在编译命令中包含了正确的 -lSDL_image 选项,以便链接 SDL_image 库。

  3. 依赖关系问题:SDL_image 可能依赖于其他库,而这些库可能没有正确地链接。请检查是否有其他必需的库未链接,然后添加到链接命令中。

  4. SDL 库配置问题:SDL 库可能没有正确地安装或配置。请确保 SDL 库正确安装,并且链接器可以找到它们的位置。

你可以尝试查看编译和链接命令,确保正确地包含了 SDL_image 库,并且所有必需的依赖项都正确链接。

好的,让我们从确认 SDL_image 库版本开始:

  1. 确认 SDL_image 库版本

    • 在终端中输入以下命令来查看已安装的 SDL_image 库的版本:
       
    • apt-cache policy libsdl-image-dev
      
    • 这个命令会显示 SDL_image 库的版本信息,包括安装的版本号以及可用的版本列表。确保安装的版本与你的 SDL 版本兼容。
  • 检查 SDL 版本

    • 如果你不确定已安装的 SDL 版本,你也可以使用类似的命令来查看 SDL 库的版本信息:
       
    • apt-cache policy libsdl2-dev
      
    • 确保安装的 SDL 版本与 SDL_image 版本兼容。
  1. 根据版本兼容性调整

    • 如果你发现 SDL_image 和 SDL 版本不兼容,你可以尝试更新或降级其中一个库的版本,以确保它们之间的兼容性。
    • 如果版本兼容性没有问题,那么我们将继续检查编译选项和依赖关系。

请尝试执行以上步骤,并在确认 SDL_image 和 SDL 版本兼容后进行下一步操作。如果你遇到任何问题或需要更多帮助,请随时告诉我。

问题:cat@lubancat:~/Desktop$ apt-cache policy libsdl-image-dev N: 无法定位软件包 libsdl-image-dev

看起来 libsdl-image-dev 软件包在你的系统中没有被安装。这可能是因为软件源中没有该软件包,或者你的软件源列表不包含它所在的仓库。

你可以尝试更新软件源列表,并尝试安装 libsdl-image-dev 软件包。请在终端中执行以下命令:

 
 

bash

sudo apt update
sudo apt install libsdl-image-dev

这会更新你的软件源列表并安装 SDL_image 开发包。安装完成后,你可以再次运行 apt-cache policy libsdl-image-dev 命令来确认已安装的 SDL_image 版本。

如果你遇到任何问题或需要更多帮助,请随时告诉我。

对于 Ubuntu 20.04,你可以安装以下版本的 SDL 和 SDL_image 库:

  1. SDL 库:Ubuntu 20.04 默认提供了 SDL2 库,可以直接通过 libsdl2-dev 包安装。所以你应该安装 libsdl2-dev

  2. SDL_image 库:同样地,Ubuntu 20.04 默认提供了 SDL2_image 库,你可以通过 libsdl2-image-dev 包来安装。

所以你可以按照之前提供的命令来安装这两个库:

 
 

bash

sudo apt update
sudo apt install libsdl2-dev
sudo apt install libsdl2-image-dev

这将安装适用于 Ubuntu 20.04 的 SDL 和 SDL_image 库。安装完成后,你可以通过查看其版本信息来确认安装是否成功。

如果你需要进一步的帮助,请随时告诉我。

Ubuntu 20.04确认 SDL_image 库版本

要确认在 Ubuntu 20.04 上安装的 SDL_image 库版本,你可以执行以下命令:

 
 

bash

apt-cache policy libsdl2-image-dev

这将显示安装的 SDL_image 库的版本信息,包括安装的版本号以及可用的版本列表。请在终端中执行此命令,并查看输出以确认 SDL_image 库的版本。

重新来

让我们继续在 Ubuntu 20.04 下执行确认 SDL_image 库版本的步骤。请在终端中执行以下命令来查看已安装的 SDL_image 库的版本信息:

 
 

bash

apt-cache policy libsdl2-image-dev

这将显示 SDL_image 库的版本信息。请在终端中执行此命令,并查看输出以确认 SDL_image 库的版本。完成后,请告诉我查看到的版本信息。

运行结果我i
libsdl2-dev:
  已安装: 2.0.10+dfsg1-3
  候选:  2.0.10+dfsg1-3
  版本列表:
 *** 2.0.10+dfsg1-3 500
        500 https://mirrors.ustc.edu.cn/ubuntu-ports focal/universe arm64 Packages
        100 /var/lib/dpkg/status

根据你提供的输出,可以看到已安装的 SDL2 版本为 2.0.10+dfsg1-3。然而,这个命令并没有提供关于 SDL_image 库的版本信息。

为了确认 SDL_image 库的版本,请执行以下命令:

bash

apt-cache policy libsdl2-image-dev

这将显示 SDL_image 库的版本信息。请在终端中执行此命令,并告诉我查看到的版本信息。

cat@lubancat:~$ apt-cache policy libsdl2-image-dev
libsdl2-image-dev:
  已安装: 2.0.5+dfsg1-2
  候选:  2.0.5+dfsg1-2
  版本列表:
 *** 2.0.5+dfsg1-2 500
        500 https://mirrors.ustc.edu.cn/ubuntu-ports focal/universe arm64 Packages
        100 /var/lib/dpkg/status

根据输出,你的系统上安装的 SDL_image 库版本是 2.0.5+dfsg1-2。

接下来,让我们继续执行下一步,检查编译选项。请确保在编译程序时包含了正确的 -lSDL2_image 选项。你可以检查你的编译命令,通常在 Makefile 中定义,或者是在终端中手动输入的。确保你的编译命令中包含了 -lSDL2_image 选项。

在 Ubuntu 20.04 下,使用 SDL2_image 库时,你应该使用 -lSDL2_image-lSDL2 选项来链接相关库。

下面是一个示例的编译命令:

 
 

bash

gcc your_program.c -o your_program -lSDL2 -lSDL2_image

请将 your_program.c 替换为你的源代码文件名,并使用上述的编译命令进行编译。这将确保你的程序正确链接了 SDL2 和 SDL2_image 库。

ubuntu20.04下的ros编译map_server

在 Ubuntu 20.04 下,ros使用 SDL2 库时,你应该使用 -lSDL2_image 和 -lSDL2 选项来链接相关库

在 Ubuntu 20.04 下,ROS 在使用 SDL2 库时,通常会使用 pkg-config 来管理库的链接。你可以通过 pkg-config 获取正确的链接选项,而不需要手动指定 -lSDL2_image-lSDL2

下面是一个示例 CMakeLists.txt 文件,假设你的 ROS 软件包名为 my_package,需要链接到 SDL2 和 SDL2_image 库:

 
 

cmake

cmake_minimum_required(VERSION 3.0.2)
project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  # 其他依赖项
)

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)

catkin_package(
  # 包信息
)

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${SDL2_INCLUDE_DIRS}
  ${SDL2_IMAGE_INCLUDE_DIRS}
)

add_executable(my_node src/my_node.cpp)

target_link_libraries(my_node
  ${catkin_LIBRARIES}
  ${SDL2_LIBRARIES}
  ${SDL2_IMAGE_LIBRARIES}
)

在这个示例中,我们使用 find_package(SDL2 REQUIRED)find_package(SDL2_image REQUIRED) 来查找 SDL2 和 SDL2_image 库,并在 target_link_libraries 中链接到这些库。

确保你已经正确安装了 SDL2 和 SDL2_image 库,你可以使用以下命令来安装:

 
 

bash

sudo apt-get install libsdl2-dev libsdl2-image-dev

这样就能正确链接 SDL2 和 SDL2_image 库,而不需要手动指定 -lSDL2_image-lSDL2 选项。

CMake Error at navigation-noetic-devel/map_server/CMakeLists.txt:13 (find_package):
  By not providing "FindSDL2_image.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "SDL2_image", but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_image" with
  any of the following names:

    SDL2_imageConfig.cmake
    sdl2_image-config.cmake

  Add the installation prefix of "SDL2_image" to CMAKE_PREFIX_PATH or set
  "SDL2_image_DIR" to a directory containing one of the above files.  If
  "SDL2_image" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeOutput.log".
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeError.log".
make: *** [Makefile:1034:cmake_check_build_system] 错误 1
Invoking "make cmake_check_build_system" failed

这个错误提示说明 CMake 在 navigation-noetic-devel/map_server/CMakeLists.txt 文件中无法找到 SDL2_image 库的配置文件。这可能是因为你没有正确安装 SDL2_image 或者 CMake 的模块路径没有包含 SDL2_image 的配置文件位置。

要解决这个问题,你可以尝试以下几个步骤:

  1. 确保你已经正确安装了 SDL2_image 库。可以使用以下命令来安装:

     

    bash

  • sudo apt-get install libsdl2-image-dev
    
  • 检查 SDL2_image 库的安装路径。默认情况下,SDL2_image 库的安装路径应该在 /usr/include/SDL2/usr/lib/x86_64-linux-gnu。你可以通过以下命令确认:

     

    bash

  • ls /usr/include/SDL2
    ls /usr/lib/x86_64-linux-gnu
    
  • 在你的 CMakeLists.txt 文件中添加以下行,指定 SDL2_image 的安装路径:

     

    cmake

  • set(SDL2_IMAGE_DIR /usr/include/SDL2)
    

    请确保将路径 /usr/include/SDL2 替换为你实际的安装路径。

  • 如果步骤 3 仍然无法解决问题,你可以尝试手动设置 CMAKE_MODULE_PATH 变量,告诉 CMake 去哪里查找 SDL2_image 的配置文件。在你的 CMakeLists.txt 文件中添加以下行:

     

    cmake

  • set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /path/to/sdl2_image/cmake/modules)
    

    请将路径 /path/to/sdl2_image/cmake/modules 替换为你实际的路径。

  • 重新运行 CMake 构建过程,看看问题是否已经解决。

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_fad99/fast && /usr/bin/make -f CMakeFiles/cmTC_fad99.dir/build.make CMakeFiles/cmTC_fad99.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_fad99.dir/src.c.o
/usr/bin/cc   -DCMAKE_HAVE_LIBC_PTHREAD   -o CMakeFiles/cmTC_fad99.dir/src.c.o   -c /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_fad99
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fad99.dir/link.txt --verbose=1
/usr/bin/cc  -DCMAKE_HAVE_LIBC_PTHREAD    -rdynamic CMakeFiles/cmTC_fad99.dir/src.c.o  -o cmTC_fad99
/usr/bin/ld: CMakeFiles/cmTC_fad99.dir/src.c.o: in function `main':
src.c:(.text+0x48): undefined reference to `pthread_create'
/usr/bin/ld: src.c:(.text+0x50): undefined reference to `pthread_detach'
/usr/bin/ld: src.c:(.text+0x5c): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_fad99.dir/build.make:87:cmTC_fad99] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_fad99/fast] 错误 2


Source file was:
#include <pthread.h>

void* test_func(void* data)
{
  return data;
}

int main(void)
{
  pthread_t thread;
  pthread_create(&thread, NULL, test_func, NULL);
  pthread_detach(thread);
  pthread_join(thread, NULL);
  pthread_atfork(NULL, NULL, NULL);
  pthread_exit(NULL);

  return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_98d57/fast && /usr/bin/make -f CMakeFiles/cmTC_98d57.dir/build.make CMakeFiles/cmTC_98d57.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c
Linking C executable cmTC_98d57
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_98d57.dir/link.txt --verbose=1
/usr/bin/cc  -DCHECK_FUNCTION_EXISTS=pthread_create    -rdynamic CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o  -o cmTC_98d57  -lpthreads
/usr/bin/ld: 找不到 -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_98d57.dir/build.make:87:cmTC_98d57] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_98d57/fast] 错误 2

这个错误提示表明在编译时找不到pthread库。在你的CMakeLists.txt文件中,你需要确保正确链接pthread库。你可以尝试在CMakeLists.txt中添加以下内容:

 
 

cmake

find_package(Threads REQUIRED)
target_link_libraries(your_target_name Threads::Threads)

将"your_target_name"替换为你的目标可执行文件的名称。这将确保在构建时正确链接pthread库。

另外,你的错误信息中提到了"-lpthreads",这可能是一个拼写错误。正确的库应该是"-lpthread"而不是"-lpthreads"。因此,你也可以尝试将CMakeLists.txt中的"-lpthreads"改为"-lpthread"。

这是CMake Error at navigation-noetic-devel/map_server/CMakeLists.txt:13 (find_package):
  By not providing "FindSDL2_image.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "SDL2_image", but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_image" with
  any of the following names:

    SDL2_imageConfig.cmake
    sdl2_image-config.cmake

  Add the installation prefix of "SDL2_image" to CMAKE_PREFIX_PATH or set
  "SDL2_image_DIR" to a directory containing one of the above files.  If
  "SDL2_image" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeOutput.log".
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeError.log".
make: *** [Makefile:1034:cmake_check_build_system] 错误 1
Invoking "make cmake_check_build_system" failed的错误日志

这个错误表明CMake在查找SDL2_image时没有找到相应的包配置文件。要解决这个问题,你可以按照以下步骤进行操作:

  1. 检查SDL2_image是否已安装:确保你的系统上已经安装了SDL2_image库及其开发文件。你可以使用系统包管理器来安装,或者从SDL2_image的官方网站下载并手动安装。

  2. 设置CMAKE_PREFIX_PATH:如果SDL2_image安装在非标准路径下,你可能需要设置CMAKE_PREFIX_PATH环境变量,以便CMake能够找到SDL2_image。你可以在命令行中设置,也可以在CMakeLists.txt文件中设置:

     

    cmake

  • set(CMAKE_PREFIX_PATH "/path/to/SDL2_image")
    

    将"/path/to/SDL2_image"替换为SDL2_image安装的实际路径。

  • 设置SDL2_image_DIR:如果SDL2_image安装了相应的CMake配置文件,你可以直接设置SDL2_image_DIR变量来告诉CMake它的位置。在命令行中设置,或者在CMakeLists.txt文件中设置:

     

    cmake

  1. set(SDL2_image_DIR "/path/to/SDL2_image")
    

    将"/path/to/SDL2_image"替换为SDL2_image配置文件所在的目录。

通过执行以上步骤,你应该能够让CMake正确找到SDL2_image库,并成功配置你的项目。

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_fad99/fast && /usr/bin/make -f CMakeFiles/cmTC_fad99.dir/build.make CMakeFiles/cmTC_fad99.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_fad99.dir/src.c.o
/usr/bin/cc   -DCMAKE_HAVE_LIBC_PTHREAD   -o CMakeFiles/cmTC_fad99.dir/src.c.o   -c /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_fad99
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fad99.dir/link.txt --verbose=1
/usr/bin/cc  -DCMAKE_HAVE_LIBC_PTHREAD    -rdynamic CMakeFiles/cmTC_fad99.dir/src.c.o  -o cmTC_fad99
/usr/bin/ld: CMakeFiles/cmTC_fad99.dir/src.c.o: in function `main':
src.c:(.text+0x48): undefined reference to `pthread_create'
/usr/bin/ld: src.c:(.text+0x50): undefined reference to `pthread_detach'
/usr/bin/ld: src.c:(.text+0x5c): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_fad99.dir/build.make:87:cmTC_fad99] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_fad99/fast] 错误 2


Source file was:
#include <pthread.h>

void* test_func(void* data)
{
  return data;
}

int main(void)
{
  pthread_t thread;
  pthread_create(&thread, NULL, test_func, NULL);
  pthread_detach(thread);
  pthread_join(thread, NULL);
  pthread_atfork(NULL, NULL, NULL);
  pthread_exit(NULL);

  return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_98d57/fast && /usr/bin/make -f CMakeFiles/cmTC_98d57.dir/build.make CMakeFiles/cmTC_98d57.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c
Linking C executable cmTC_98d57
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_98d57.dir/link.txt --verbose=1
/usr/bin/cc  -DCHECK_FUNCTION_EXISTS=pthread_create    -rdynamic CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o  -o cmTC_98d57  -lpthreads
/usr/bin/ld: 找不到 -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_98d57.dir/build.make:87:cmTC_98d57] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”

这个错误表明在CMake测试阶段,编译器无法找到pthread库。要解决这个问题,你可以尝试以下步骤:

  1. 查找正确的pthread库:首先确保你的系统中已经安装了pthread库。通常情况下,pthread库是Linux系统的一部分,但在某些情况下可能需要单独安装。你可以通过包管理器来安装,例如对于Debian/Ubuntu系统,你可以运行以下命令:

     
  • sudo apt-get install libpthread-stubs0-dev
    

    对于其他Linux发行版,你需要查找相应的包名并使用适当的包管理器进行安装。

  • 设置正确的链接库:错误信息中提到找不到"-lpthreads",这表明CMake正在尝试链接pthread库时使用了错误的名称。pthread库的名称可能因系统而异,通常应该是"-lpthread"而不是"-lpthreads"。你可以在CMakeLists.txt文件中显式指定链接pthread库:

     

    cmake

  1. find_package(Threads REQUIRED)
    target_link_libraries(your_target_name Threads::Threads)
    

    将"your_target_name"替换为你的目标名称。

  2. 重新运行CMake:在进行上述更改后,重新运行CMake来重新生成Makefile,并确保编译器能够找到pthread库。

通过执行以上步骤,你应该能够解决CMake测试阶段中关于pthread的链接错误。

怎么查找SDL2和SDL2_image的安装路径

要查找SDL2和SDL2_image的安装路径,你可以执行以下步骤:

  1. 使用pkg-config:SDL2和SDL2_image通常提供了pkg-config文件,可以用来查询它们的安装路径。你可以使用以下命令来查找:

     

    bash

  • pkg-config --cflags --libs sdl2 sdl2_image
    

    这将输出SDL2和SDL2_image的编译标志和链接标志,其中包含了包含文件的路径和库的路径。

  • 使用locate命令:如果你的系统上安装了SDL2和SDL2_image,并且updatedb数据库已经更新,你可以使用locate命令来搜索相关文件的路径。例如:

     

    bash

  1. locate SDL2
    locate SDL2_image
    

    这将列出与SDL2和SDL2_image相关的文件及其路径,包括头文件、库文件等。

  2. 查看默认安装路径:通常情况下,SDL2和SDL2_image会被安装在系统的默认路径下,例如在Linux上可能是/usr/include/usr/lib。你可以直接查看这些目录来确认是否存在SDL2和SDL2_image的相关文件。

通过执行这些步骤,你应该能够找到SDL2和SDL2_image的安装路径。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2
-D_REENTRANT -I/usr/local/include -I/usr/local/include/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2

根据你提供的输出,SDL2的安装路径如下:

  • 头文件路径:/usr/local/include/SDL2
  • 库文件路径:/usr/local/lib
  • 链接标志:-lSDL2

你可以使用这些路径来包含SDL2头文件和链接SDL2库文件到你的项目中。如果你的SDL2程序需要链接SDL2_image库,你需要执行类似的步骤来找到SDL2_image的安装路径。

怎么连接到我的ros下的功能包:问sdl2怎么连接到功能包

要将SDL2集成到ROS功能包中,你需要在你的功能包中包含SDL2的头文件和链接SDL2库。以下是一种可能的方法:

  1. 将SDL2头文件添加到功能包中:在你的功能包目录下创建一个include文件夹,并将SDL2的头文件复制到该文件夹中。你可以在SDL2的安装路径中找到这些头文件(例如/usr/local/include/SDL2)。
 
 

bash

mkdir -p my_package/include
cp -r /usr/local/include/SDL2 my_package/include
  1. 将SDL2库添加到功能包中:将SDL2的库文件复制到你的功能包中的lib文件夹中。你可以在SDL2的安装路径中找到这些库文件(例如/usr/local/lib)。
 
 

bash

mkdir -p my_package/lib
cp /usr/local/lib/libSDL2.so* my_package/lib
  1. 修改CMakeLists.txt文件:在你的功能包的CMakeLists.txt文件中,添加以下行,以指定SDL2的头文件和库文件路径,并链接SDL2库到你的可执行文件中。
 
 

cmake

cmake_minimum_required(VERSION 2.8.3)
project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

add_executable(my_node src/my_node.cpp)

target_link_libraries(my_node
  ${catkin_LIBRARIES}
  SDL2
)

确保在find_package(catkin...)之后添加include_directories指令,将SDL2头文件路径添加到编译器的包含路径中。然后,在target_link_libraries指令中添加SDL2,以链接SDL2库到你的可执行文件中。

  1. 构建功能包:在你的ROS工作空间中构建你的功能包,以便ROS可以找到SDL2的头文件和库文件,并将它们链接到你的可执行文件中。
 
 

bash

cd ~/catkin_ws
catkin_make

完成这些步骤后,你的ROS功能包应该能够正确连接和使用SDL2库了。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2_image Package sdl2_image was not found in the pkg-config search path. Perhaps you should add the directory containing `sdl2_image.pc' to the PKG_CONFIG_PATH environment variable No package 'sdl2_image' found

如果pkg-config找不到SDL2_image的信息,这可能意味着SDL2_image的pkg-config文件没有正确安装或配置。请确保你已经按照正确的方式安装了SDL2_image,并且pkg-config能够找到它。

在一些系统中,SDL2_image的pkg-config文件可能位于/usr/lib/pkgconfig目录下。你可以检查一下这个目录,看看是否有一个名为sdl2_image.pc的文件。如果没有找到,你可能需要手动安装SDL2_image的开发包。

如果SDL2_image的pkg-config文件已经安装但pkg-config仍然找不到,你可以尝试将包含该文件的目录添加到PKG_CONFIG_PATH环境变量中。假设SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下,你可以执行以下命令:

 
 

bash

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

然后再次尝试运行pkg-config --cflags --libs sdl2_image命令来检查是否找到了SDL2_image。如果一切顺利,你应该能够看到SDL2_image的编译和链接选项。

如果以上步骤都没有解决问题,你可能需要重新安装SDL2_image或者查阅SDL2_image的文档,以确保正确配置了pkg-config。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2_image
Package sdl2_image was not found in the pkg-config search path.
Perhaps you should add the directory containing `sdl2_image.pc'
to the PKG_CONFIG_PATH environment variable
No package 'sdl2_image' found

如果pkg-config无法找到SDL2_image,可能是因为SDL2_image的pkg-config文件没有正确安装或配置。请按照以下步骤检查和解决问题:

  1. 确认SDL2_image已正确安装:确保已正确安装SDL2_image库。你可以使用包管理器(如apt、yum、brew等)安装SDL2_image,或者从源代码进行手动构建和安装。

  2. 查找pkg-config文件位置:在终端中执行以下命令,查找SDL2_image的pkg-config文件位置:

     

    bash

  • pkg-config --variable pc_path pkg-config
    

    输出应该是一个或多个目录路径,用冒号分隔。检查这些目录中是否存在名为sdl2_image.pc的文件。如果找不到,请继续下一步。

  • 手动设置PKG_CONFIG_PATH:将包含sdl2_image.pc文件的目录添加到PKG_CONFIG_PATH环境变量中。假设SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下,你可以执行以下命令:

     

    bash

  1. export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    

    注意,这只会在当前终端会话中生效,如果需要持久设置,请将这行命令添加到你的shell配置文件(如.bashrc.zshrc)中。

  2. 重新运行pkg-config命令:在终端中再次运行命令pkg-config --cflags --libs sdl2_image,检查是否能够找到SDL2_image。

如果以上步骤仍然无法解决问题,可能需要重新安装SDL2_image或者查阅SDL2_image的文档以了解更多关于pkg-config的配置信息。

usr/bin/mkdir -p /usr/local/lib/cmake/SDL2_image
/usr/bin/install -c -m 644 sdl2_image-config.cmake /usr/local/lib/cmake/SDL2_image
/usr/bin/install -c -m 644 sdl2_image-config-version.cmake /usr/local/lib/cmake/SDL2_image
 /usr/bin/mkdir -p '/usr/local/include/SDL2'
 /usr/bin/install -c -m 644 include/SDL_image.h '/usr/local/include/SDL2'
 /usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 SDL2_image.pc '/usr/local/lib/pkgconfig'
make[2]: 离开目录“/home/cat/下载/SDL2_image-2.8.2”
make[1]: 离开目录“/home/cat/下载/SDL2_image-2.8.2”

根据你提供的输出,SDL2_image已经成功安装,并且相关的文件已经被复制到了系统目录中。然而,根据你之前的问题描述,pkg-config仍然无法找到SDL2_image。

请尝试执行以下操作:

  1. 确保在执行pkg-config --cflags --libs sdl2_image命令之前,已经执行了设置PKG_CONFIG_PATH的命令。如果没有,请执行以下命令:

     

    bash

  1. export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    
  2. 然后再次运行pkg-config --cflags --libs sdl2_image命令,检查是否能够找到SDL2_image。

如果还是无法找到SDL2_image,请检查一下PKG_CONFIG_PATH变量是否设置正确,并确保SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下。如果问题仍然存在,可能需要检查一下其他系统设置或者重新安装SDL2_image。

cat@lubancat:~/下载/SDL2_image-2.8.2$ pkg-config --cflags --libsdl2_image Unknown option --libsdl2_image

起来在你运行pkg-config --cflags --libsdl2_image时出现了错误,提示Unknown option --libsdl2_image

这个错误表明pkg-config无法识别--libsdl2_image作为选项。这很可能是因为命令中的选项格式不正确。

请尝试将命令改为:

 
 

bash

pkg-config --cflags --libs SDL2_image

注意命令中SDL2_image之前没有--前缀,因为SDL2_image是包的名称,而不是选项。执行上述命令后,应该能够正确获取SDL2_image的编译标志和链接标志。

cat@lubancat:~/下载/SDL2_image-2.8.2$ pkg-config --cflags --libs SDL2_image
-D_REENTRANT -I/usr/local/include/SDL2 -I/usr/local/include -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2_image -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2

看起来现在pkg-config成功返回了SDL2_image的编译标志和链接标志。输出中包含了编译标志(--cflags)和链接标志(--libs),它们可以用于编译和链接包含SDL2_image的程序。

编译标志包括-D_REENTRANT和一些包含SDL2_image头文件的目录路径。链接标志包括了SDL2_image库的路径-L/usr/local/lib,以及SDL2_image的链接标志-lSDL2_image和SDL2的链接标志-lSDL2

现在你可以将这些标志添加到你的编译命令中,以确保正确地编译和链接SDL2_image库。如果你有任何进一步的问题或需要进一步的帮助,请随时告诉我。

我该怎么添加到ros里的cmake文件呢

要将SDL2_image的编译和链接标志添加到ROS项目的CMake文件中,你需要编辑该项目的CMakeLists.txt文件。通常,你需要使用target_link_libraries()target_include_directories()函数来添加SDL2_image的链接和包含路径。

假设你的ROS项目名为your_ros_project,以下是一个简单的示例,演示了如何在CMakeLists.txt文件中添加SDL2_image的编译和链接标志:

 
 

cmake

cmake_minimum_required(VERSION 2.8.3)
project(your_ros_project)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  # 其他你所需的 ROS 包
)

# 查找 SDL2_image
find_package(SDL2_image REQUIRED)

# 添加包含路径
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${SDL2_IMAGE_INCLUDE_DIRS}  # 这里是 SDL2_image 的包含路径
)

catkin_package(
  # 包信息
)

# 添加可执行文件
add_executable(your_executable src/your_source_file.cpp)

# 链接 ROS 库
target_link_libraries(your_executable
  ${catkin_LIBRARIES}
  ${SDL2_IMAGE_LIBRARIES}  # 这里是 SDL2_image 的链接标志
)

在这个示例中,find_package(SDL2_image REQUIRED)用于查找SDL2_image,include_directories()用于添加SDL2_image的包含路径,target_link_libraries()用于将SDL2_image的链接标志添加到你的可执行文件中。

确保在编辑你的CMakeLists.txt文件时,将your_ros_projectyour_executable替换为你的实际项目名称和可执行文件名称。根据你的项目结构和需要,可能还需要调整路径和其他参数。

完成编辑后,保存文件并重新构建你的ROS项目,SDL2_image的功能就应该被正确地集成到你的项目中了。

${SDL2_IMAGE_INCLUDE_DIRS}这个路径是系统自动寻找马

是的,${SDL2_IMAGE_INCLUDE_DIRS}${SDL2_IMAGE_LIBRARIES}是在使用find_package(SDL2_image REQUIRED)时自动生成的变量,它们包含了SDL2_image库的包含路径和链接标志。

当你调用find_package(SDL2_image REQUIRED)时,CMake会自动查找并设置这些变量,以便你可以在你的项目中使用它们,而无需手动指定SDL2_image的路径和链接标志。

所以在使用include_directories()target_link_libraries()时,你可以直接使用${SDL2_IMAGE_INCLUDE_DIRS}${SDL2_IMAGE_LIBRARIES}这些变量,而无需手动指定SDL2_image的路径和链接标志。这样能够使你的CMakeLists.txt文件更加简洁和可移植。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

这个命令将会向你的PKG_CONFIG_PATH环境变量中添加/usr/local/lib/pkgconfig路径,这样当你使用pkg-config命令时,它就会在这个路径下查找.pc文件。

通常,当你安装了一些软件包并且它们包含了.pc文件时,你需要确保这些文件所在的目录被包含在PKG_CONFIG_PATH中,这样pkg-config命令才能正确地找到它们,并返回正确的编译和链接标志。

在这种情况下,你已经安装了SDL2_image,并且它的.pc文件位于/usr/local/lib/pkgconfig目录下,因此你需要将这个目录添加到PKG_CONFIG_PATH中,以便pkg-config命令能够找到SDL2_image的.pc文件,从而返回正确的编译和链接标志。

执行这个命令后,你就可以使用pkg-config命令来获取SDL2_image的编译和链接标志了。

/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_FreeSurface'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `IMG_Load'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_GetError'
collect2: error: ld returned 1 exit status
make[2]: *** [navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/build.make:125:/home/cat/hl/wheeltec_robot/devel/lib/map_server/map_server] 错误 1
make[1]: *** [CMakeFiles/Makefile2:922:navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j4 -l4" failed

这个错误表明编译时发生了链接错误,具体是由于在libmap_server_image_loader.so库中找不到SDL_FreeSurfaceIMG_LoadSDL_GetError函数的定义。

这通常是由于未正确链接SDL2_image库导致的。请确保你已经正确地安装了SDL2_image库,并且在CMakeLists.txt文件中添加了正确的链接标志。

请检查以下几点:

  1. 确保你已经正确地安装了SDL2_image库。可以尝试使用pkg-config命令来确认SDL2_image库的安装路径和版本信息:

     
  • pkg-config --modversion SDL2_image
    
  • 在CMakeLists.txt文件中,确保你使用了正确的链接标志来链接SDL2_image库。你可以在target_link_libraries()函数中添加${SDL2_IMAGE_LIBRARIES}变量,如下所示:

     

    cmake

  • target_link_libraries(your_executable
      ${catkin_LIBRARIES}
      ${SDL2_IMAGE_LIBRARIES}
    )
    
  • 确保你在CMakeLists.txt文件中正确地设置了SDL2_image的包含路径。你可以在include_directories()函数中添加${SDL2_IMAGE_INCLUDE_DIRS}变量,如下所示:

     

    cmake

  1. include_directories(
      ${catkin_INCLUDE_DIRS}
      ${SDL2_IMAGE_INCLUDE_DIRS}
    )
    

完成以上步骤后,重新构建你的项目,看看是否能够解决链接错误。如果问题仍然存在,请确保你的SDL2_image库完整且可用,并检查你的CMakeLists.txt文件中是否有其他可能导致链接错误的配置错误。

怎么查看链接标志

你可以使用pkg-config命令来查看SDL2_image库的链接标志。

在终端中运行以下命令:

 
 

shell

pkg-config --libs SDL2_image

这将返回SDL2_image库的链接标志,例如-lSDL2_image和其他可能需要的系统库。

另外,你还可以使用pkg-config命令来查看SDL2_image库的包含路径,运行以下命令:

 
 

shell

pkg-config --cflags SDL2_image

这将返回SDL2_image库的包含路径,例如-I/usr/include/SDL2

通过查看链接标志和包含路径,你就能够正确地配置你的CMakeLists.txt文件,以确保能够正确链接SDL2_image库。

SDL 1.2和SDL 2 可以在 Ubuntu 上共存。它们是不同的版本,可以同时安装并在同一台机器上使用。

要安装SDL 1.2,请执行以下命令:

 
 
sudo apt-get install libsdl1.2-dev

要安装SDL 2,请执行以下命令:

 
 
sudo apt-get install libsdl2-dev

这样就可以在同一台机器上同时使用SDL 1.2和SDL 2,并根据需要选择适当的版本进行开发。请注意,在编译时需要使用正确的头文件和库文件路径来链接所需的SDL版本。

以上是问gpt和自己琢磨的,不记得最后怎么处理的了,后面补充

建图的时候出错了

解决方法:

单独运行雷达命令roslaunch turn_on_wheeltec_robot wheeltec_lidar.launch 在运行rostopic echo /scan 查看一下雷达话题有没有数据输出哈

解决方法:

换个连接激光雷达的数据线

问题:rviz打不开

vnc远程吗?vnc的话运行rivz是有这个报错的,这个建议百度一下

这是在自主导航的时候出的错

解决方法:

用ssh连接试试(还没试过)

连接台式可以

问题:车自主导航时,不动

小车是要20v以上才能动

充电器

充满的话,他上面会显示多少v啊

25左右

gazebo仿真的教程视频

链接: 百度网盘 gazebo入门教程 已自带加速,直接点击下载即可

摄像头的问题

运行启动相机是报错

解决方法:

noetic版本报错提示缺少/opt/ros/noetic/share/hector_pose_estimation/hector_pose_estimation_nodelets.xml文件 解决方法参看教程:indigo系统运行出现indigo/share/hector_pose_estimation/hector_pose_estimation_nodelets.xml文件丢失_niode indigo-CSDN博客

然后第一个错误没了,还有第二个

结果是我运行错了节点

应该rgb相机通过usb节点启动

能运行了,但是没有画面

解决方法

这部分取消注释

还是出错

解决方法:

拔插对比看下dev下相机识别出来的具体是video几

拔插下相机,分别运行ll /dev看

最终测试出是video9

但没有弹窗

用linux还是windows都一样

最后解决方法(还在尝试中):看着命名不太对,用这个的看看 Mini ROS小车附送资料 2024.5.13的源码(和开头一样)链接: 百度网盘 【该链接文件可以极速下载,单次可保存5万个文件】

编译出现报错:

这两个只能留一个,因为里面的功能包名称是一样的

解决方法:删除

新问题,:

新的代码运行键盘控制节点出错


process[turtlebot_teleop_keyboard-1]: started with pid [7391]
  File "/home/cat/catkin_ws/src/wheeltec_robot_rc/scripts/turtlebot_teleop_key.py", line 77
    tty.setraw(sys.stdin.fileno())
    ^
IndentationError: unexpected indent
[turtlebot_teleop_keyboard-1] process has died [pid 7391, exit code 1, cmd /home/cat/catkin_ws/src/wheeltec_robot_rc/scripts/turtlebot_teleop_key.py turtlebot_teleop_keyboard/cmd_vel:=/cmd_vel __name:=turtlebot_teleop_keyboard __log:=/home/cat/.ros/log/b9a5add6-11f6-11ef-92d1-e0e1a99d1f54/turtlebot_teleop_keyboard-1.log].
log file: /home/cat/.ros/log/b9a5add6-11f6-11ef-92d1-e0e1a99d1f54/turtlebot_teleop_keyboard-1*.log

问题解决:

是代码出了问题,可能是windows和Ubuntu用的文件格式不一样,我在windows下解压再复制到鲁班猫里,然后代码的里有的注释和代码一起注释了。

新代码还是有问题,即使在鲁班猫上运行还是不行

方法:

可能是参数,因为多了一条警告,所以没有弹窗。

奥比中光相机标定、内外参问题 链接: 百度网盘 这里是相机的内参,放到~/.ros/camera_info 里面,再启动看看

不记得左下角可以点开

修改,读取的图像不对应。

放弃,换用官方的镜像

ROS1_Melodic_鲁班猫1S镜像_32G内存卡 链接: 百度网盘

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值