ROS 集成开发环境
2022-10-25
2分钟阅读时长
ROS HelloWorld
Create Project
创建项目的顺序如下:
-
创建工作空间 将工作空间命名为
ROSRace
mkdir -p ROSRace/src cd ROSRace catkin_make
-
创建功能包 将功能包命名为
helloworld
,并添加所需的依赖。- roscpp 是用 C++ 实现的库;
- rospy 是用 python 实现的库;
- std_msgs 是标准消息库
cd src catkin_create_pkg helloworld roscpp rospy std_msgs
Edit Source File
-
编辑源文件(C++)
cd helloworld/src vim helloworld_c.cpp
输入以下内容:
//包含ros的头文件 #include "ros/ros.h" //编写main函数 int main(int argc,char* argv[]){ //执行ros节点初始化 ros::init(argc,argv,"hello_node"); //创建ros节点句柄,非必须 ros::NodeHandle n; //控制台输出日志 ROS_INFO("hello world!"); return 0; }
-
编辑源文件(Python)
cd helloworld mkdir scripts # python 文件必须在该文件夹下
输入以下内容:
#! /usr/bin/env python """ Python 版 HelloWorld """ import rospy if __name__ == "__main__": rospy.init_node("Hello") rospy.loginfo("Hello World!!!!")
chmod +x helloworld_py.py
-
编辑配置文件(C++) 编辑功能包下的 cmake 文件,~vim CMakeLists.txt~ ,修改以下内容:
add_executable( ${PROJECT_NAME}_node src/helloworld_c.cpp ) target_link_libraries( ${PROJECT_NAME}_node ${catkin_LIBRARIES} )
注意:
- 如
add_dependencies
未注释,则注释该项 - 需要修改源文件名与
add_executable
中的内容一致 - 如需修改生成的可执行文件名,可修改
project(helloworld)
中的内容
- 如
-
编辑配置文件(Python)
catkin_install_python(PROGRAMS scripts/helloworld_py.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
Compile and Excute
编译并执行步骤如下:
- 回到工作空间目录
- 输入
catkin_make
编译所有 C++ 内容,python 文件是即时解释执行不需要编译 -
执行下面的命令,特别地,如不执行第二行,则会报找不到
helloworld
包。roscore source ./devel/setup.bash # use zsh if you need # C++ rosrun helloworld helloworld_node # Package_name + target_name # Python rosrun helloworld helloworld_py.py
Locale
解决乱码问题,以下方法任选一种。
- 在 cpp 源文件中加入一行
setlocale(LC_ALL,"");
- 在 cpp 源文件中加入一行
setlocale(LC_ALL,"zh_CN.utf8");
Terminal Reuse
在 ROS 中,需要频繁的使用到终端,且需要同时开启多个进程,因此需要用到终端复用工具。
- terminator
- tmux
VSCode
Extensions
首先建议 VSCode 安装原版而非开源的社区驱动版本,便于下载插件。
其次建议安装下列插件:
- C/C++
- Python
- ROS
- CMake
为使界面显示正常,=Arch Linux= 建议安装 ttf-ms-font
Usage
- 创建工作空间和 HelloWorld 的步骤一样。
-
编译 ROS 可使用快捷键
Ctrl+Shift+B
调用,选择catkin_make:build
,点击右侧的齿轮,会自动生成.vscode/task.json
,点击修改注意:如修改为下列内容
"type" : "shell", "command" : "catkin_make",
则表示执行命令为
/usr/bin/zsh -c '...'
,通常该形式的命令不会从 .zshrc 中加载,因而不包含/opt/ros/noetic/bin
环境变量 - 对工作空间的 src 右键点击
create catkin packages
可以创建功能包,回答包名和依赖即可 -
修改
.vscode/c_cpp_properties.json
的内容"cStandard" : "gnu17", "cppStandard" : "c++17"
Launch
使用 launch 一次性启动多个 ros 节点
- 选择功能包,右击,添加一个 launch 文件夹
- 选定 launch 文件夹,右击,添加一个 launch 文件,如
start_turtle.launch
-
编辑 launch 文件内容
<launch> <!--添加被执行的节点--> <!--乌龟GUI--> <node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI" /> <!--乌龟键盘控制--> <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key" /> <!--HelloWorld--> <node pkg="helloworld" type="helloworld_node" name="hello" output="screen" /> </launch>
其中:
- node 是包含的某个节点
- pkg 是功能包
- type 是被运行的节点文件
- name 是为节点命名
- output 设置日志的输出目标
-
运行 launch 文件
roslaunch helloworld start_turtle.launch