catkin单独编译一个包
1. 怎么把网上的源码导入进ros
摘要 1、首先创建1个ros程序包,这个程序包相当于普通的c++工程的工程名:
2. 怎么安装catkin
1 先建立工作空间~/catkin_ws
参阅 下的创建工作空间
catkin_create_pkg basic std_msgs rospy
2 在工作空间~/catkin_ws下创建包pkg目录basic
好处是通过创建包自动生成package.xml和CMakeLists.txt
可参阅
3 在工程目录下建一个src子目录和.py文件
源代码文件:topic_publisher.py
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from std_msgs.msg import Int32
rospy.init_node('topic_publisher')
pub = rospy.Publisher('counter', Int32)
rate = rospy.Rate(2)
count = 0
while not rospy.is_shutdown():
pub.publish(count)
count += 1
rate.sleep()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
操作步骤如下
liao@liao-eagle:~/catkin_ws$ ls
build devel install src
liao@liao-eagle:~/catkin_ws$ cd src
liao@liao-eagle:~/catkin_ws/src$ ls
basic beginner_tutorials CMakeLists.txt first second
liao@liao-eagle:~/catkin_ws/src$ cd basic/
liao@liao-eagle:~/catkin_ws/src/basic$ ls
CMakeLists.txt package.xml src
liao@liao-eagle:~/catkin_ws/src/basic$ cd src
liao@liao-eagle:~/catkin_ws/src/basic/src$ vi topic_publisher.py
liao@liao-eagle:~/catkin_ws/src/basic/src$ chmod +x topic_publisher.py
4 回到~/catkin_ws目录下,编译程序
$ cd ~/catkin_ws
liao@liao-eagle:~/catkin_ws$ catkin_make
5 将当前工程加入到shell环境里去
liao@liao-eagle:~/catkin_ws$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
liao@liao-eagle:~/catkin_ws$ source ~/.bashrc
6 运行程序(需开两个终端)
liao@liao-eagle:~/catkin_ws$ roscore
liao@liao-eagle:~/catkin_ws$ rosrun basic topic_publisher.py
7 通过rostopic查看相关信息
liao@liao-eagle:~/catkin_ws$ rostopic list
/counter
/rosout
/rosout_agg
3. 如何使用Google 的Cartographer SLAM算法包
0.安装所依赖项
sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler Python-sphinx ros-indigo-tf2-eigen libatlas-base-dev libsuitesparse-dev liblapack-dev
1.首先安装ceres solver选择版本1.11,路径随意
Git clone
cd ceres-solver-1.11.0/build
cmake ..
make –j
sudo make install
2.安装 cartographer,路径随意
git clone
cd cartographer/build
cmake .. -G Ninja
ninja
ninja test
sudo ninja install
3.安装cartographer_ros
谷歌官提供安装比较繁琐我原文件进行少许修改核代码变修改编译文件
载catkin_ws面src文件夹面
git clone
catkin_ws面运行catkin_make即
4.数据载测试
2d数据概500M用迅雷载
3d数据8G左右同用迅雷载
运行launch文件即
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/cartographer_3d_deutsches_museum.bag
图左侧2d,右侧3d
4. catkin工作空间编译完需要删除build文件夹吗
C++貌似没有提供删除名称空间的,但是可以缩短名称空间的 比如 namespace m=shor::A::WE; 或者用using声明和编译来导入名称空间 假如你真的要删除。那么可以打开C++源代码,把创建的名称空间都去掉,这很简单
5. 为什么.bashrc中export ros
[html] view plain
source /opt/ros/indigo/setup.bash
###### kobuki_slam
source /opt/ros/indigo/setup.bash
source /home/yhzhao/catkin_ws/devel/setup.bash
source /home/yhzhao/hl_ws/devel/setup.bash
#export ROS_PACKAGE_PATH=~/catkin_ws/src:$ROS_PACKAGE_PATH
export ROS_PACKAGE_PATH=~/catkin_ws/src:~/hl_ws/src:$ROS_PACKAGE_PATH
export ROS_WORKSPACE=~/hl_ws/src
alias sbpi='ssh [email protected]'
alias bpi_ros='export ROS_MASTER_URI=http://192.168.1.102:11311 && export ROS_HOSTNAME=192.168.1.123'
alias cdros='cd ~/catkin_ws/src'
declare -x TURTLEBOT_GAZEBO_MAP_FILE="/opt/ros/indigo/share/turtlebot_gazebo/maps/corridor.yaml"
declare -x TURTLEBOT_GAZEBO_WORLD_FILE="/opt/ros/indigo/share/turtlebot_gazebo/worlds/corridor.world"
export TURTLEBOT_BASE=kobuki
export TURTLEBOT_STACKS=nostack
export TURTLEBOT_3D_SENSOR=rplidar
###### slam_ws
source /opt/ros/indigo/setup.bash
source /home/yhzhao/slam_ws/devel/setup.bash
export ROS_PACKAGE_PATH=~/slam_ws/src:$ROS_PACKAGE_PATH
export ROS_WORKSPACE=~/slam_ws/src
#export ROS_HOSTNAME=192.168.1.111
#export ROS_IP=192.168.1.111
###### rgbd_slam
#source /opt/ros/indigo/setup.bash
#source /home/yhzhao/rgbdslam_ws/devel/setup.bash
#source /home/yhzhao/rgbdslam_ws/devel/setup.bash
#export ROS_PACKAGE_PATH=~/rgbdslam_ws/src:$ROS_PA#CKAGE_PATH
#export ROS_WORKSPACE=~/rgbdslam_ws/src
###### rtab_ws
#source /opt/ros/indigo/setup.bash
#source /home/yhzhao/slam_open_sources/ros_ws/devel/setup.bash
#export ROS_PACKAGE_PATH=/home/yhzhao/slam_open_sources/ros_ws/src:$ROS_PACKAGE_PATH
#export ROS_WORKSPACE=/home/yhzhao/slam_open_sources/ros_ws/src
#source ~/rosbuild_ws/setup.bash
在bashrc中进行上面设置的原因,主要是在每次启动终端时,加载ros的配置变量,不然基本的ros指令就无法识别,也找不到对应包..
source 可以认为它是读取每一个环境变量设置. 支持覆盖重载..
ros一般在apt-get 安装下是装在/opt/ros/indigo/ 下面的, 可以认为它只安装了头文件和基本库的 release版本, 如果我们需要下载对应的源码, 最好在home文件夹下,创建
自己的工作空间, 再编译. 按照source 的次序支持包覆盖.
ROS_PACKAGE_PATH ros包查找的路径.
ROS_WORKSPACE 工作路径 . roscd 对应的位置.
6. ros 怎么单独编译一个指定的包
切换到自己的ROS工作空间: $ cd ~/catkin_ws
如果你想编译整个工作空间里面的包:$ catkin_make
如果你只想编译工作空间某一个包:$ catkin_make -DCATKIN_WHITELIST_PACKAGES= "包名"
例如:
7. ros中的节点用c++编写的时候直接调用就可以了吗
一、首先建一个包
我的工作空间catkin_ws事先建好了,路径是/home/siat/catkin_ws
然后运行以下命令在src文件夹下建立test包
$ cd ~/catkin_ws/src
$ catkin_create_pkg test roscpp1212
注意在包的名字后加上一些基本的依赖,比如roscpp和rospy这样就可以直接调用C++和Python节点了,这将会在CMakeLists.txt中出现
find_package(catkin REQUIRED COMPONENTS roscpp)11
注意如果没有加依赖,而是直接运行
$ catkin_create_pkg test11
来创建包的,在CMakeLists.txt中是这样的
find_package(catkin REQUIRED)11
在后面编译C++节点的时候将会提示“对各种ros类下的函数未定义的引用”
二、编写节点文件
8. solidwors生成urdf文件后,怎样在ros中仿真
使用ros_qtc_plugin插件新建项目
使用插件新建项目Import ROS
Workspace选项仅新建工作空间导入现工作空间新建文件ROS面Package、Basic
Node等选项创建package节点、launch文件、urdf文件等
现我创建新catkin工作空间,并且面创建package
1、新建项目
文件——新建文件或项目选择Import ROS Workspace——choose图
填写catkin工作空间名字位置图
我Namecatkin工作空间文件夹名字相同(同)名catkin_new选择浏览——创建文件夹创建名catkin_new文件夹图按车再选择打
现框询问新建工作空间未初始化否执行初始化我选择yes
相于执行catkin_init_workspace命令使工作空间初始化
点击Generate Project File再点击步
项目管理步骤配置版本控制系统我选择完图
建工作空间catkin_new空图
2、创建package
接我工作空间创建新package
catkin_new面src右键单击选择添加新文件图
选择ROS——package——choose
填写package名字test1
填写作者(Authors)维护者(Maintainers)Qt环境部没配置文支持请要用文否则新建package或者新建package面package.xml空文件
DependenciesCatkin栏填写依赖通用C++写节点需要添加roscpp依赖
图
点击完
3、添加新节点
目前package空没任何节点
我test1src文件夹右键单击选择添加新文件
选择ROS——Basic Node——choose创建节点新建.cpp文件
节点名称写node1则名node1.cpp源文件
用ROS模板新建node1.cpp源文件图自Hello World程序
4、编译节点
让编译执行文件我需要编辑test1makefile图
test1CMakeLists.txt加面几行意思node1.cpp编译名node1节点
add_executable(node1 src/node1.cpp)
target_link_libraries(node1
${catkin_LIBRARIES}
)
,