学习记录-ROS机器人开发实践(一)


前言

系统环境:ubuntu20.04 视觉SLAM看得头好痛,中间切换出来学一下ROS毕竟我是做机器人相关研究的。这个也是必用的呀。 以下讲下ROS的安装和胡春旭大佬的代码编译。


一、ROS的安装

本来想自己写个ROS的安装过程的,但找到了一个教程把所有问题覆盖了,因此我也就不再啰嗦了,上

二、机器人开发实践代码编译

这里本来想着就直接按照书上的教程走,把胡春旭大佬的代码编译一下,没想到真的是如此麻烦。看了很多博客,也有讲20.04怎么安装的,但是感觉遇到的问题没我多,而且最后也没法解决我的问题,因此特地写下这篇博客来记录。 以下简单讲下遇到的困难和解决方法。

1.缺乏ecto

由于没有对应20.04版本的ecto,所以直接上github下载再编译就好了,github地址为:,下载后重新catkin_make就好了。

2.缺乏manipulation_msgs

直接上github下载再编译就好了,github地址为:

3.缺乏household_objects_database_msgs

直接上github下载再编译就好了,github地址为:

4.缺乏object_recognition_msgs

直接上github下载再编译就好了,github地址为:

5.缺乏moveit_msgs

直接上github下载再编译就好了,github地址为:

6.缺乏moveit_ros_perception

在github上搜了半天,都没有对应的包,找了好多博客,有个博客说是必须安装对应的planning-interface搜了一下,也安装了,一点用都没有,后来用apt search搜索出来了noetic下又对应的包,才醒悟过来,之前的可能也可以直接安装。

sudo apt install ros-noetic-moveit-ros-perception

就解决了问题。

7.缺乏household_objects_database_msgs

sudo apt install ros-noetic-move-base-msgs

8.找不到alsa/asoundlib.h:没有这个文件或目录

sudo apt install libasound2-dev

解决问题。

9.ecto的相关文件缺失

这里主要是boost1.70之后的版本问题,按照报错对应的修改即可:

1,进入到ecto的目录下使用如下命令找到这两个文件
$ grep -r tr1
./src/lib/util.cpp:#include <boost/tr1/unordered_map.hpp>
./src/lib/plasm/impl.hpp:#include <boost/tr1/unordered_map.hpp>
把tr1删除,同时把代码里的std::tr1::unordered_map字段改成boost::unordered_map即可

10.get_io_service()缺失的问题

这里主要是boost1.70之后的版本问题,按照报错对应的修改即可:

boost::asio::io_service& serv_inside_strand = thestrand->get_io_service(); //改前
 boost::asio::io_context& serv_inside_strand = thestrand->context() ;  //改后

11.找不到-lmsc

缺少对应的库,根据《ROS机器人开发实践》书中介绍(科大讯飞那一块207页),将科大讯飞库文件拷贝到系统目录下,进入SDK根目录下的libs文件夹,选择相应的架构平台x64/x86,使用命令拷贝。

sudo cp libmsc.so /usr/lib/libmsc.so

12.PyString_AsStringAndSize 没有声明

把PyString_AsStringAndSize改为PyBytes_AsStringAndSize解决问题

13.get_io_service缺失第2弹

这里我本来想照搬上面的解决方案,然而在这个类下并没有context()这个函数,因此后来我又尝试了直接替换为get_executor().context(),还是不行。搜了很多博客始终没有合适的解决方法,不得已先暂停了一天缓一缓。 直到我找到了一个博客,才彻底解决问题。至此,编译成功了,再无报错。

参考资料: 1、 2、


总结

本文介绍了如何解决《ROS机器人开发实践》1-3章中的代码和工程问题。

经验分享 程序员 微信小程序 职场和发展