目录
一.c++实现
1.创建工作空间
3.CMakeLists.txt配置
4.catkin_make编译
5.source一下,配置环境变量
6.roscore+rosrun
二.python实现
1.创建scrips文件夹
2.创建helloworld_p.py
3.添加可执行权限
4.roscore+rosrun
学习参考:赵虚左的ROS课程
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
mkdir——创建文件夹
cd——切换工作目录
catkin_init_workspace——工作空间初始化
cd ~/catkin_ws/
catkin_make
catkin_make——编译工作空间
cd src
catkin_create_pkg helloworld roscpp rospy std_msgs
catkin_create_pkg——创建功能包
helloworld——功能包名称
roscpp——用来运行c++代码的库(依赖)
rospy——用来运行python代码的库(依赖)
std_msgs——标准消息的库,比如string字符串消息类型。(依赖)
2.通过touch命令创建helloworld_c.cpp文件
进入helloworld功能包中的src文件夹,打开终端
touch helloworld_c.cpp
用touch创建名为helloworld_c的cpp文件。
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄(非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello world!");
return 0;
}
头文件调用ros库,主函数中,创建ros节点并初始化,创建ros节点句柄,在控制台窗口输出hello world!字符串,类似于c++的cout和printf()功能。
打开功能包中CMakeLists.txt,修改(ctrl+f搜索)
(1)声明c++可执行文件
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/helloworld_node.cpp)
add_executable(suiyi src/helloworld_c.cpp)
第一个参数为期望生成(随意命名)可执行文件的名称(.exe),第二个参数为被编译的源码文件(.cpp)
(2)指定要链接库或可执行目标的库。
## Specify libraries to link a library or executable target against
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
target_link_libraries(suiyi ${catkin_LIBRARIES})
改成刚刚随意命名的suiyi节点,其中后面不改,默认链接库。
因为c++必须编译后才能运行,回到工作空间根目录,重新编译一次。
catkin_make
source ./devel/setup.bash
新开终端
roscore
在配置好环境变量的终端输入
rosrun helloworld suiyi
终端输出
[ INFO] [1664245759.288360443]: hello world!
在helloworld功能包中创建scripts(脚本)文件夹
mkdir scripts
在创建的文件夹中创建helloworld_p.py 文件。
#! /usr/bin/env python
import rospy
if __name__ == "__main__":
rospy.init_node("Hello")
rospy.loginfo("Hello World!!!!")
注意要给可执行权限。
chmod +x 自定义文件名.py
rosrun helloworld helloworld_p.py
python不用编译直接可以运行。(melodic版本,noetic需要在CMakeList.txt配置一下python)