**
目标:通过ros建立工作区打印helloworld,通过c++与python两种方式
**
视频参考大佬的b站连接
本文建立的工作区的压缩文件
首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。
mkdir -p demo1_ws/src
cd demo1_ws/
catkin_make
会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。
cd src
catkin_create_pkg helloword roscpp rospy std_msgs
cd src
gedit cs.cpp
添加的c++文件如下
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄(非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("c++ hello world!");
return 0;
}
cd ..
gedit CMakeLists.txt
修改格式如下
add_executable(节点名称(随便取)
src/cs.cpp
)
target_link_libraries(节点名称(随便取)
${catkin_LIBRARIES}
)
c++文件需要编译生成可执行文件才能用,而python是脚本文件就不需要了,人生苦短,快用python,这里只是记录下c++文件的使用,建议小伙伴能用python就用python吧。
cd 自定义空间名称
catkin_make
如下可看到生成的编译后的可运行文件(test_node的名字来自之前在CMaKeLists.txt 文件的设定)
1.启动ros核心。另外开一个窗口,路径无所谓,保持ros核心一直运行
roscore
2.再另开一个窗口,进入对应工作空间
cd 工作空间
3.修改环境变量命令
source ./devel/setup.bash
4.执行之前生成的原文件
helloword :最开始的包名
test_node :编译生成的节点可执行文件名
rosrun helloword test_node
cd helloworld
mkdir scripts
cd scripts
gedit cs.py
文件内部粘贴如下注意 由于是python2 所有 第一行的 #! /usr/bin/env python 记得加:
#! /usr/bin/env python
"""
Python 版 HelloWorld
"""
import rospy
if __name__ == "__main__":
# 初始化一个叫 Hello 的ros节点
rospy.init_node("Hello")
# 通过ros的日志输入打印信息
rospy.loginfo("python Hello World!!!!")
chmod +x就是说给文件可执行的权限
chmod +x cs.py
为了给python选择合适的解释器
cd ..
gedit CMakeLists.txt
修改的部分如下
install(PROGRAMS
scripts/cs.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
注意如果同时有c++版本的CMaKeLists.txt中配置与python的,则catkin_make优先执行c++的
cd 自定义空间名称
catkin_make
1.启动ros核心。另外开一个窗口,路径无所谓,保持ros核心一直运行
roscore
2.再另开一个窗口,进入对应工作空间
cd 工作空间
3.修改环境变量命令
source ./devel/setup.bash
4.执行之前生成的原文件
helloword :最开始的包名
cs.py :编译生成的节点可执行文件名
rosrun helloword cs.py
添加环境变量保存至 .bashrc文件中可使得在任意窗口调用
echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc
或Ctrl + H 可以调出隐藏文件,直接找到 .bashrc文件,在末尾添加
source ~/demo1_ws/devel/setup.bash