ubuntu 16.04 ROS kinetic 平台RK3399
创建工作空间
$ mkdir -p catkin_ws/src //创建文件夹作为工作空间
$ cd ..
$ catkin_make //编译此工作空间生成CMakeLists.txt
$ echo "source /opt/ros/kinetic/setup.bash">>~/.bashrc //把此空间的环境变量在每次打开新终端时被添加
$ source ~/.bashrc //执行系统环境变量配置文件
创建功能包
我以创建hello_ros包为例,依赖是std_msgs roscpp,目的是输出hello_ros
$ cd ~/catkin_ws/src
$ catkin_creat_pkg hello_ros std_msgs roscpp
$ cd hello_ros/src
$ touch hello_ros.cpp
$ vi hello_ros.cpp
代码如下:
#include "std_msgs/String.h" //ros定义的String数据类型
#include <ros/ros.h> // 包含ROS的头文件
int main(int argc,char **argv)
{
ros::init(argc,argv,"hello_ros_publisher"); //初始化节点
ros::NodeHandle n;
ros::Publisher hello_ros = n.advertise<std_msgs::String>("hello",1000);//发布数据的频率。1S一次
ros::Rate r(10); //10Hz的速率执行循环
std_msgs::String msg; //定义要发布的信息变量
msg.data="i am here!"; //给要发布的信息赋值
while(ros::ok())
{
ROS_INFO("%s","hello ros!"); //打印到终端上
hello_ros.publish(msg); //发布msg
r.sleep(); //相当于延时,和前面定义的Rate有关
}
return 0;
}
写完代码还需要把编译代码的命令加入到hello_ros的CMakeLists.txt,为了catkin_make能编译此文件。
$ cd ~/catkin_ws/src/hello_ros
$ vi CMakeLists.txt
把下面两句加入里面
add_executable(hello_ros_publisher src/hello_ros.cpp)
target_link_libraries(hello_ros_publisher ${catkin_LIBRARIES})
然后执行
$ catkin_make
$ cd ~/catkin_ws
$ catkin_make
然后新开终端运行根节点
$ roscore
再新开终端到catkin_ws运行刚才建立的节点
$ cd ~/catkin_ws
$ rosrun hello_ros hello_ros_publisher
所有的就结束了,可以看到hello ros! 以10hz的频率输出
同时再新开终端输入
$ rosnode list
可以看到有roscore和hello_ros_publisher两个节点在运行。