0.引言

  笔者研究生的课题是关于多传感器数据融合的,传感器数据获取一般是通过Arduino或者树莓派获取,Arduino主要偏硬件开发,一般数据处理能力相对树莓派较弱,笔者除了要获取数据,还需要进行大量数据同时处理。为实现多传感器数据同步建图,本文通过树莓派获取数据,硬件驱动代码是基于ROS开发的,ROS是Robot Operate System(机器人操作系统),可以驱动硬件获取数据,并能进行数据处理。本文为了实现传感器数据的获取和处理,进行ROS系统的安装和简单开发。本文介绍了ROS安装,ROS创建工作空间和功能包,ROS中执行C++文件,ROS中执行Python文件。

1.安装ROS

  (1)检查下载源;
  确认“软件和更新”对话框中“Ubuntu Software”项下,从互联网下载的前四项的复选框都勾选,并选择合适的下载源。
  


  (2)添加ros软件源和秘钥;

//添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

//添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654


  (3)检查Ubuntu系统版本确定ros版本;

sudo lsb_release -a

  
  
  本文使用Ubuntu18.04系统,安装Melodic版本ros。
  (4)安装ros和rosinstall;

//更新原有库
sudo apt update

//melodic为ubuntu18.04下的ros版本
sudo apt-get -f install ros-melodic-desktop-full

//初始化rosdep
sudo rosdep init

//更新rosdep
rosdep update

//安装rosinstall
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

//设置环境变量
echo "source /opt/ros/melodic/setup.bash">>~/.bashrc
source ~/.bashrc

  (5)检查ros是否成功安装。
  键入:roscore,若能启动,则说明ros安装成功。
  

2.ROS创建工作空间和功能包

  工作空间是一个存放工程开发相关文件的文件夹,一般包含src、build、devel、install文件夹。
  功能包是一个项目文件夹,位于工作空间的src文件夹下。
  (1)创建工作空间;

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/src

catkin_init_workspace

  (2)编译工作空间;

cd ~/catkin_ws/

catkin_make

//若想在编译空间中产生install文件夹,需再执行命令:
catkin_make install

  (3)创建功能包;

cd ~/catkin_ws/src

//创建功能包格式:catkin_create_pkg <package_name> [depend1] [depend2] [depend3] ...
catkin_create_pkg test_pkg std_msgs rospy roscpp

  


  (4)编译功能包;

cd ~/catkin_ws

catkin_make

//若编译成功,以下代码执行结果不会报错
source ~/catkin_ws/devel/setup.bash

//若以上代码报错,可以执行以下代码
catkin_make_isolated
source ~/catkin_ws/devel_isolated/setup.bash

  (5)环境变量设置与检查。

//每打开新的终端需要重新设置环境变量
source devel/setup.bash
或者
source devel_isolated/setup.bash

//检查环境变量
echo $ROS_PACKAGE_PATH

  

3.在ROS中使用C++代码

  (1)创建for.cpp文件;
  在~/catkin_ws/src/test_pkg/src下打开终端,键入:gedit for.cpp,输入以下代码,并保存。

#include <iostream>
using namespace std;
int main()
{
	int  a = 5;
	for (a; a < 10; a++)
	{
		cout << "a = " << a << endl;
	}
	return 0;
}

  得到for.cpp文件。
  


  (2)添加编译规则;
  

add_executable(for_cpp src/for.cpp)
target_link_libraries(for_cpp ${catkin_LIBRARIES})

  (3)编译并执行代码;

cd ~/catkin_ws/

catkin_make
或
catkin_make_isolated

source devel/setup.bash
或
source devel_isolated/setup.bash

//在另外一个终端输入以下代码,启动ros
roscore

//在原终端输入,执行可执行文件
rosrun test_pkg for_cpp

  

4.在ROS中使用Python代码

  (1)创建for.py文件;
在~/catkin_ws/src/test_pkg/下新建一个文件script,进入该文件,并打开终端,键入:gedit for.py,输入以下代码,并保存。

#!/usr/bin/python
for a in range(5, 10):
    if a < 10:
        print 'a = ', a
        a += 1
    else:
        break

  


  (2)设置文件可执行;
  


  (3)添加编译规则;
  


  (4)执行代码(python代码无需编译)。

cd ~/catkin_ws/

catkin_make
或
catkin_make_isolated

source devel/setup.bash
或
source devel_isolated/setup.bash

//在另外一个终端输入以下代码,启动ros
roscore

//在原终端输入,执行可执行文件
rosrun test_pkg for.py

  

参考资料:
[1] 古月居GYH. 【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程; 2019-07-16 [accessed 2023-04-09].
[2] Mr.Vco. 在ubuntu18.04下安装ros,以及一些踩坑总结; 2020-04-13 [accessed 2023-04-09].
[3] 年少策马且长歌. 安装ROS时执行到sudo rosdep init时出现sudo: rosdep:找不到命令提示; 2019-12-03 [accessed 2023-04-09].
[4] 角落de男孩. 解决Ubuntu18.04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题; 2021-05-27 [accessed 2023-04-09].
[5] 长沙有肥鱼. ROS rosdep update更新失败(简单解决); 2021-10-04 [accessed 2023-04-09].
[6] 爱折腾. ROS入门教程-安装并配置ROS环境(Kinetic 版本); [accessed 2023-04-09].
[7] 原来的1024. Ubuntu16.04下创建工作空间并添加自己的功能包(python代码); 2020-12-09 [accessed 2023-04-09].
[8] qq_42735696. source devel/setup.bash bash: devel/setup.bash: No such file or directory解决方法; 2021-01-20 [accessed 2023-04-09].
[9] 未·央. source devel/setup.bash bash: devel/setup.bash: No such file or directory解决方法; 2021-04-23 [accessed 2023-04-09].
[10] 区块链市场观察家. 问题:Ubuntu虚拟机没有IP地址; 2021-03-25 [accessed 2023-04-09].
[11] 三颗草丶. ubuntu查看系统版本; 2022-09-19 [accessed 2023-04-09].
[12] 万俟淋曦. ROS与操作系统版本对应关系; 2023-04-06 [accessed 2023-04-09].
[13] longgggggggggggggggg. linux中创建一次创建多个目录或创建多级目录; 2019-06-20 [accessed 2023-04-09].
[14] Runnnnlin. ROS catkin_make 问题; 2019-09-08 [accessed 2023-04-09].
[15] 唐僧洗头用飘柔dp. python3-rosdep2 : Depends: python3-catkin-pkg but it is not going to be installed; 2022-03-12 [accessed 2023-04-09].
[16] qq_34911636. ROS创建工作空间遇到问题解决; 2019-08-21 [accessed 2023-04-09].
[17] Believe yourself!!!. ROS使用Python编写的步骤; 2022-01-05 [accessed 2023-04-09].
[18] 托尼stark. ubuntu中查看安装的python版本; 2019-04-12 [accessed 2023-04-09].
[19] OKMOON540. linux后台执行./run.py提示python syntax error near unexpected token `('; 2018-08-22 [accessed 2023-04-09].