侯宇轩
- 不用catkin
- 不用source /opt/ros/xxx/setup.bash
- 使用CMake
- Clion能调试
- Clion能远程/WSL调试
直接用g++编译同理 以官网教程:Writing a Simple Publisher and Subscriber (C++)为例
如果想按照ros的工作空间格式建项目,可以按照这个步骤
catkin init
mkdir src
cd src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
cd beginner_tutorials
cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
## Declare a catkin package
catkin_package()
## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
同教程一样,注意talker.cpp和listener.cpp的相对于CMakeLists.txt的路径和上面CMakeLists.txt中的一样
-
工作空间打开clion,选择src下面的CMakeLists.txt,也就是链接到ros安装目录的CMakeLists.txt
-
File -> Settings -> Build, Execution, Deployment -> Toolchains
点击Add enviroment
,选择ROS的setup.sh
所在的路径 -
File -> Settings -> Build, Execution, Deployment -> CMake
Toolchains
选择刚才设置的Linux ROS1 -
编译运行
-
工作空间打开clion,选择src下面的CMakeLists.txt,也就是链接到ros安装目录的CMakeLists.txt
-
File -> Settings -> Build, Execution, Deployment -> CMake
,添加cmake option,这里ROS neotic是python3,其他的ros可能是python2,其中CMAKE_INSTALL_PREFIX和CATKIN_DEVEL_PREFIX是相对于Build directory的
-DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
修改env.sh中ros的路径,运行env.sh,将输出添加Environment,注意是python3还是python2
ROS_VERSION=1; PKG_CONFIG_PATH=/opt/ros/noetic/lib/pkgconfig; ROS_PYTHON_VERSION=3;ROS_PACKAGE_PATH=/opt/ros/noetic/share; ROSLISP_PACKAGE_DIRECTORIES=; ROS_ETC_DIR=/opt/ros/noetic/etc/ros; CMAKE_PREFIX_PATH=/opt/ros/noetic; PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages; ROS_MASTER_URI=http://localhost:11311; LD_LIBRARY_PATH=/opt/ros/noetic/lib; PATH=/opt/ros/noetic/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; ROS_ROOT=/opt/ros/noetic/share/ros; ROS_DISTRO=noetic;
-
执行cmake,编译
-
右上角Edit Configuration,对可执行程序(listener和talker)增加env.sh的输出的环境变量,
ROS_VERSION=1; PKG_CONFIG_PATH=/opt/ros/noetic/lib/pkgconfig; ROS_PYTHON_VERSION=3;ROS_PACKAGE_PATH=/opt/ros/noetic/share; ROSLISP_PACKAGE_DIRECTORIES=; ROS_ETC_DIR=/opt/ros/noetic/etc/ros; CMAKE_PREFIX_PATH=/opt/ros/noetic; PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages; ROS_MASTER_URI=http://localhost:11311; LD_LIBRARY_PATH=/opt/ros/noetic/lib; PATH=/opt/ros/noetic/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; ROS_ROOT=/opt/ros/noetic/share/ros; ROS_DISTRO=noetic;
-
开roscore,运行
- ROS_PACKAGE_PATH
- 会影响运行时查找plugin,如果没有指定则会报pluginlib::ClassLoaderException
- CMAKE_PREFIX_PATH
- 会影响编译时查找catkin
- 会影响运行时查找plugin,如果没有指定则会报'pluginlib::LibraryLoadException'