配置franka
0. 创建catkin工作空间
创建一个新的catkin工作空间:
1
mkdir -p ~/catkin_franka_ws/src
1
cd ~/catkin_franka_ws/src
1
catkin_init_workspace
1
2cd ~/catkin_franka_ws
catkin_make -j$(nproc)
1. 安装libfranka和franka_ros
根据官方文档安装libfranka和franka_ros即可。
注意选择对应的版本。
实测在Ubuntu 18.04下,可直接使用apt安装ros-melodic-libfranka和ros-melodic-franka-ros。
2. 创建新项目并配置
0. 创建软件包
在工作空间的src目录下创建一个新的软件包:
1
2cd ~/catkin_franka_ws/src
catkin_create_pkg symc_test
1. 添加依赖
在package.xml中添加依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46<?xml version="1.0"?>
<package format="2">
<name>symc_test</name>
<version>0.0.1</version>
<description>The symc_test package</description>
<maintainer email="gsymcreg@gmail.com">symc</maintainer>
<license>Apache 2.0</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>message_generation</build_depend>
<build_depend>eigen</build_depend>
<build_export_depend>message_runtime</build_export_depend>
<depend>controller_interface</depend>
<depend>dynamic_reconfigure</depend>
<depend>eigen_conversions</depend>
<depend>franka_hw</depend>
<depend>franka_gripper</depend>
<depend>geometry_msgs</depend>
<depend>hardware_interface</depend>
<depend>joint_limits_interface</depend>
<depend>tf</depend>
<depend>tf_conversions</depend>
<depend>libfranka</depend>
<depend>pluginlib</depend>
<depend>realtime_tools</depend>
<depend>roscpp</depend>
<depend>urdf</depend>
<depend>visualization_msgs</depend>
<exec_depend>franka_control</exec_depend>
<exec_depend>franka_description</exec_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>rospy</exec_depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>
这里build和exec的配置是从franka_ros的package.xml中抄过来的。
2. 编写CMakeLists.txt
首先在src目录下创建一个symc_test_node.cpp文件。 1
2cd ~/catkin_franka_ws/src/symc_test/src
touch symc_test_node.cpp1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77cmake_minimum_required(VERSION 3.0.2)
project(symc_test)
find_package(catkin REQUIRED COMPONENTS
controller_interface
dynamic_reconfigure
eigen_conversions
franka_hw
franka_gripper
geometry_msgs
hardware_interface
joint_limits_interface
tf
tf_conversions
message_generation
pluginlib
realtime_tools
urdf
visualization_msgs
roscpp
rospy
std_msgs
)
find_package(Eigen3 REQUIRED)
find_package(OsqpEigen REQUIRED)
find_package(Franka 0.9.0 QUIET)
if(NOT Franka_FOUND)
find_package(Franka 0.8.0 REQUIRED)
endif()
list_insert_in_workspace_order(catkin_INCLUDE_DIRS ${Franka_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
###################################
## catkin specific configuration ##
###################################
catkin_package(
INCLUDE_DIRS include
LIBRARIES symc_test
CATKIN_DEPENDS
controller_interface
dynamic_reconfigure
eigen_conversions
franka_hw
franka_gripper
geometry_msgs
hardware_interface
joint_limits_interface
tf
tf_conversions
message_runtime
pluginlib
realtime_tools
roscpp
urdf
visualization_msgs
DEPENDS Franka
)
###########
## Build ##
###########
add_executable(${PROJECT_NAME}_node src/symc_test_node.cpp)
target_include_directories(${PROJECT_NAME}_node PUBLIC
${catkin_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${Franka_LIBRARIES}
OsqpEigen::OsqpEigen
)
要根据实际情况修改CMakeLists.txt中的内容,你也可以根据自己的需求添加其他的依赖。
这里的OsqpEigen库是用于求解QP问题的库,可以在这里找到。
3.测试
0. 编辑symc_test/src/symc_test_node.cpp文件:
1 |
|
这里的robot_ip是franka机器人控制柜的IP地址,官方文档给的示例是172.16.0.2,我们这里只是为了测试环境配置,所以随便写一个IP地址即可。
1. 编译
1 |
|
2. 运行
打开一个终端,运行roscore:
1
roscore
1
2source ~/catkin_franka_ws/devel/setup.bash
rosrun symc_test symc_test_node
symc_test是软件包名,symc_test_node是节点名。
为了方便,可以将source
/catkin_franka_ws/devel/setup.bash添加到/.bashrc文件中,这样每次打开终端都会自动加载环境变量。
1
echo "source ~/catkin_franka_ws/devel/setup.bash" >> ~/.bashrc
上述代码运行时会报错,因为我们没有配置机器人的IP地址,这里只是为了测试环境配置是否成功,只要编译通过就可以了。
将franka::Robot
robot("robot_ip");注释掉或者修改为真实franka控制柜的IP地址即可正常运行输出Hello
World!。
- Optional
如果要用vscode进行开发,可以安装vscode的ros插件,这样可以方便的进行代码补全和调试。
另外如果不对vscode进行配置代码可能会报错无法找到头文件,也无法补全,我们需要手动配置:
在.vscode/c_cpp_properties.json中添加所需的头文件路径。
这里给出我的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/home/symc/catkin_ws/devel/include/**",
"/opt/ros/melodic/include/**",
"/usr/include/**",
"/usr/local/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}
通过apt安装的libfranka和franka_ros的头文件被安装在了/opt/ros/melodic/include/目录下,如果是源代码安装的则可能在其他目录下。