论文复现【Switching Sampling Space of Model Predictive Path-Integral Controller to Balance Efficiency and Safety in 4WIDS Vehicle Navigation】


部署环境
- Ubuntu 20.04
- ROS Noetic
- numpy 1.20.3
第一步:安装 osqp,osqp-eigen

安装 osqp
git clone https://gitee.com/juanmv/osqp.git
cd osqp
mkdir build
cd build
cmake ..
sudo make install
安装 osqp-eigen
git clone https://gitee.com/juanmv/osqp-eigen.git
cd osqp-eigen
mkdir build
cd build
cmake ..
sudo make install
测试代码
git clone https://gitee.com/juanmv/osqp_test.git
cd osqp_test
mkdir build
cd build
cmake ..
make
./osqp_test
第二步:下载项目源码
git clone https://github.com/MizuhoAOKI/nullspace_mpc
第三步:自动下载依赖项
cd nullspace_mpc
sudo make install_deps
第四步:初始化并更新 rosdep,下载 ROS 依赖项

cd nullspace_mpc
sudo rosdep init # 如果已经显示初始化,则跳过这条指令,直接执行下一条
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro noetic
第五步:Python 安装 jsk_data ROS 包
sudo apt-get update
sudo apt-get install ros-noetic-jsk-data

第六步:几个主要文件的修改
/home/yehuo/nullspace_mpc_ws/Makefile
注意 C++ 编译器的版本是否和自己电脑的一致

# Usage: make [command]
# --- Variables ---
SHELL:=/bin/bash
PROJ_NAME=nullspace_mpc
VERSION=0.1.1
USER_NAME=noetic
# Docker image and container naming
DOCKER_IMAGE_BASE = $(PROJ_NAME):$(VERSION)
CONTAINER_NAME_BASE = $(PROJ_NAME)-container
# Workspace and X11 forwarding settings
WORKSPACE = $(shell pwd)
XSOCK = /tmp/.X11-unix
XAUTH = /tmp/.docker.xauth
# Phony targets to prevent conflicts with file names
.PHONY: build
# Build CPU image
setup_docker_cpu:
docker build \
--build-arg BASE_IMAGE=ubuntu:20.04 \
--build-arg ROS_PACKAGE=ros-noetic-desktop \
-t $(DOCKER_IMAGE_BASE)-cpu \
-f docker/Dockerfile_cpu .
# Build GPU image
setup_docker_gpu:
docker build \
-t $(DOCKER_IMAGE_BASE)-gpu \
-f docker/Dockerfile_gpu .
# Launch or attach to the CPU container
run_docker_cpu:
@CONTAINER="$(CONTAINER_NAME_BASE)-cpu"; \
if [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "running" ]; then \
echo "Attaching to running container: $$CONTAINER"; \
$(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "exited" ]; then \
echo "Restarting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "created" ]; then \
echo "Starting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "paused" ]; then \
echo "Unpausing and attaching to container: $$CONTAINER"; \
docker unpause $$CONTAINER && $(MAKE) exec_docker_cpu; \
else \
echo "Creating and running new container: $$CONTAINER"; \
docker run -it --name $$CONTAINER \
--network host \
--privileged \
--ipc host \
--volume=$(WORKSPACE):/home/$(USER_NAME)/$(PROJ_NAME):rw \
--volume=$(XSOCK):$(XSOCK):rw \
--env="DISPLAY=$(DISPLAY)" \
--env="QT_X11_NO_MITSHM=1" \
$(DOCKER_IMAGE_BASE)-cpu \
bash; \
fi
# Launch or attach to the GPU container
run_docker_gpu:
@CONTAINER="$(CONTAINER_NAME_BASE)-gpu"; \
if [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "running" ]; then \
echo "Attaching to running container: $$CONTAINER"; \
$(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "exited" ]; then \
echo "Restarting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "created" ]; then \
echo "Starting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "paused" ]; then \
echo "Unpausing and attaching to container: $$CONTAINER"; \
docker unpause $$CONTAINER && $(MAKE) exec_docker_gpu; \
else \
echo "Creating and running new container: $$CONTAINER"; \
[ -e "$(XAUTH)" ] || install -m 600 /dev/null "$(XAUTH)"; \
chmod 644 "$(XAUTH)" || true; \
xauth nlist "$(DISPLAY)" | sed -e 's/^..../ffff/' | xauth -f "$(XAUTH)" nmerge - || true; \
sudo chmod 777 $(XAUTH) && \
docker run -it --name $$CONTAINER \
--cap-add=SYS_NICE \
--gpus all \
--network host \
--privileged \
--ipc host \
--shm-size=1gb \
--volume=$(WORKSPACE):/home/$(USER_NAME)/$(PROJ_NAME):rw \
--volume=$(XSOCK):$(XSOCK):rw \
--volume=$(XAUTH):$(XAUTH):rw \
--env=TERM=xterm-256color \
--env="DISPLAY=$(DISPLAY)" \
--env="XAUTHORITY=$(XAUTH)" \
--env="QT_X11_NO_MITSHM=1" \
--env="NVIDIA_VISIBLE_DEVICES=all" \
--env="NVIDIA_DRIVER_CAPABILITIES=all" \
--env="MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA" \
$(DOCKER_IMAGE_BASE)-gpu \
bash; \
fi
# Attach to the running CPU container
exec_docker_cpu:
docker exec -it $(CONTAINER_NAME_BASE)-cpu bash
# Attach to the running GPU container
exec_docker_gpu:
docker exec -it $(CONTAINER_NAME_BASE)-gpu bash
# build ros packages
build:
@set -e; \
source /opt/ros/noetic/setup.bash; \
export CC=gcc-11 CXX=g++-11; \
ARCH=$$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || echo x86_64-linux-gnu); \
catkin build --cmake-args \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_SYSTEM_LIBRARY_PATH="/usr/lib/$$ARCH;/lib/$$ARCH;/usr/lib;/lib" \
-DCMAKE_CXX_FLAGS="-O2" \
-DENABLE_OSQP=ON
# clean build caches
clean:
rm -r build devel logs .catkin_tools
# install packages which are not supported by rosdep
install_deps:
sudo apt-get update && apt-get install -y \
git \
cmake \
build-essential \
pkg-config \
psmisc \
gcc-11
bash shell/ensure_cmake.sh 3.18.0
bash shell/install_osqp.sh
bash shell/install_osqp_eigen.sh
killall:
./shell/killall.sh
# record rosbag (all topics)
record:
cd ${WORKSPACE}/rosbag; rosbag record -a
# play and check rosbag
## [shell 1] make view_rosbag
## [shell 2] rosbag play rosbag/xxx.bag
view_rosbag:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/rosbag_play.launch workspace:=${WORKSPACE}
# gazebo_world.launch
gazebo_world:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/gazebo_world.launch
# gmapping.launch
gmapping:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/gmapping.launch workspace:=${WORKSPACE}
# navigation.launch
navigation:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE}
# navigation with nullspace_mpc
navigation_nullspace_mpc:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} local_planner:=nullspace_mpc
# navigation with nullspace_mpc (lite)
navigation_nullspace_mpc_lite:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
export OMT_WAIT_POLICY=PASSIVE &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} controller_mode:=lite show_gazebo_gui:=false gazebo_headless:=true
# navigation with mppi
navigation_mppi:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} local_planner:=mppi_h
# evaluation demo with nullspace_mpc
eval_demo_nullspace_mpc:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
--controller nullspace_mpc
# evaluation demo with mppi
eval_demo_mppi:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
--controller mppi_h
# eval_demo_mppi_3d_a:
# source $(WORKSPACE)/devel/setup.bash &&\
# mkdir -p result &&\
# python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
# --agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
# --controller mppi_3d_a
# eval_demo_mppi_3d_b:
# source $(WORKSPACE)/devel/setup.bash &&\
# mkdir -p result &&\
# python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
# --agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
# --controller mppi_3d_b
eval_ten_small:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_ten/small/agenda_small.yaml \
eval_ten_large:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_ten/large/agenda_large.yaml \
/home/yehuo/nullspace_mpc_ws/src/control/nullspace_mpc/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(nullspace_mpc)
# parameters
option(USE_OPENMP "USE_OPENMP" ON) # ON / OFF
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
visualization_msgs
jsk_rviz_plugins
nav_msgs
roscpp
tf2
tf2_geometry_msgs
tf2_ros
grid_map_core
grid_map_ros
grid_map_filters
grid_map_loader
grid_map_msgs
grid_map_rviz_plugin
grid_map_visualization
qp_solver_collection
mpc_eval_msgs
)
# use eigen3 (matrix computation library)
find_package(Eigen3 REQUIRED)
# load openmp
if(USE_OPENMP)
find_package(OpenMP REQUIRED)
if(OpenMP_FOUND)
message(WARNING "OpenMP found. Activate CPU acceleration.")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
if(NOT OPENMP_FOUND)
message(FATAL ERROR "Unable to find OpenMP library.")
endif()
endif()
catkin_package(
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
include
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
# ${OPENMP_INCLUDE_DIR}
/usr/local/include
)
## Declare a C++ library
add_library(nullspace_mpc_core SHARED src/nullspace_mpc_core.cpp)
add_library(hqp SHARED src/hqp.cpp /home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src/QpSolverCollection.cpp /home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src/QpSolverOsqp.cpp)
# hqp include directories
target_include_directories(hqp PUBLIC
/usr/local/include/osqp # OSQP include
/usr/local/include
/usr/local/share
/home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src
)
## link openmp
if(USE_OPENMP)
if (OPENMP_FOUND)
if (TARGET OpenMP::OpenMP_CXX)
target_link_libraries(nullspace_mpc_core OpenMP::OpenMP_CXX)
endif()
endif()
endif()
# Link OSQP to hqp
target_link_libraries(hqp
/usr/local/lib/libosqp.so
/usr/local/lib/libOsqpEigen.so
)
find_library(OSQP_LIB osqp HINTS /usr/local/lib)
find_library(OSQPEIGEN_LIB OsqpEigen HINTS /usr/local/lib)
target_link_libraries(hqp
${OSQP_LIB}
${OSQPEIGEN_LIB}
)
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node src/nullspace_mpc_node.cpp src/nullspace_mpc.cpp)
## Add cmake target dependencies of the executable
## same as for the library above
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
nullspace_mpc_core
hqp
)
#############
## Install ##
#############
## Mark other files for installation (e.g. launch and bag files, etc.)
install(
DIRECTORY
launch
config
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
“throw”报错
"/home/yehuo/nullspace_mpc/src/openni2_camera/include/openni2_camera/openni2_device.h:67:48: error: ISO C++17 does not allow dynamic exception specifications 67 | OpenNI2Device(const std::string& device_URI) throw (OpenNI2Exception); "
直接删除或注释即可

右值"rvalue"错误
error: taking address of rvalue [-fpermissive]
pos.object_id = static_cast<std::ostringstream*>(&(std::ostringstream() << max_id_))->str();

第七步:编译项目
cd nullspace_mpc
sudo rosdep init # 如果已经显示初始化,则跳过这条指令,直接执行下一条
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro noetic
论文复现【Switching Sampling Space of Model Predictive Path-Integral Controller to Balance Efficiency and Safety in 4WIDS Vehicle Navigation】的更多相关文章
- Visualizing and Understanding Convolutional Networks论文复现笔记
目录 Visualizing and Understanding Convolutional Networks 论文复现笔记 Abstract Introduction Approach Visual ...
- FCOS论文复现:通用物体检测算法
摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现.本代码支持FCOS + ResNet-101在MS-COCO数据集上 ...
- Split to Be Slim: 论文复现
摘要:在本论文中揭示了这样一种现象:一层内的许多特征图共享相似但不相同的模式. 本文分享自华为云社区<Split to Be Slim: 论文复现>,作者: 李长安 . Split to ...
- 一文详解ATK Loss论文复现与代码实战
摘要:该方法的主要思想是使用数值较大的排在前面的梯度进行反向传播,可以认为是一种在线难例挖掘方法,该方法使模型讲注意力放在较难学习的样本上,以此让模型产生更好的效果. 本文分享自华为云社区<AT ...
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller
ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Mess ...
- Asp.Net Core 入门(四)—— Model、View、Controller
和我们学习Asp.Net MVC一样,Asp.Net Core MVC的Model.View.Controller也和我们熟悉的Asp.Net MVC中的相似.不同的是我们在使用Asp.Net Cor ...
- Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易
近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...
- 小白经典CNN论文复现系列(一):LeNet1989
小白的经典CNN复现系列(一):LeNet-1989 之前的浙大AI作业的那个系列,因为后面的NLP的东西我最近大概是不会接触到,所以我们先换一个系列开始更新博客,就是现在这个经典的CNN复现啦(。・ ...
- 论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks
13 A Data-Driven Graph Generative Model for Temporal Interaction Networks link:https://scholar.googl ...
随机推荐
- d.ts文件无法识别
比如我给window全局扩展了一个属性 demo/global.d.ts declare global { interface Window { $electron: any; } } export ...
- Codeforces Round #619 (Div. 2) ABC 题解
A. Three Strings 题意:每次可以把c[i]拿去和a[i]或b[i]交换. 问你能否把ab变成相等. 思路:在ab不相等的时候看看c能不能与一方相等来中和.不能的话就不行. view c ...
- SciTech-AV-Audio-Coding-Sampling-PCM:Multiplex(FD频分/TD时分多工)+DPCM(Delta增量)+ADPCM(Adaptive Delta自适应增量) + Oversampling超采样
pdf: https://web.stanford.edu/class/ee179/lectures/notes13.pdf EE 179: Communication Systems Textboo ...
- MySQL 19 为什么我只查一行的语句,也执行这么慢?
有些情况下,"查一行"也会执行特别慢,今天就看看什么情况会出现这个现象. 如果MySQL本身有很大压力,导致数据库服务器CPU占有率很高或IO利用率很高,这种情况所有语句的执行都可 ...
- Nginx通过反向代理将https访问地址代理至内网-九五小庞
server { listen 7090 default_server; listen [::]:7090 default_server; #server_name _; root /usr/shar ...
- 深入浅出--从零开始建设k8s监控之thanos(六)
前言 书接上文,目前环境已经做好了水平拆分,是这个样子的 本文使用thanos对这些prometheus进行数据汇聚,并且详细讨论一下thanos 环境准备 组件 版本 操作系统 Ubuntu 22. ...
- ClickHouse 运维相关部分命令记录
利用clickhouse-client和linux管道命令结合,迁移数据.这个办法速度不是特别快,一下午大概迁移40亿数据的样子 clickhouse-client --host 127.0.0.1 ...
- 一名ICer的博客开帖记录
前言 看园子内容已有3-4年之久,虽然对于一名ICer来说,园子内容偏少.但是仍然"咸鱼IC"等一众大佬的优质好文,让我知道这是我未来学习技术的一个好地方.也在我心中埋下了一个未来 ...
- 2.3 rt-thread 控制台串口
1.menuconfig 2.烧录程序后,发现不好使,msh无输出,输入也不行,排查发现是,官方bsp和我板载的uart1引脚不一致引起,修改后测试正常. 编译后报错,原因是使能串口1后,串口1的发送 ...
- Origin2022中文版绘制套娃式柱形图,大柱套小柱!
柱形图是科研中常用的图表之一,为了同时展示分数据与总数据之间的趋势分布,我们可以采用大柱形图(总数据)嵌套小柱形图(分数据)的展示方式,使图表更清晰直观,下面给大家分享如何制作套娃式柱形图: 操作步骤 ...