一、准备
需要在电脑上事先安装好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就可显示/隐藏隐藏文件
文件解说: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
2.将自己的代码复制粘帖到/home/ning/catkin_ws/src/test路径下
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也是我自己创建的)
2.打开test文件,将cmakelist.txt、package.xml、自己的代码cpp文件拷贝进来。
3.检查修改cmakelist.txt、package.xml文件。注意,工程名不能与已有的包名重复
四、编译
进入~/catkin_ws文件夹,打开终端执行命令catkin_make
五、运行
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/