rqt_graph
可以清晰看到当前启动节点的ROS图。rostopic
检查当前系统状态。相关帮助使用$rostopic -h
进行查看rosmsg
来查看是否有已经满足你的需求的类型ROS以包括代码、数据和文档在内的包的形式进行管理。
graph BT
roscore(roscore)
node1(node1)
node2(node2)
subgraph ros system
roscore
subgraph nodes
node1
node2
end
roscore -.->node1
roscore -.->node2
end
graph TD
subgraph "3.cd到ws"
subgraph 编译包
make_file
end
subgraph 运行节点
initialisation_run
run
launch
end
end
subgraph "2.cd到ws下src"
subgraph 初始化工作区
initialisation_ws
end
subgraph 创建包
create_pkg
modify_info
end
end
subgraph "1.系统环境"
subgraph ROS环境配置
install
initialisation_ros
end
subgraph 创建工作目录
mk_ws_dir
mk_src_dir
end
end
install-->
initialisation_ros-.->
mk_ws_dir-->
mk_src_dir
initialisation_ws-..->
create_pkg-->
modify_info
make_file-..->
initialisation_run-->run
initialisation_run-->launch
系统路径/任意
$source /opt/ros/<ROS1版本名称>/setup.bash
$mkdir -p <新建工作区路径>/src
,-p
parent参数表示按路径创建,同时创建src
文件夹。
cd
到工作区下的src文件夹
$catkin_init_workspace
$catkin_create_pkg <新包名称> rospy [<其他的依赖包>]
package.xml
,添加包信息,例如版本号和包依赖等等。注意:包名称不允许修改。
cd
到工作区ws下
catkin_make
cd
到工作区$source devel/setup.bash
$rosrun <包名> <包内可执行程序/python脚本> [<其他参数>]
(默认已经启动roscore
)$roslaunch <包名> <包内.launch文件>
/
来分隔命名空间,像是我们的文件系统一样$rosrun <包名> <程序名> <消息名>:=<新消息名>
$rosrun <包名> <程序名> __ns:=<新命名空间名称>
。ns
naming space,所有消息全部转移到新的命名空间,简单来讲就是所有名称前多了新命名空间的路径$rosrun <包名> <程序名> __name:=<新节点名>
详见:【机器人】ROS程序运行指北包内有代码,部分代码作为可执行程序存在,一个包会有很多的可执行程序,在包内程序执行一系列合作任务的时候使用.launch实现自动化。
launch文件结构:树状XML结构 - launch - node - name="<节点名称>" - pkg="<包名>" - type="<软件名>" - output="screen",这是一个调试的方法,输出到终端。调试完成后可以去掉,以保证终端的干净。 - node - ···
ROS消息类型 | 序列化结果 | C++类型 | Python类型 | 注释 |
---|---|---|---|---|
bool | Unsigned 8-bit integer | uint8_t | Boolean | |
int8 | Signed 8-bit integer | int8_t | Int | |
uint8 | Unsigned 8-bit integer | uint8_t | Int | uint[]8 在python中以String表示 |
int16 | Signed 16-bit integer | int16_t | Int | |
uint16 | Unsigned 16-bit integer | uint16_t | Int | |
int32 | Signed 32-bit integer | int32_t | Int | |
uint32 | Unsigned 32-bit integer | uint32_t | Int | |
int64 | Signed 64-bit integer | int64_t | Int | |
uint64 | Unsigned 64-bit integer | uint64_t | Int | |
float32 | 32-bit IEEE float | float | Float | |
float64 | 64-bit IEEE float | double | Float | |
string | ASCII string | std::string | String | ROS不支持Unicode字符串,需要用UTF-8编码 |
time | secs/nsecs unsigned 32-bit ints | rows::Time | rospy.Time | duration |
rosmsg
来查看是否有已经满足你的需求的类型。推荐优先使用已有类型,可以更方便与已有包/软件交互。如果没有,那么可以就需要自定义。graph TD
subgraph cd到ws下的src下的包下的msg
subgraph 新建
msg_new["编辑<类名>.msg文件"] -->
catkin_make1[catkin_make]-->
build_depend[确认package.xml文件]-->
cmak[编辑CMake.txt文件]
end
subgraph 修改
msg_edit["编辑<类名>.msg文件"]-->
catkin_make2[catkin_make]-.如果存在调用关系..->
catkin_make_other
end
end
自定义消息
msg
目录中的消息定义文件说明。<类名>.msg
文件结构 <类型> <名称>
的列表catkin_make
进行编译/处理,生成一系列文件。package.xml
CMakeLists.txt
文件更改自定义类型
catkin_make
,否则python会一直使用旧版本的消息类。catkin_make
来保证校验成功。工程示例和解析,请参见博客文章:TODO已经在写了,待更新。