一、准备

需要在电脑上事先安装好ROS

二、创建工作区间

ROS不同于其他软件,需要在特定的工作区间下通过ros编译运行自己的程序。
假设电脑上已经安装好ROS,则

$ source /opt/ros/noetic/setup.bash
//创建和编译一个 catkin workspace
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make

在执行完上述操作后,会在~/目录下,生成catkin_ws文件夹,~/catkin_ws/src下有一个CMakeLists.txt。.catkin_workspace是个隐藏文件,在该文件下使用快捷键ctrl+h就可显示/隐藏隐藏文件

ros源码编译 docker ros编译python_xml文件

ros源码编译 docker ros编译python_bash_02


文件解说:src文件夹存放自己的源码、cmakelist等文件,devel中有.sh文件

程序编译完后,会在devel/lib/xxx中产生可执行文件,为执行可执行文件,source devel/setup.bash(只执行完代码框里的命令,并不会产生可执行文件,需要自己加入)

三、加入自己的代码

法一

适用情况:首次创建工作区间和包
在创建完工作区间后,接下来我们加入自己的代码.
1.在/home/ning/catkin_ws/src路径下打开终端

ning@ning:~/catkin_ws/src$ pwd
/home/ning/catkin_ws/src
ning@ning:~/catkin_ws/src$  catkin_create_pkg test image_transport cv_bridge  //catkin_create_pkg 是创建包的命令 test是包的名称  image_transport cv_bridge 是创建这个包所需要的库
Created file test/package.xml
Created file test/CMakeLists.txt
Successfully created files in /home/ning/catkin_ws/src/test. Please adjust the values in package.xml.

就可以看到/home/ning/catkin_ws/src下有一个新的文件夹test,里面有两个文件cmakelist.txt与package.xml

ros源码编译 docker ros编译python_ros源码编译 docker_03


ros源码编译 docker ros编译python_ros源码编译 docker_04


2.将自己的代码复制粘帖到/home/ning/catkin_ws/src/test路径下

ros源码编译 docker ros编译python_xml_05


3.修改CMakeLists.txt文件

原本的文件内容很长,删除掉注释精简下来就是

cmake_minimum_required(VERSION 3.0.2)
project(test)
find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
)
catkin_package(
)
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

我们要对他修改下,修改完之后就变成

cmake_minimum_required(VERSION 3.0.2)
project(test222)
SET(CMAKE_CXX_FLAGS "-std=c++11")
find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
)
find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport message_generation sensor_msgs) #此处为编译自己的cpp需要的库
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)
add_executable(test222 ros_publish_image.cpp) # 加入自己的程序cpp文件
add_dependencies(test222 ${catkin_EXPORTED_TARGETS} )
target_link_libraries(test222 ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

4.检查修改package.xml文件
使用gedit或者其他的编辑器打开package.xml文件(下面是把注释删掉精简过的),检查一下工程名字是否正确,链接的库是否齐全等

<?xml version="1.0"?>
<package format="2">
  <name>test</name>
  <version>0.0.0</version>
  <description>The test package</description>

  <maintainer email="ning@todo.todo">ning</maintainer>
  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_export_depend>cv_bridge</build_export_depend>
  <build_export_depend>image_transport</build_export_depend>
  <exec_depend>cv_bridge</exec_depend>
  <exec_depend>image_transport</exec_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

法二

适用情况:已有cmakelist.txt与package.xml文件

1.在/home/ning/catkin_ws/src路径下,创建一个新的文件夹test(这里面的publish也是我自己创建的)

ros源码编译 docker ros编译python_bash_06


2.打开test文件,将cmakelist.txt、package.xml、自己的代码cpp文件拷贝进来。

ros源码编译 docker ros编译python_xml_07


3.检查修改cmakelist.txt、package.xml文件。注意,工程名不能与已有的包名重复

四、编译

进入~/catkin_ws文件夹,打开终端执行命令catkin_make

ros源码编译 docker ros编译python_xml文件_08


ros源码编译 docker ros编译python_bash_09

五、运行

1.新建第一个终端

roscore//如果遇到为找到命令的错误,可以尝试运行source /opt/ros/noetic/setup.bash

2.新建第二个终端

cd ~/catkin_ws
source devel/setup.bash
rosrun 自己的程序包

其他

$rostopic list -v #查看节点

参考资料:

http://wiki.ros.org/cn/ROS/Tutorials/