ros常用命令(长期修改,自己复制粘贴参阅用)

配置深度强化学习环境时常用的命令

创建完环境变量指令

 echo 'export PATH="/home/yourname/anaconda3/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

查看所有环境

conda env list

激活某环境

source activate base

推出虚拟环境

conda deactivate

删除某环境

conda remove -n your_env_name --all

创建环境

 conda create -n ros python=3.8.5

如果需要卸载anaconda的话,只需要删除anaconda目录即可

rm -rf /anaconda/anaconda3

修改环境变量

sudo gedit ~/.bashrc

创建名为your_env_name的环境,并指定py环境

conda create --name your_env_name python=3.6

获取版本号

conda --version

查看当前存在哪些虚拟环境

conda env list 

ros环境变量

安装ros 的时候要设置ros的环境变量,ROS自身工作空间的环境变量配置脚本文件setup.bash在/opt/ros/kinetic路径下,ROS版本是kinetic版本,所以此处是kinetic:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc  
source ~/.bashrc

然后是如果创建了工作空间,同样需要讲工作空间的setup.bash写入环境变量

echo "source /home/gc/catkin_ws/devel/setup.bash" >> ~/.bashrc  
source ~/.bashrc

这行命令的意思是将重新编辑的终端配置文件.bashrc保存一下

source ~/.bashrc

也可以不执行上述语句,用以下代替。把当前工作空间刷新到当前窗口的环境变量,但是换终端窗口任然需要执行,下面的命令是在工作空间下执行的,意思是把工作空间目录下,devel文件夹里的setup.bash文件挂载到ROS的文件系统里去,这样当用户执行一些文件系统的命令时,就不会提示找不到该工作空间里的包或者文件了。

cd 工作空间
source ./devel/setup.bash

我们也可以直接打开这个.bashrc文件编辑,添加ros命令

gedit ~/.bashrc

安装ros 的时候要设置ros的环境变量,ROS自身工作空间的环境变量配置脚本文件setup.bash在/opt/ros/kinetic路径下,ROS版本是kinetic版本,所以此处是kinetic:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc  
source ~/.bashrc

然后是如果创建了工作空间,同样需要讲工作空间的setup.bash写入环境变量

echo "source /home/gc/catkin_ws/devel/setup.bash" >> ~/.bashrc  
source ~/.bashrc

这行命令的意思是将重新编辑的终端配置文件.bashrc保存一下

source ~/.bashrc

也可以不执行上述语句,用以下代替。把当前工作空间刷新到当前窗口的环境变量,但是换终端窗口任然需要执行,下面的命令是在工作空间下执行的,意思是把工作空间目录下,devel文件夹里的setup.bash文件挂载到ROS的文件系统里去,这样当用户执行一些文件系统的命令时,就不会提示找不到该工作空间里的包或者文件了。

cd 工作空间

source ./devel/setup.bash

我们也可以直接打开这个.bashrc文件编辑,添加ros命令

gedit ~/.bashrc

ubuntu命令

查看ubuntu版本

lsb_release -a

.deb文件的安装

 sudo dpkg -i *.deb

ros常用命令

1.创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

编译工作空间

cd ..
catkin_make

设置环境变量

 echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
 source ~/.bashrc

查看环境变量

 echo $ROS_PACKAGE_PATH

创建功能包
格式:catkin_create_pkg package_name depend1 depend2 depend2
package_name:功能表名称
depend1、2、3:依赖项

 cd ~/catkin_ws/src/
 catkin_create_pkg pkg_name std_msgs roscpp rospy

编译功能包

 cd ~/catkin_ws
 catkin_make
 source ~/catkin_ws/devel/setup.bash

创建cpp节点

2.查看所有节点与话题的通讯关系

rqt_graph

3.复制了别人的功能包,给.py文件执行权限

chmod +x XXX.py
chmod 777 文件位置

4.创建c++程序,CMakeLists.txt文件如何编写
算法部署 | 万字长文带你从C++案例一步一步实操cmake(起飞系列)

遇到的问题

1.anaconda2安装pytorch
ros的python版本是2.7,顾配深度强化学习环境的时候安装anaconda2,pytorch要选择python2.7对应版本,否则会import失败。
nvcc -V查看cuda版本9.1,我的安装命令是:

conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=9.2

2.anaconda2安装pytorch

3.使用anaconda创建python3.6虚拟环境,安装gym一直出错,用python3.8就没问题了
4.vscode设置解释器
vscode设置解释器

#!/usr/bin/env python

4.也是设置解释器,两者的关系是什么,运行脚本时在对应的虚拟环境中,虚拟环境中的解释器又扮演什么作用?
运行py脚本的两种形式:
1)使用对应环境的Python解释器

python /home/dx/train-gym/DDPGModel.py 

2)指定解释器,如下指定解释器路径/home/dx/anaconda2/envs/gymlab/bin/python

/home/dx/anaconda2/envs/gymlab/bin/python /home/dx/train-gym/DDPGModel.py

5.ros的CMakeLists 和 package到底是在干什么?

CMakeLists .txt用于调用.h头文件和.so \.a库文件,将.cpp\.c\.cc文件编译成可执行文件或者新的文件库例.so 。ros 主要是利用 catkin 命令,调用 CMakeLists.txt 把 c++ 文件转换成可执行文件。

1)整体结构和顺序

  1. CMake版本 (cmake_minimum_required())
  2. 功能包名称 (project())
  3. 发现编译需要的 CMake/Catkin包 (find_package())
  4. Python模块支持 (catkin_python_setup())
  5. 添加 Message/Service/Action (add_message_files(), add_service_files(), add_action_files())
  6. 生成 Message/Service/Action (generate_messages())
  7. 功能包编译信息导出 (catkin_package())
  8. 库/可执行文件 (add_library() / add_executable() / target_link_libraries())
  9. 测试 (catkin_add_gtest())
  10. 安装 (install())

说明
1.catkin 版本
catkin需要2.8.3+

cmake_minimum_required(VERSION 2.8.3)

2. 功能包名称

project(package_name)

CMakeLists.txt里,可以通过${PROJECT_NAME}引用这个package_name,取什么名字都行吧

3. 发现CMake Packages

使用find_package函数,发现编译该项目所依赖的CMake packages。至少有一个catkin依赖,例

find_package(catkin)

当用find_package找到了一个package,会生成一些反映package信息的CMake环境变量,这些环境变量会在之后用到。这些环境变量描述了这些package的头文件、源文件位置,依赖库及其路径等。
对于cmake的查找路径,不得不提到find_package的两种模式(MODULE模式和CONFIG模式),其中MODULE模式是基本用法,CONFIG模式是高级用法。除非用户显式设置,否则cmake会首先在MODULE模式下查找,在查找失败时会进入CONFIG模式继续查找。

  • Module模式
    find_package命令基础工作模式(Basic Signature),也是默认工作模式。
  • Config模式
    find_package命令高级工作模式(Full Signature)。 只有在find_package()中指定CONFIG、NO_MODULE等关键字,或者Module模式查找失败后才会进入到Config模式。

用法

find_package(<package> [version] [EXACT] [QUIET] [MODULE]
             [REQUIRED] [[COMPONENTS] [components...]]
             [OPTIONAL_COMPONENTS components...]
             [NO_POLICY_SCOPE])

参数解释:
package:必填参数。需要查找的包名,注意大小写。

version和EXACT:可选参数,version指定的是版本,如果指定就必须检查找到的包的版本是否和version兼容。如果指定EXACT则表示必须完全匹配的版本而不是兼容版本就可以。

QUIET:可选参数,表示如果查找失败,不会在屏幕进行输出(但是如果指定了REQUIRED字段,则QUIET无效,仍然会输出查找失败提示语)。

MODULE:可选字段。前面提到说“如果Module模式查找失败则回退到Config模式进行查找”,但是假如加入了MODULE选项,那么就只在Module模式查找,如果Module模式下查找失败并不切换到Config模式查找。

REQUIRED:可选字段。表示一定要找到包,找不到的话就立即停掉整个CMake。而如果不指定REQUIRED则CMake会继续执行。

COMPONENTS:可选字段,表示查找的包中必须要找到的组件(components),如果有任何一个找不到就算失败,类似于REQUIRED,导致CMake停止执行。

上面的例子一般写为:

find_package(catkin REQUIRED)

4. catkin_package()
catkin_package是catkin提供的CMake macro,用来向编译系统指定catkin-specific的信息,编译系统会生成pkg-config和CMake文件。catkin_package需要在add_executable和add_library之前。该函数有五个optional arguments:

  • INCLUDE_DIRS : the exported include paths (i.e. cflags) for the package
  • LIBRARIES : The exported libraries from the project
  • CATKIN_DEPENDS : Other catkin projects that this project depends on
  • DEPENDS : Non-catkin CMake projects that this project depends on
  • CFG_EXTRAS : Additional configuration options
    An example:
catkin_package(
	INCLUDE_DIRS include
	LIBRARIES ${PROJECT_NAME}
	CATKIN_DEPENDS roscpp nodelet
	DEPENDS eigen opencv
)

5. 设置编译类型
写挺好的:CMake——CMakeLists.txt 的详解
add_library() / add_executable() / target_link_libraries()

  • target_link_libraries()

find_library(VAR name path)查找到指定的预编译库,并将它的路径存储在变量中,功能与find_package类似。

find_library( # Sets the name of the path variable.
              log-lib
 
              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )
target_link_libraries( # 目标库
                       demo

                       # 目标库需要链接的库
                       # log-lib 是上面 find_library 指定的变量名
                       ${log-lib} )

add_executable(demo demo.cpp) # 生成可执行文件
add_library(common STATIC util.cpp util.h) # 生成静态库
add_library(common SHARED util.cpp util.h) # 生成动态库或共享库
target_link_libraries(demo common) # 链接libface.a/libface.so

在代码中就是 demo.cpp 里 include<util.h>

target_link_libraries 里总是包含 ${catkin_LIBRARIES}, catkin_make 是 cmake 的更高级的封装,所以我们使用 catkin 的时候也依赖一些 LIBRARIES 即 ${catkin_LIBRARIES},所以用ros编译时,加上就完事了。

所以逻辑是

project(hello_jelly)
set(LIB_SRC hello.c)
set(APP_SRC main.c)
add_library(hello ${LIB_SRC})
add_executable(${PROJECT_NAME} ${APP_SRC})
target_link_libraries(${PROJECT_NAME} hello)
#print message
message(${PROJECT_NAME})

add_library ()、add_executable () 和 target_link_libraries ()
include_directories () 和 find_package ()
Cmake之深入理解find_package()的用法
find_package(<NAME>)命令会在模块路径中寻找 find(<name>.cmake) ,我们可以定义查找模式,当找到 * .cmake* .cmake里会定义这些变量,我们就相当于找到了这些变量

include_directories和find_package

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值