准备好项目文件夹:
catkin_ws/
src/
进入到catkin_ws/src路径下,执行:
catkin_create_pkg my_package rospy roscpp std_msgs
其中,第一个参数my_package是自己创建的包名,后面的rospy roscpp std_msgs为包的依赖项。
此命令执行后,会在执行该命令的路径下生成my_package文件夹,该文件夹中有2个文件夹(include和src)、2个文件(CMakeLists.txt和package.xml)。
此时项目文件夹的内容如下:
catkin_ws/
src/
my_package/
include/
src/
CMakeLists.txt
package.xml
此时再返回到路径catkin_ws下,执行:
catkin_make
将会在catkin_ws路径下生成build和devel文件夹。
此时项目文件夹变为:
catkin_ws/
build/
devel/
setup.bash
...
src/
my_package/
include/
src/
CMakeLists.txt
package.xml
以我目前的认识来看,所有的ros包应该都会放在catkin_ws下了。
为了让我们自己创建的ros包能够随时被终端调用,我们需要在~/.bashrc中添加如下bash指令:
source /path/to/catkin_ws/devel/setup.bash
其中/path/to/catkin_ws/devel/setup.bash应替换为你的catkin_ws/devel/setup.bash所在的路径。
虽然在之前我们创建了自己的包,但是这个包是个空包,没有任何内容,现在我们要在my_package这个包中添加我们的第一个程序。
首先要在my_package/CMakeLists.txt的文件末尾添加代码:
add_executable(hello_node src/hello.cpp)
这行代码的作用是为我们的my_package包添加一个hello_node节点。
其中第一个参数hello_node是我们创建的节点名,第二个参数src/hello.cpp是节点名对应的源文件的路径。
接着再添加一行代码:
target_link_libraries(hello_node
${catkin_LIBRARIES}
)
这行代码的作用是:让编译hello_node节点源文件时,链接库文件(这里对应的就是catkin_LIBARARIES所存储的值了,这个变量是catkin定义的,我们不去管它)。
然后在my_package/src路径下新建一个源文件,起名为hello.cpp。
写入代码:
int main(int argc, char const *argv[])
{
ros::init(argc, argv, "hello_node"); // 初始化ros
std::cout << "hello,ros" << std::endl;
return 0;
}
这时候我们的hello world程序就已经准备好了,接着需要进行构建编译。
我们先进入到catkin_ws目录下,然后执行命令:
catkin_make
等待编译完成后,执行命令:
ros_run my_package hello_node
这时看到hello, ros输出则表示成功。